You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by gn...@apache.org on 2013/10/17 17:20:09 UTC

svn commit: r1533110 - in /karaf/trunk/client: pom.xml src/main/java/org/apache/karaf/client/ClientConfig.java src/main/java/org/apache/karaf/client/Main.java

Author: gnodet
Date: Thu Oct 17 15:20:09 2013
New Revision: 1533110

URL: http://svn.apache.org/r1533110
Log:
[KARAF-2521] The client script should find better default values

Modified:
    karaf/trunk/client/pom.xml
    karaf/trunk/client/src/main/java/org/apache/karaf/client/ClientConfig.java
    karaf/trunk/client/src/main/java/org/apache/karaf/client/Main.java

Modified: karaf/trunk/client/pom.xml
URL: http://svn.apache.org/viewvc/karaf/trunk/client/pom.xml?rev=1533110&r1=1533109&r2=1533110&view=diff
==============================================================================
--- karaf/trunk/client/pom.xml (original)
+++ karaf/trunk/client/pom.xml Thu Oct 17 15:20:09 2013
@@ -31,7 +31,7 @@
     <artifactId>org.apache.karaf.client</artifactId>
     <name>Apache Karaf :: Client</name>
     <description>Karaf client to connect remotely to a running Karaf instance.</description>
-    <packaging>jar</packaging>
+    <packaging>bundle</packaging>
 
     <properties>
         <appendedResourcesDirectory>${basedir}/../etc/appended-resources</appendedResourcesDirectory>
@@ -50,6 +50,10 @@
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-api</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.utils</artifactId>
+        </dependency>
     </dependencies>
 
 	<build>
@@ -61,6 +65,30 @@
         </resources>
 		<plugins>
             <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <configuration>
+                    <instructions>
+                        <_donotcopy>(CVS|.svn|config.properties)</_donotcopy>
+                        <Main-Class>org.apache.karaf.client.Main</Main-Class>
+                        <Bundle-Name>Apache Karaf Shell Client</Bundle-Name>
+                        <Bundle-Description>Shell client bundle for Apache Karaf.</Bundle-Description>
+                        <Private-Package>
+                            org.apache.karaf.client;
+                            org.slf4j.impl;
+                            org.apache.felix.utils.properties;-split-package:=merge-first,
+                            META-INF;-split-package:=merge-first
+                        </Private-Package>
+                        <Include-Resource>
+                            ../shell/ssh/src/main/resources/karaf.key,
+                            {maven-resources}
+                        </Include-Resource>
+                        <Import-Package>!*</Import-Package>
+                    </instructions>
+                    <unpackBundle>true</unpackBundle>
+                </configuration>
+            </plugin>
+            <plugin>
                 <groupId>org.codehaus.mojo</groupId>
                 <artifactId>build-helper-maven-plugin</artifactId>
                 <executions>

