Author: chatellier Date: 2009-05-25 11:03:17 +0000 (Mon, 25 May 2009) New Revision: 2266 Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/IsisConfig.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/launcher/SSHLauncherConfigUI.jaxx isis-fish/trunk/src/main/resources/i18n/isis-fish-en_GB.properties isis-fish/trunk/src/main/resources/i18n/isis-fish-fr_FR.properties Log: Add generate key option on caparmor config UI Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/IsisConfig.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/IsisConfig.java 2009-05-25 11:02:22 UTC (rev 2265) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/IsisConfig.java 2009-05-25 11:03:17 UTC (rev 2266) @@ -493,6 +493,15 @@ return result; } + /** + * Set ssh private key file path. + * + * @param sshFile new value + */ + public void setSSHPrivateKeyFilePath(File sshFile) { + setOption(Option.SSH_KEY_FILE.key, sshFile.getAbsolutePath()); + } + /* * Le type de simulation par defaut a utiliser (local, remote, ...) * @return Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/launcher/SSHLauncherConfigUI.jaxx =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/launcher/SSHLauncherConfigUI.jaxx 2009-05-25 11:02:22 UTC (rev 2265) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/launcher/SSHLauncherConfigUI.jaxx 2009-05-25 11:03:17 UTC (rev 2266) @@ -18,9 +18,11 @@ <JDialog resizable="false" title="isisfish.simulator.ssh.configuration.title" layout="{new BoxLayout(this.getContentPane(), BoxLayout.PAGE_AXIS)}"> <script><![CDATA[ + import java.io.IOException; import fr.ifremer.isisfish.IsisFish; import com.jcraft.jsch.JSch; import com.jcraft.jsch.JSchException; + import com.jcraft.jsch.KeyPair; import com.jcraft.jsch.Session; import fr.ifremer.isisfish.util.ssh.InvalidPassphraseException; import fr.ifremer.isisfish.util.ssh.SSHAgent; @@ -30,7 +32,7 @@ protected String currentSSHserver; protected String currentSSHUsername; - protected String currentSSHKey; + protected File currentSSHKey; protected String currentSSHUserhome; protected String currentSSHDatapath; protected String currentSSHIsisHome; @@ -85,7 +87,16 @@ setColor(false, usernameField); } - //currentSSHKey + // if ssh key is set, must be a valid file + currentSSHKey = new File(sshKeyField.getText().trim()); + if (!currentSSHKey.exists()) { + setColor(true, sshKeyField); + } + else { + sshKeyButton.setEnabled(false); + sshKeyField.setEnabled(false); + setColor(false, sshKeyField); + } currentSSHDatapath = sshDatapathField.getText().trim(); if (currentSSHDatapath.isEmpty()) { @@ -142,6 +153,7 @@ protected void saveSSHConfiguration() { IsisFish.config.setSimulatorSshServer(currentSSHserver); IsisFish.config.setSimulatorSshUsername(currentSSHUsername); + IsisFish.config.setSSHPrivateKeyFilePath(currentSSHKey); //IsisFish.config.setSimulatorSshUserHome(currentSSHUserhome); IsisFish.config.setSimulatorSshDataPath(currentSSHDatapath); @@ -161,21 +173,11 @@ protected void cancelSSHConfiguration() { dispose(); } - - protected void testSSHConfiguration() { - // pour ne pas bloquer le bouton test - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - testSSHConfigurationRunnable(); - } - }); - } /** * Realise une connexion ssh et teste les données. */ - protected void testSSHConfigurationRunnable() { + protected void testSSHConfiguration() { JSch jsch = new JSch(); String host = currentSSHserver; @@ -191,18 +193,17 @@ // add ssh key boolean sshKeyUsed = false; - File sshKey = IsisFish.config.getSSHPrivateKeyFilePath(); - if (sshKey.canRead()) { + if (currentSSHKey.canRead()) { if (log.isInfoEnabled()) { log.info(_("Ssh key found '%s' will be used to connect to", - sshKey.getAbsoluteFile(), host)); + currentSSHKey.getAbsoluteFile(), host)); } - jsch.addIdentity(sshKey.getAbsolutePath()); + jsch.addIdentity(currentSSHKey.getAbsolutePath()); sshKeyUsed = true; } else { if (log.isInfoEnabled()) { - log.info(_("Can't read ssh key : %s", sshKey)); + log.info(_("Can't read ssh key : %s", currentSSHKey)); } } @@ -212,7 +213,7 @@ SSHUserInfo ui = new SSHUserInfo(); if (sshKeyUsed) { String passphrase = null; - passphrase = SSHAgent.getAgent().getPassphrase(sshKey); + passphrase = SSHAgent.getAgent().getPassphrase(currentSSHKey); ui.setPassphrase(passphrase); setTestMessage(_("isisfish.simulator.ssh.configuration.connectingpk"), false); } @@ -231,16 +232,27 @@ validButton.setEnabled(true); } catch (NumberFormatException e) { + if (log.isErrorEnabled()) { + log.error("Can't connect", e); + } setTestMessage(_("isisfish.error.simulation.remote.wrongportvalue", sPort), true); } catch (JSchException e) { + if (log.isErrorEnabled()) { + log.error("Can't connect", e); + } setTestMessage(_("isisfish.simulator.ssh.configuration.connectionerror", e.getMessage()), true); } catch (InvalidPassphraseException e) { + if (log.isErrorEnabled()) { + log.error("Can't connect", e); + } setTestMessage(_("isisfish.simulator.ssh.configuration.invalidpassphrase"), true); } } /** * Get user home directory with an opened session. + * + * @deprecated not used anymore */ protected String getUserHomeDirectory(Session session) throws SSHException { @@ -256,7 +268,45 @@ String out = output.toString(); return out; } - + + /** + * Generate new SSH key. + */ + protected void generateSSHKey() { + if (currentSSHKey.exists()) { + throw new IllegalArgumentException("Can't overwrite ssh key"); + } + + try { + // make parent dir + if (currentSSHKey.getParentFile() != null && !currentSSHKey.getParentFile().exists()) { + currentSSHKey.getParentFile().mkdirs(); + } + JSch jsch=new JSch(); + KeyPair kpair=KeyPair.genKeyPair(jsch, KeyPair.RSA, 2048); + //kpair.setPassphrase(passphrase); + kpair.writePrivateKey(currentSSHKey.getAbsolutePath()); + kpair.writePublicKey(currentSSHKey.getAbsolutePath()+".pub", currentSSHUsername + "@forIsisFish"); + if (log.isInfoEnabled()) { + log.info("Finger print: "+kpair.getFingerPrint()); + } + kpair.dispose(); + } + catch (JSchException e) { + if (log.isErrorEnabled()) { + log.error("Can't make ssh key", e); + } + } + catch (IOException e) { + if (log.isErrorEnabled()) { + log.error("Can't make ssh key", e); + } + } + + // refresh ckeck + doCheck(); + } + protected void setColor(boolean invalid, JComponent component) { component.setForeground(invalid ? Color.RED: Color.BLACK); } @@ -273,7 +323,7 @@ <JLabel id='sshServerLabel' text='isisfish.config.main.simulation.ssh.server' toolTipText='isisfish.config.main.simulation.ssh.server' /> </cell> - <cell fill='horizontal' weightx="2.0"> + <cell fill='horizontal' columns="2"> <JTextField id='sshServerField' toolTipText='isisfish.config.main.simulation.ssh.server' onKeyReleased="doCheck()" /> </cell> @@ -283,7 +333,7 @@ <JLabel id='usernameLabel' text='isisfish.config.main.simulation.ssh.username' toolTipText='isisfish.config.main.simulation.ssh.username.description' /> </cell> - <cell> + <cell columns="2"> <JTextField id='usernameField' toolTipText='isisfish.config.main.simulation.ssh.username.description' onKeyReleased="doCheck()" /> </cell> @@ -292,10 +342,13 @@ <cell> <JLabel id='sshKeyLabel' text='isisfish.config.ssh.key.file' toolTipText='isisfish.config.ssh.key.file.description' /> </cell> - <cell> - <JTextField id='sshKeyField' enabled='false' toolTipText='isisfish.config.ssh.key.file.description' + <cell weightx="2.0"> + <JTextField id='sshKeyField' toolTipText='isisfish.config.ssh.key.file.description' onKeyReleased="doCheck()" /> </cell> + <cell> + <JButton id='sshKeyButton' text='isisfish.simulator.ssh.configuration.keygenerate' onActionPerformed="generateSSHKey()" /> + </cell> </row> </Table> <Table border='{BorderFactory.createTitledBorder(_("isisfish.simulator.ssh.configuration.environment"))}'> Modified: isis-fish/trunk/src/main/resources/i18n/isis-fish-en_GB.properties =================================================================== --- isis-fish/trunk/src/main/resources/i18n/isis-fish-en_GB.properties 2009-05-25 11:02:22 UTC (rev 2265) +++ isis-fish/trunk/src/main/resources/i18n/isis-fish-en_GB.properties 2009-05-25 11:03:17 UTC (rev 2266) @@ -928,6 +928,7 @@ isisfish.simulator.ssh.configuration.connectionok=Connection successfull isisfish.simulator.ssh.configuration.environment=Caparmor configuration isisfish.simulator.ssh.configuration.invalidpassphrase=Invalid passphrase +isisfish.simulator.ssh.configuration.keygenerate=Generate isisfish.simulator.ssh.configuration.test=Test configuration isisfish.simulator.ssh.configuration.title=Caparmor launcher configuration isisfish.simulator.subprocess.readoutput.error= Modified: isis-fish/trunk/src/main/resources/i18n/isis-fish-fr_FR.properties =================================================================== --- isis-fish/trunk/src/main/resources/i18n/isis-fish-fr_FR.properties 2009-05-25 11:02:22 UTC (rev 2265) +++ isis-fish/trunk/src/main/resources/i18n/isis-fish-fr_FR.properties 2009-05-25 11:03:17 UTC (rev 2266) @@ -928,6 +928,7 @@ isisfish.simulator.ssh.configuration.connectionok=Connect\u00E9 avec succ\u00E8s isisfish.simulator.ssh.configuration.environment=Configuration sur Caparmor isisfish.simulator.ssh.configuration.invalidpassphrase=Passphrase invalide +isisfish.simulator.ssh.configuration.keygenerate=G\u00E9n\u00E9rer isisfish.simulator.ssh.configuration.test=Tester la configuration isisfish.simulator.ssh.configuration.title=Configuration du lanceur Caparmor isisfish.simulator.subprocess.readoutput.error=
participants (1)
-
chatellier@users.labs.libre-entreprise.org