1 package SnowMailClient.gnupg.Views; 2 3 4 import SnowMailClient.gnupg.*; 5 import SnowMailClient.gnupg.Main.GnuPGCommands; 6 import SnowMailClient.Language.Language; 7 import SnowMailClient.SnowMailClientApp; 8 import snow.sortabletable.*; 9 import snow.utils.gui.*; 10 import SnowMailClient.model.accounts.*; 11 12 import SnowMailClient.gnupg.model.*; 13 14 import java.awt.*; 15 import java.awt.event.*; 16 import javax.swing.*; 17 import javax.swing.event.*; 18 import javax.swing.border.*; 19 import java.util.*; 20 21 22 public final class GenerateGPGKeypairDialog extends JDialog implements ItemListener 23 { 24 private final CloseControlPanel ccp; 25 private final JComboBox mailAddressesCB; 26 private final JTextField nameField = new JTextField(20); 27 private final JPasswordField passphraseField = new JPasswordField(20); 28 private final JPasswordField passphraseVerifField = new JPasswordField(20); 29 private final JTextField commentField = new JTextField("Snowmail", 20); 30 private final JComboBox strengthCB = new JComboBox(new String []{"4096", "2048", "1024"}); 31 private final JComboBox validityCB = new JComboBox(new String []{Language.translate("Never expires"), "2010-01-01"}); 32 33 private final KeysTableModel tableModel; 34 35 36 37 public GenerateGPGKeypairDialog(JDialog parent, KeysTableModel tableModel) 38 { 39 super(parent, Language.translate("Generate a new GnuPG keypair (DSA & El-Gamal)"), true); 40 this.tableModel = tableModel; 41 42 getContentPane().setLayout(new BorderLayout()); 43 44 mailAddressesCB = new JComboBox(SnowMailClientApp.getInstance().getAccounts().getAllMailAddresses()); 46 JPanel centerPanel = new JPanel(); 47 GridLayout3 gl = new GridLayout3(2,centerPanel); 48 centerPanel.setLayout(gl); 49 getContentPane().add(centerPanel, BorderLayout.CENTER); 50 51 gl.add(Language.translate("Mail Address")); 52 gl.add(mailAddressesCB, true); 53 mailAddressesCB.setEditable(true); 54 mailAddressesCB.setMaximumRowCount(20); 55 mailAddressesCB.addItemListener(this); 56 57 gl.add(Language.translate("Name")); 58 gl.add(nameField, false); 59 60 gl.add(Language.translate("Comment")); 61 gl.add(commentField, false); 62 63 gl.add(Language.translate("Passphrase")); 64 gl.add(passphraseField, false); 65 66 gl.add(Language.translate("Verification")); 67 gl.add(passphraseVerifField, false); 68 69 70 gl.add(Language.translate("El-Gamal key length")); 71 gl.add(strengthCB, false); 72 strengthCB.setSelectedIndex(1); 73 74 gl.add(Language.translate("Expiration date")); 75 gl.add(validityCB, false); 76 validityCB.setSelectedIndex(1); 77 validityCB.setEditable(true); 78 79 ccp = new CloseControlPanel(this, true, true, Language.translate("Generate keypair")); 81 getContentPane().add(ccp, BorderLayout.SOUTH); 82 83 itemStateChanged(null); 85 86 pack(); 88 SnowMailClientApp.centerComponentOnMainFrame(this); 89 setVisible(true); 90 91 if(!ccp.getWasCancelled()) 92 { 93 generateKeyPair(); 94 } 95 96 } 98 99 101 public String getMailAddress() { return (String ) mailAddressesCB.getSelectedItem(); } 102 public String getUserName() { return this.nameField.getText(); } 103 public String getComment() { return this.commentField.getText(); } 104 public String getKeyLength() { return (String ) this.strengthCB.getSelectedItem(); } 105 private final String getPassphrase() { return new String (passphraseField.getPassword()); } 106 public String getValidity() 107 { 108 if(validityCB.getSelectedIndex()==0) return "0"; 109 return (String ) validityCB.getSelectedItem(); 110 } 111 112 113 public void itemStateChanged(ItemEvent e) 114 { 115 String mail = (String ) mailAddressesCB.getSelectedItem(); 116 MailAccount ma = SnowMailClientApp.getInstance().getAccounts().getMailAccount(mail); 117 if(ma!=null) 118 { 119 nameField.setText(ma.getName()); 120 } 121 else 122 { 123 } 125 } 126 127 private void checkParams() throws Exception 128 { 129 if(getPassphrase().length()<6) throw new Exception (Language.translate("Passphrase should have at least 6 characters")); 130 if(!Arrays.equals(passphraseVerifField.getPassword(), passphraseField.getPassword())) 131 { 132 throw new Exception (Language.translate("Passphrase verification failed")); 133 } 134 } 135 136 private void generateKeyPair() 137 { 138 final ProgressModalDialog progress = new ProgressModalDialog(this, Language.translate("Generating GnuPG keypair"), false); 139 SnowMailClientApp.centerComponentOnMainFrame(progress); 140 141 Thread t = new Thread () 142 { 143 public void run() 144 { 145 try 146 { 147 checkParams(); 148 149 GnuPGCommands.generateNew_DSA_ElG_KeyPair(SnowMailClientApp.getInstance().getGnuPGLink().getPathToGPG(), 150 getUserName(), 151 getComment(), 152 getMailAddress(), 153 getPassphrase(), 154 getKeyLength(), 155 getValidity(), 156 progress); 157 158 EventQueue.invokeLater(new Runnable () { public void run() { 159 tableModel.refreshModel(SnowMailClientApp.getInstance().getGnuPGLink()); 160 }}); 161 } 162 catch(Exception ex) 163 { 164 JOptionPane.showMessageDialog(progress, 165 Language.translate("Error:")+"\n"+ex.getMessage(), 166 Language.translate("Cannot generate keys"), JOptionPane.ERROR_MESSAGE); 167 ex.printStackTrace(); 168 } 169 finally 170 { 171 progress.closeDialog(); 172 } 173 } 174 }; 175 176 t.start(); 177 t.setPriority(Thread.NORM_PRIORITY-1); 178 progress.start(); 180 181 182 } 183 184 } | Popular Tags |