]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/jsch/SimpleUserInfo.java
Improve SSH UI user info
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.simple / src / main / java / org / argeo / slc / jsch / SimpleUserInfo.java
index 3691bb6756e0600181e58be87767a3573950166f..ca2b8d8511dc9ba5c4986fbf80771ca82949df77 100644 (file)
@@ -1,3 +1,19 @@
+/*
+ * Copyright (C) 2010 Mathieu Baudier <mbaudier@argeo.org>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *         http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package org.argeo.slc.jsch;
 
 import java.io.IOException;
@@ -13,17 +29,36 @@ import com.jcraft.jsch.UserInfo;
 
 public class SimpleUserInfo implements UserInfo {
        private Boolean permissive = true;
+       private Boolean verbose = false;
+
        private final static Log log = LogFactory.getLog(SimpleUserInfo.class);
 
-       private String password;
-       private char[] passwordSafe;
+       protected String password;
+       protected char[] passwordSafe;
+       protected String passphrase;
+       protected char[] passphraseSafe;
+
+       public void reset() {
+               if (passwordSafe != null)
+                       Arrays.fill(passwordSafe, (char) 0);
+               passwordSafe = null;
+               if (passphraseSafe != null)
+                       Arrays.fill(passphraseSafe, (char) 0);
+               passphraseSafe = null;
+       }
 
        public void setPassword(String password) {
                this.password = password;
        }
 
+       public void setPassphrase(String passphrase) {
+               this.passphrase = passphrase;
+       }
+
        public String getPassphrase() {
-               return null;
+               if (passphraseSafe != null)
+                       return new String(passphraseSafe);
+               return passphrase;
        }
 
        public String getPassword() {
@@ -33,14 +68,20 @@ public class SimpleUserInfo implements UserInfo {
        }
 
        public boolean promptPassphrase(String message) {
-               return true;
+               if (permissive)
+                       return true;
+               else {
+                       log.info(message);
+                       passwordSafe = readPassword(System.in);
+                       return passwordSafe != null;
+               }
        }
 
        public boolean promptPassword(String message) {
-               log.info(message);
                if (permissive)
                        return true;
                else {
+                       log.info(message);
                        passwordSafe = readPassword(System.in);
                        return passwordSafe != null;
                }
@@ -49,7 +90,8 @@ public class SimpleUserInfo implements UserInfo {
        public boolean promptYesNo(String message) {
                String msg = message + " (y/n): ";
                if (permissive) {
-                       log.info(msg + "y");
+                       if (verbose)
+                               log.info(msg + "y");
                        return true;
                } else {
                        log.info(msg);
@@ -74,12 +116,16 @@ public class SimpleUserInfo implements UserInfo {
                this.permissive = permissive;
        }
 
+       public void setVerbose(Boolean verbose) {
+               this.verbose = verbose;
+       }
+
        protected char[] readPassword(InputStream in) {
 
                try {
                        char[] lineBuffer;
                        char[] buf;
-                       //int i;
+                       // int i;
 
                        buf = lineBuffer = new char[128];