You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2012/01/18 22:01:38 UTC

svn commit: r1233068 - in /openejb/trunk/openejb/server: openejb-common-cli/src/main/java/org/apache/openejb/server/cli/ openejb-ssh/src/main/java/org/apache/openejb/server/ssh/

Author: rmannibucau
Date: Wed Jan 18 21:01:37 2012
New Revision: 1233068

URL: http://svn.apache.org/viewvc?rev=1233068&view=rev
Log:
trying to keep username in openejb-ssh

Added:
    openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/OpenEJBJaasPasswordAuthenticator.java
Modified:
    openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/CliRunnable.java
    openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/OpenEJBCommands.java
    openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/OpenEJBShellFactory.java
    openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/SSHServer.java

Modified: openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/CliRunnable.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/CliRunnable.java?rev=1233068&r1=1233067&r2=1233068&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/CliRunnable.java (original)
+++ openejb/trunk/openejb/server/openejb-common-cli/src/main/java/org/apache/openejb/server/cli/CliRunnable.java Wed Jan 18 21:01:37 2012
@@ -33,7 +33,8 @@ public class CliRunnable implements Runn
     private static final String WELCOME = "Welcome on your $bind:$port $name server";
     private static final String OS_LINE_SEP = System.getProperty("line.separator");
     private static final String NAME;
-    private static final String PROMPT = "openejb> ";
+    private static final String PROMPT;
+    private static final String PROMPT_SUFFIX = "> ";
     private static final List<Class<? extends AbstractCommand>> COMMAND_CLASSES
             = Arrays.asList(GroovyCommand.class, GroovyFileCommand.class,
                 ListCommand.class, PropertiesCommand.class,
@@ -49,6 +50,7 @@ public class CliRunnable implements Runn
             // ignored, we are using a simple OpenEJB server
         }
         NAME = name;
+        PROMPT = NAME.toLowerCase() + PROMPT_SUFFIX;
     }
 
     public String lineSep;
@@ -57,18 +59,20 @@ public class CliRunnable implements Runn
     private OutputStream err;
     private OutputStream out;
     private InputStream sin;
+    private String username;
     private String bind;
     private int port;
     private Map<String, Class<?>> commands;
 
 
     public CliRunnable(String bind, int port) {
-        this(bind, port, null);
+        this(bind, port, PROMPT, null);
     }
 
