package com.shaneisrael.st.ui;
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
import javax.swing.border.EmptyBorder;
import net.miginfocom.swing.MigLayout;
import javax.swing.JTextField;
import javax.swing.JLabel;
import java.awt.Font;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.math.BigInteger;
import java.security.SecureRandom;
import javax.swing.SwingConstants;
import com.shaneisrael.st.prefs.Preferences;
import com.shaneisrael.st.utilities.database.DBRegisterKey;
public class RegisterKeysetUI extends JFrame
{
private JPanel contentPane;
private JTextField textField;
private JTextField textField_1;
/**
* Create the frame.
*/
public RegisterKeysetUI()
{
final JFrame frame = this;
setTitle("Register New Keyset");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 370, 179);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
JPanel panel = new JPanel();
contentPane.add(panel, BorderLayout.CENTER);
panel.setLayout(new MigLayout("", "[161.00][79.00,grow]", "[36.00][28.00][][]"));
JLabel lblKey = new JLabel("Key 1");
lblKey.setFont(new Font("Tahoma", Font.BOLD, 14));
panel.add(lblKey, "cell 0 0,alignx center");
JLabel lblKey_1 = new JLabel("Key 2");
lblKey_1.setFont(new Font("Tahoma", Font.BOLD, 14));
panel.add(lblKey_1, "cell 1 0,alignx center");
textField = new JTextField();
textField.setFont(new Font("Tahoma", Font.BOLD, 13));
textField.setHorizontalAlignment(SwingConstants.CENTER);
panel.add(textField, "cell 0 1,growx");
textField.setColumns(10);
textField_1 = new JTextField();
textField_1.setFont(new Font("Tahoma", Font.BOLD, 13));
textField_1.setHorizontalAlignment(SwingConstants.CENTER);
panel.add(textField_1, "cell 1 1,growx");
textField_1.setColumns(10);
final JButton btnRegister = new JButton("Register");
btnRegister.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent arg0)
{
btnRegister.setEnabled(false);
/*If the keyset does not exist*/
if(textField.getText().length() < 32 && textField_1.getText().length() < 32)
{
boolean keysetExists = DBRegisterKey.register(textField.getText(), textField_1.getText());
if (!keysetExists)
{
/*
* Set the keys and add to prefs
*/
PreferencesUI.keyField1.setText(textField.getText());
PreferencesUI.keyField2.setText(textField_1.getText());
Preferences.getInstance().setUniqueKey1(textField.getText());
Preferences.getInstance().setUniqueKey2(textField_1.getText());
JOptionPane.showMessageDialog(frame, "Keyset registered successfully!", "Success!",
JOptionPane.PLAIN_MESSAGE);
if(Preferences.getInstance().isTrackingDisabled())
JOptionPane.showMessageDialog(null, "You must allow stat tracking before this\nkeyset can be used.", "Stat tracking disabled!",
JOptionPane.WARNING_MESSAGE);
dispose();
}
else
{
JOptionPane.showMessageDialog(null,
"This key set has already been registered, please \nchoose a different key set combo.",
"Register Failed", JOptionPane.ERROR_MESSAGE);
}
}
else
JOptionPane.showMessageDialog(null,
"Keys must be less than 32 characters!",
"Register Failed", JOptionPane.ERROR_MESSAGE);
btnRegister.setEnabled(true);
}
});
JButton btnGenerateKey = new JButton("Generate Keyset");
btnGenerateKey.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
textField.setText(SecureKeyGenerator.nextKey());
textField_1.setText(SecureKeyGenerator.nextKey());
}
});
panel.add(btnGenerateKey, "cell 1 2,alignx center");
panel.add(btnRegister, "cell 1 3,alignx center");
this.setLocationRelativeTo(null);
this.setResizable(false);
this.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
this.setVisible(true);
}
public final static class SecureKeyGenerator
{
public static String nextKey()
{
SecureRandom random = new SecureRandom();
return new BigInteger(130, random).toString(32);
}
}
}