Move various CMS extensions to Argeo SLC.
[lgpl/argeo-commons.git] / org.argeo.core / src / org / argeo / ssh / AbstractSsh.java
diff --git a/org.argeo.core/src/org/argeo/ssh/AbstractSsh.java b/org.argeo.core/src/org/argeo/ssh/AbstractSsh.java
deleted file mode 100644 (file)
index 261ac24..0000000
+++ /dev/null
@@ -1,189 +0,0 @@
-package org.argeo.ssh;
-
-import java.io.Console;
-import java.io.IOException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Scanner;
-import java.util.Set;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.sshd.client.SshClient;
-import org.apache.sshd.client.channel.ClientChannel;
-import org.apache.sshd.client.channel.ClientChannelEvent;
-import org.apache.sshd.client.future.ConnectFuture;
-import org.apache.sshd.client.session.ClientSession;
-import org.apache.sshd.client.subsystem.sftp.fs.SftpFileSystemProvider;
-import org.apache.sshd.common.util.io.NoCloseInputStream;
-import org.apache.sshd.common.util.io.NoCloseOutputStream;
-
-@SuppressWarnings("restriction")
-abstract class AbstractSsh {
-       private final static Log log = LogFactory.getLog(AbstractSsh.class);
-
-       private static SshClient sshClient;
-       private static SftpFileSystemProvider sftpFileSystemProvider;
-
-       private boolean passwordSet = false;
-       private ClientSession session;
-
-       private SshKeyPair sshKeyPair;
-
-       synchronized SshClient getSshClient() {
-               if (sshClient == null) {
-                       long begin = System.currentTimeMillis();
-                       sshClient = SshClient.setUpDefaultClient();
-                       sshClient.start();
-                       long duration = System.currentTimeMillis() - begin;
-                       if (log.isDebugEnabled())
-                               log.debug("SSH client started in " + duration + " ms");
-                       Runtime.getRuntime().addShutdownHook(new Thread(() -> sshClient.stop(), "Stop SSH client"));
-               }
-               return sshClient;
-       }
-
-       synchronized SftpFileSystemProvider getSftpFileSystemProvider() {
-               if (sftpFileSystemProvider == null) {
-                       sftpFileSystemProvider = new SftpFileSystemProvider(sshClient);
-               }
-               return sftpFileSystemProvider;
-       }
-
-       void authenticate() {
-               try {
-                       if (sshKeyPair != null) {
-                               session.addPublicKeyIdentity(sshKeyPair.asKeyPair());
-                       } else {
-
-                               if (!passwordSet) {
-                                       String password;
-                                       Console console = System.console();
-                                       if (console == null) {// IDE
-                                               System.out.print("Password: ");
-                                               try (Scanner s = new Scanner(System.in)) {
-                                                       password = s.next();
-                                               }
-                                       } else {
-                                               console.printf("Password: ");
-                                               char[] pwd = console.readPassword();
-                                               password = new String(pwd);
-                                               Arrays.fill(pwd, ' ');
-                                       }
-                                       session.addPasswordIdentity(password);
-                                       passwordSet = true;
-                               }
-                       }
-                       session.auth().verify(1000l);
-               } catch (IOException e) {
-                       throw new IllegalStateException(e);
-               }
-       }
-
-       void addPassword(String password) {
-               session.addPasswordIdentity(password);
-       }
-
-       void loadKey(String password) {
-               loadKey(password, System.getProperty("user.home") + "/.ssh/id_rsa");
-       }
-
-       void loadKey(String password, String keyPath) {
-//             try {
-//                     KeyPair keyPair = ClientIdentityLoader.DEFAULT.loadClientIdentity(keyPath,
-//                                     FilePasswordProvider.of(password));
-//                     session.addPublicKeyIdentity(keyPair);
-//             } catch (IOException | GeneralSecurityException e) {
-//                     throw new IllegalStateException(e);
-//             }
-       }
-
-       void openSession(URI uri) {
-               openSession(uri.getUserInfo(), uri.getHost(), uri.getPort() > 0 ? uri.getPort() : null);
-       }
-
-       void openSession(String login, String host, Integer port) {
-               if (session != null)
-                       throw new IllegalStateException("Session is already open");
-
-               if (host == null)
-                       host = "localhost";
-               if (port == null)
-                       port = 22;
-               if (login == null)
-                       login = System.getProperty("user.name");
-               String password = null;
-               int sepIndex = login.indexOf(':');
-               if (sepIndex > 0)
-                       if (sepIndex + 1 < login.length()) {
-                               password = login.substring(sepIndex + 1);
-                               login = login.substring(0, sepIndex);
-                       } else {
-                               throw new IllegalArgumentException("Illegal authority: " + login);
-                       }
-               try {
-                       ConnectFuture connectFuture = getSshClient().connect(login, host, port);
-                       connectFuture.await();
-                       ClientSession session = connectFuture.getSession();
-                       if (password != null) {
-                               session.addPasswordIdentity(password);
-                               passwordSet = true;
-                       }
-                       this.session = session;
-               } catch (IOException e) {
-                       throw new IllegalStateException("Cannot connect to " + host + ":" + port);
-               }
-       }
-
-       void closeSession() {
-               if (session == null)
-                       throw new IllegalStateException("No session is open");
-               try {
-                       session.close();
-               } catch (IOException e) {
-                       e.printStackTrace();
-               } finally {
-                       session = null;
-               }
-       }
-
-       ClientSession getSession() {
-               return session;
-       }
-
-       public void setSshKeyPair(SshKeyPair sshKeyPair) {
-               this.sshKeyPair = sshKeyPair;
-       }
-
-       public static void openShell(ClientSession session) {
-               try (ClientChannel channel = session.createChannel(ClientChannel.CHANNEL_SHELL)) {
-                       channel.setIn(new NoCloseInputStream(System.in));
-                       channel.setOut(new NoCloseOutputStream(System.out));
-                       channel.setErr(new NoCloseOutputStream(System.err));
-                       channel.open();
-
-                       Set<ClientChannelEvent> events = new HashSet<>();
-                       events.add(ClientChannelEvent.CLOSED);
-                       channel.waitFor(events, 0);
-               } catch (IOException e) {
-                       // TODO Auto-generated catch block
-                       e.printStackTrace();
-               } finally {
-                       session.close(false);
-               }
-       }
-
-       static URI toUri(String username, String host, int port) {
-               try {
-                       if (username == null)
-                               username = "root";
-                       return new URI("ssh://" + username + "@" + host + ":" + port);
-               } catch (URISyntaxException e) {
-                       throw new IllegalArgumentException("Cannot generate SSH URI to " + host + ":" + port + " for " + username,
-                                       e);
-               }
-       }
-
-}