-    public CliRunnable(String bind, int port, String sep) {
+    public CliRunnable(String bind, int port, String username, String sep) {
         this.bind = bind;
         this.port = port;
+        this.username = username;
 
         if (sep != null) { // workaround to force ConsoleReader to use another line.separator
             lineSep = sep;
@@ -136,7 +140,8 @@ public class CliRunnable implements Runn
                     .replace("$bind", bind)
                     .replace("$port", Integer.toString(port))
                     .replace("$name", NAME));
-            while ((line = reader.readLine(PROMPT)) != null) {
+
+            while ((line = reader.readLine(prompt())) != null) {
                 // exit simply let us go out of the loop
                 // do we need a command for it?
                 if (EXIT_COMMAND.equals(line)) {
@@ -177,6 +182,19 @@ public class CliRunnable implements Runn
         }
     }
 
+    private String prompt() {
+        final StringBuilder prompt = new StringBuilder("");
+        if (username != null) {
+            prompt.append(username);
+        } else {
+            prompt.append(PROMPT);
+        }
+        prompt.append(" @ ")
+            .append(bind).append(":").append(port)
+            .append(PROMPT_SUFFIX);
+        return prompt.toString();
+    }
+
     private void properties() {
         final OpenEjbConfiguration config = SystemInstance.get().getComponent(OpenEjbConfiguration.class);
         Info2Properties.printConfig(config, new PrintStream(out), lineSep);

Modified: openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/OpenEJBCommands.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/OpenEJBCommands.java?rev=1233068&r1=1233067&r2=1233068&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/OpenEJBCommands.java (original)
+++ openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/OpenEJBCommands.java Wed Jan 18 21:01:37 2012
@@ -12,8 +12,8 @@ import java.io.OutputStream;
 public class OpenEJBCommands extends CliRunnable implements Command, Runnable {
     private ExitCallback cbk;
 
-    public OpenEJBCommands(String bind, int port) {
-        super(bind, port, "\r\n"); // don't use os line.separator
+    public OpenEJBCommands(String bind, int port, String username) {
+        super(bind, port, username, "\r\n"); // don't use os line.separator
     }
 
     @Override

Added: openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/OpenEJBJaasPasswordAuthenticator.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/OpenEJBJaasPasswordAuthenticator.java?rev=1233068&view=auto
==============================================================================
--- openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/OpenEJBJaasPasswordAuthenticator.java (added)
+++ openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/OpenEJBJaasPasswordAuthenticator.java Wed Jan 18 21:01:37 2012
@@ -0,0 +1,20 @@
+package org.apache.openejb.server.ssh;
+
+import org.apache.sshd.server.jaas.JaasPasswordAuthenticator;
+
+public class OpenEJBJaasPasswordAuthenticator extends JaasPasswordAuthenticator {
+    private OpenEJBShellFactory shellFactory;
+
+    public OpenEJBJaasPasswordAuthenticator(OpenEJBShellFactory sf) {
+        this.shellFactory = sf;
+    }
+
+    @Override
+    public boolean authenticate(final String username, final String password) {
+        if (super.authenticate(username, password)) {
+            shellFactory.setUsername(username);
+            return true;
+        }
+        return false;
+    }
+}

Modified: openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/OpenEJBShellFactory.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/OpenEJBShellFactory.java?rev=1233068&r1=1233067&r2=1233068&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/OpenEJBShellFactory.java (original)
+++ openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/OpenEJBShellFactory.java Wed Jan 18 21:01:37 2012
@@ -6,6 +6,7 @@ import org.apache.sshd.server.Command;
 public class OpenEJBShellFactory implements Factory<Command> {
     private String bind;
     private int port;
+    private ThreadLocal<String> username = new ThreadLocal<String>();
 
     public OpenEJBShellFactory(String bind, int port) {
         this.bind = bind;
@@ -14,6 +15,10 @@ public class OpenEJBShellFactory impleme
 
     @Override
     public Command create() {
-        return new OpenEJBCommands(bind, port);
+        return new OpenEJBCommands(bind, port, username.get());
+    }
+
+    public void setUsername(String username) {
+        this.username.set(username);
     }
 }

Modified: openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/SSHServer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/SSHServer.java?rev=1233068&r1=1233067&r2=1233068&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/SSHServer.java (original)
+++ openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/SSHServer.java Wed Jan 18 21:01:37 2012
@@ -43,13 +43,9 @@ public class SSHServer implements Server
 
     @Override
     public void start() throws ServiceException {
-        final JaasPasswordAuthenticator authenticator = new JaasPasswordAuthenticator();
-        authenticator.setDomain(domain);
-
         sshServer = SshServer.setUpDefaultServer();
         sshServer.setPort(port);
         sshServer.setHost(bind);
-        sshServer.setPasswordAuthenticator(authenticator);
 
         final String basePath = SystemInstance.get().getBase().getDirectory().getAbsolutePath();
         if (SecurityUtils.isBouncyCastleRegistered()) {
@@ -58,7 +54,12 @@ public class SSHServer implements Server
             sshServer.setKeyPairProvider(new SimpleGeneratorHostKeyProvider(new File(basePath, KEY_NAME + ".ser").getPath()));
         }
 
-        sshServer.setShellFactory(new OpenEJBShellFactory(bind, port));
+        final OpenEJBShellFactory sf = new OpenEJBShellFactory(bind, port);
+        sshServer.setShellFactory(sf);
+
+        final JaasPasswordAuthenticator authenticator = new OpenEJBJaasPasswordAuthenticator(sf);
+        authenticator.setDomain(domain);
+        sshServer.setPasswordAuthenticator(authenticator);
 
         try {
             sshServer.start();