Java/Android stuff (me coding dirty \o/)
[saartuer.git] / JavaTuer / src / de / hacksaar / javatuer / SshClient.java
diff --git a/JavaTuer/src/de/hacksaar/javatuer/SshClient.java b/JavaTuer/src/de/hacksaar/javatuer/SshClient.java
new file mode 100644 (file)
index 0000000..7e63d31
--- /dev/null
@@ -0,0 +1,158 @@
+package de.hacksaar.javatuer;
+
+import com.jcraft.jsch.*;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+public class SshClient {
+       private static final String TAG = "SshClient";
+       private final String host;
+       private final String username;
+       private final int port;
+       private final JSch jSch;
+       private final TuerLogging log;
+       private Session session;
+       private Channel channel;
+
+       public SshClient(String host, String username, int port, TuerLogging log) {
+               this.host = host;
+               this.username = username;
+               this.port = port;
+               this.log = log;
+               JSch.setLogger(log);
+               jSch = new JSch();
+       }
+
+       public void addPrivateKey(String keyFilePath) throws JSchException {
+               jSch.addIdentity(keyFilePath);
+       }
+
+       public void addPrivateKey(String keyFilePath, String passphrase) throws JSchException {
+               jSch.addIdentity(keyFilePath, passphrase);
+       }
+
+       public void disconnect() {
+               channel.disconnect();
+               channel = null;
+               session.disconnect();
+               session = null;
+       }
+
+       public String getHost() {
+               return host;
+       }
+
+       public InputStream getInputStream() throws IOException {
+               if (channel == null) {
+                       return null;
+               }
+               return channel.getInputStream();
+       }
+
+       public OutputStream getOutputStream() throws IOException {
+               if (channel == null) {
+                       return null;
+               }
+               return channel.getOutputStream();
+       }
+
+       public int getPort() {
+               return port;
+       }
+
+       public String getUsername() {
+               return username;
+       }
+
+       public boolean isConnected() {
+               return channel != null && channel.isConnected() && session != null && session.isConnected();
+       }
+
+       public void login(final String password) throws JSchException {
+               login(new UserInfo() {
+
+                       @Override
+                       public String getPassphrase() {
+                               return null;
+                       }
+
+                       @Override
+                       public String getPassword() {
+                               return password;
+                       }
+
+                       @Override
+                       public boolean promptPassphrase(String s) {
+                               return false;
+                       }
+
+                       @Override
+                       public boolean promptPassword(String s) {
+                               return true;
+                       }
+
+                       @Override
+                       public boolean promptYesNo(String s) {
+                               return false;
+                       }
+
+                       @Override
+                       public void showMessage(String s) {
+                               log.info(TAG, s);
+                       }
+               });
+       }
+
+       public void login() throws JSchException {
+               login(new UserInfo() {
+
+                       @Override
+                       public String getPassphrase() {
+                               return null;
+                       }
+
+                       @Override
+                       public String getPassword() {
+                               return null;
+                       }
+
+                       @Override
+                       public boolean promptPassphrase(String s) {
+                               return false;
+                       }
+
+                       @Override
+                       public boolean promptPassword(String s) {
+                               return false;
+                       }
+
+                       @Override
+                       public boolean promptYesNo(String s) {
+                               return false;
+                       }
+
+                       @Override
+                       public void showMessage(String s) {
+                               log.info(TAG, s);
+                       }
+               });
+       }
+
+       public void login(UserInfo userInfo) throws JSchException {
+               log.debug(TAG, "Creating session");
+               if (session == null) {
+                       session = jSch.getSession(username, host, port);
+               }
+               if (!session.isConnected()) {
+                       session.setUserInfo(userInfo);
+                       log.debug(TAG, "Connecting");
+                       session.connect();
+                       log.debug(TAG, "Opening channel");
+                       channel = session.openChannel("shell");
+                       channel.connect();
+               }
+       }
+
+}