Modified: karaf/trunk/client/src/main/java/org/apache/karaf/client/ClientConfig.java
URL: http://svn.apache.org/viewvc/karaf/trunk/client/src/main/java/org/apache/karaf/client/ClientConfig.java?rev=1533110&r1=1533109&r2=1533110&view=diff
==============================================================================
--- karaf/trunk/client/src/main/java/org/apache/karaf/client/ClientConfig.java (original)
+++ karaf/trunk/client/src/main/java/org/apache/karaf/client/ClientConfig.java Thu Oct 17 15:20:09 2013
@@ -16,13 +16,21 @@
  */
 package org.apache.karaf.client;
 
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.felix.utils.properties.Properties;
+
 import org.slf4j.impl.SimpleLogger;
 
 public class ClientConfig {
-    
+
+    private static final String ROLE_DELIMITER = ",";
+
     private String host;
     private int port;
     private String user;
+    private String password;
     private int level;
     private int retryAttempts;
     private int retryDelay;
@@ -30,15 +38,20 @@ public class ClientConfig {
     private String file = null;
     private String command;
 
-    public ClientConfig(String[] args) {
-        host = "localhost";
-        port = 8101;
-        user = "karaf";
+    public ClientConfig(String[] args) throws IOException {
+        Properties shellCfg = new Properties(new File(System.getProperty("karaf.home"), "etc/org.apache.karaf.shell.cfg"));
+
+        host = shellCfg.getProperty("sshHost", "localhost");
+        port = Integer.parseInt(shellCfg.getProperty("sshPort", "8101"));
         level = SimpleLogger.WARN;
         retryAttempts = 0;
         retryDelay = 2;
         batch = false;
+        file = null;
+        user = null;
+        password = null;
         StringBuilder commandBuilder = new StringBuilder();
+
         for (int i = 0; i < args.length; i++) {
             if (args[i].charAt(0) == '-') {
                 if (args[i].equals("-a")) {
@@ -70,6 +83,18 @@ public class ClientConfig {
             }
         }
         command = commandBuilder.toString();
+
+        Properties usersCfg = new Properties(new File(System.getProperty("karaf.home") + "/etc/users.properties"));
+        if (!usersCfg.isEmpty()) {
+            if (user == null) {
+                user = (String) usersCfg.keySet().iterator().next();
+            }
+            password = (String) usersCfg.getProperty(user);
+            if (password != null && password.contains(ROLE_DELIMITER)) {
+                password = password.substring(0, password.indexOf(ROLE_DELIMITER));
+            }
+        }
+
     }
     
     private static void showHelp() {
@@ -100,6 +125,10 @@ public class ClientConfig {
         return user;
     }
 
+    public String getPassword() {
+        return password;
+    }
+
     public int getLevel() {
         return level;
     }

Modified: karaf/trunk/client/src/main/java/org/apache/karaf/client/Main.java
URL: http://svn.apache.org/viewvc/karaf/trunk/client/src/main/java/org/apache/karaf/client/Main.java?rev=1533110&r1=1533109&r2=1533110&view=diff
==============================================================================
--- karaf/trunk/client/src/main/java/org/apache/karaf/client/Main.java (original)
+++ karaf/trunk/client/src/main/java/org/apache/karaf/client/Main.java Thu Oct 17 15:20:09 2013
@@ -35,6 +35,7 @@ import org.apache.sshd.agent.SshAgent;
 import org.apache.sshd.agent.local.AgentImpl;
 import org.apache.sshd.agent.local.LocalAgentFactory;
 import org.apache.sshd.client.channel.ChannelShell;
+import org.apache.sshd.client.future.AuthFuture;
 import org.apache.sshd.client.future.ConnectFuture;
 import org.apache.sshd.common.RuntimeSshException;
 import org.fusesource.jansi.AnsiConsole;
@@ -78,18 +79,31 @@ public class Main {
             setupAgent(config.getUser(), client);
             client.start();
             ClientSession session = connectWithRetries(client, config);
+            Console console = System.console();
+            console.printf("Logging in as %s\n", config.getUser());
             if (!session.authAgent(config.getUser()).await().isSuccess()) {
-                String password = null;
-                Console console = System.console();
-                if (console != null) {
-                    char[] readPassword = console.readPassword("Password: ");
-                    if (readPassword != null) {
-                        password = new String(readPassword);
+                AuthFuture authFuture;
+                boolean useDefault = config.getPassword() != null;
+                do {
+                    String password;
+                    if (useDefault) {
+                        password = config.getPassword();
+                        useDefault = false;
+                    } else {
+                        if (console != null) {
+                            char[] readPassword = console.readPassword("Password: ");
+                            if (readPassword != null) {
+                                password = new String(readPassword);
+                            } else {
+                                return;
+                            }
+                        } else {
+                            throw new Exception("Unable to prompt password: could not get system console");
+                        }
                     }
-                } else {
-                    throw new Exception("Unable to prompt password: could not get system console");
-                }
-                if (!session.authPassword(config.getUser(), password).await().isSuccess()) {
+                    authFuture = session.authPassword(config.getUser(), password);
+                } while (authFuture.await().isFailure());
+                if (!authFuture.isSuccess()) {
                     throw new Exception("Authentication failure");
                 }
             }