Author: jbonofre
Date: Sun Sep 23 20:09:13 2012
New Revision: 1389137

URL: http://svn.apache.org/viewvc?rev=1389137&view=rev
Log:
[KARAF-1541] Enhance the jaas:realm-manage command supporting different way to 
select realm/module

Modified:
    
karaf/trunk/jaas/command/src/main/java/org/apache/karaf/jaas/command/JaasCommandSupport.java
    
karaf/trunk/jaas/command/src/main/java/org/apache/karaf/jaas/command/ListRealmsCommand.java
    
karaf/trunk/jaas/command/src/main/java/org/apache/karaf/jaas/command/ManageRealmCommand.java

Modified: 
karaf/trunk/jaas/command/src/main/java/org/apache/karaf/jaas/command/JaasCommandSupport.java
URL: 
http://svn.apache.org/viewvc/karaf/trunk/jaas/command/src/main/java/org/apache/karaf/jaas/command/JaasCommandSupport.java?rev=1389137&r1=1389136&r2=1389137&view=diff
==============================================================================
--- 
karaf/trunk/jaas/command/src/main/java/org/apache/karaf/jaas/command/JaasCommandSupport.java
 (original)
+++ 
karaf/trunk/jaas/command/src/main/java/org/apache/karaf/jaas/command/JaasCommandSupport.java
 Sun Sep 23 20:09:13 2012
@@ -59,53 +59,6 @@ public abstract class JaasCommandSupport
         return null;
     }
 
-
-    /**
-     * Returns the JAAS Realm named as realmName.
-     *
-     * @param realmName the name of the JAAS Realm.
-     * @return the corresponding <code>JaasRealm</code>.
-     */
-    public JaasRealm findRealm(String realmName) {
-        if (realms != null) {
-            for (JaasRealm realm : realms) {
-                if (realm.getName().equals(realmName)) {
-                    return realm;
-                }
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Returns the JAAS Module entry of the specified realm, identified by the 
given name.
-     *
-     * @param realm the JAAS realm.
-     * @param moduleName the JAAS module name.
-     * @return the corresponding <code>AppConfigurationEntry</code>.
-     */
-    public AppConfigurationEntry findLoginModule(JaasRealm realm, String 
moduleName) {
-
-        AppConfigurationEntry appConfigurationEntry = null;
-        if (realm != null) {
-            AppConfigurationEntry[] entries = realm.getEntries();
-
-            // if no moduleName provided and a there is a single module in the 
realm.
-            if (entries != null && entries.length == 1 && moduleName == null) {
-                return entries[0];
-            }
-
-            for (AppConfigurationEntry entry : entries) {
-                String moduleClass = (String) 
entry.getOptions().get(ProxyLoginModule.PROPERTY_MODULE);
-                if (moduleName != null && 
(moduleName.equals(entry.getLoginModuleName()) || 
moduleName.equals(moduleClass))) {
-                    return entry;
-                }
-            }
-
-        }
-        return appConfigurationEntry;
-    }
-
     public List<JaasRealm> getRealms() {
         return realms;
     }

Modified: 
karaf/trunk/jaas/command/src/main/java/org/apache/karaf/jaas/command/ListRealmsCommand.java
URL: 
http://svn.apache.org/viewvc/karaf/trunk/jaas/command/src/main/java/org/apache/karaf/jaas/command/ListRealmsCommand.java?rev=1389137&r1=1389136&r2=1389137&view=diff
==============================================================================
--- 
karaf/trunk/jaas/command/src/main/java/org/apache/karaf/jaas/command/ListRealmsCommand.java
 (original)
+++ 
karaf/trunk/jaas/command/src/main/java/org/apache/karaf/jaas/command/ListRealmsCommand.java
 Sun Sep 23 20:09:13 2012
@@ -36,10 +36,12 @@ public class ListRealmsCommand extends J
         List<JaasRealm> realms = getRealms();
 
         ShellTable table = new ShellTable();
+        table.column("Index");
         table.column("Realm Name");
         table.column("Login Module Class Name");
 
         if (realms != null && realms.size() > 0) {
+            int index = 1;
             for (JaasRealm realm : realms) {
                 String realmName = realm.getName();
                 AppConfigurationEntry[] entries = realm.getEntries();
@@ -47,7 +49,7 @@ public class ListRealmsCommand extends J
                 if (entries != null && entries.length > 0) {
                     for (int i = 0; i < entries.length; i++) {
                         String moduleClass = (String) 
entries[i].getOptions().get(ProxyLoginModule.PROPERTY_MODULE);
-                        table.addRow().addContent(realmName, moduleClass);
+                        table.addRow().addContent(index++, realmName, 
moduleClass);
                     }
                 }
             }

Modified: 
karaf/trunk/jaas/command/src/main/java/org/apache/karaf/jaas/command/ManageRealmCommand.java
URL: 
http://svn.apache.org/viewvc/karaf/trunk/jaas/command/src/main/java/org/apache/karaf/jaas/command/ManageRealmCommand.java?rev=1389137&r1=1389136&r2=1389137&view=diff
==============================================================================
--- 
karaf/trunk/jaas/command/src/main/java/org/apache/karaf/jaas/command/ManageRealmCommand.java
 (original)
+++ 
karaf/trunk/jaas/command/src/main/java/org/apache/karaf/jaas/command/ManageRealmCommand.java
 Sun Sep 23 20:09:13 2012
@@ -15,7 +15,7 @@
  */
 package org.apache.karaf.jaas.command;
 
-import org.apache.karaf.shell.commands.Argument;
+import org.apache.karaf.jaas.boot.ProxyLoginModule;
 import org.apache.karaf.shell.commands.Command;
 import org.apache.karaf.shell.commands.Option;
 import org.apache.karaf.jaas.config.JaasRealm;
@@ -23,15 +23,19 @@ import org.apache.karaf.jaas.modules.Bac
 
 import javax.security.auth.login.AppConfigurationEntry;
 import java.util.LinkedList;
+import java.util.List;
 import java.util.Queue;
 
 @Command(scope = "jaas", name = "realm-manage", description = "Manage users 
and roles of a JAAS Realm")
 public class ManageRealmCommand extends JaasCommandSupport {
 
-    @Argument(index = 0, name = "realm", description = "JAAS Realm", required 
= true, multiValued = false)
+    @Option(name = "--realm", description = "JAAS Realm", required = false, 
multiValued = false)
     String realmName;
 
-    @Argument(index = 1, name = "module", description = "JAAS Login Module 
Class Name", required = false, multiValued = false)
+    @Option(name = "--index", description = "Realm Index", required = false, 
multiValued = false)
+    int index;
+
+    @Option(name = "--module", description = "JAAS Login Module Class Name", 
required = false, multiValued = false)
     String moduleName;
 
     @Option(name = "-f", aliases = { "--force" }, description = "Force the 
management of this realm, even if another one was under management", required = 
false, multiValued = false)
@@ -40,37 +44,90 @@ public class ManageRealmCommand extends 
     @SuppressWarnings("unchecked")
     @Override
     protected Object doExecute() throws Exception {
+        if (realmName == null && index <= 0) {
+            System.err.println("A valid realm or the realm index need to be 
specified");
+            return null;
+        }
         JaasRealm oldRealm = (JaasRealm) this.session.get(JAAS_REALM);
         AppConfigurationEntry oldEntry = (AppConfigurationEntry) 
this.session.get(JAAS_ENTRY);
 
         if (oldRealm != null && !oldRealm.getName().equals(realmName) && 
!force) {
-            System.err.println("Another JAAS Realm is edited. Cancel/update 
first, or use the --force option.");
+            System.err.println("Another JAAS Realm is being edited. 
Cancel/update first, or use the --force option.");
         } else if (oldEntry != null && 
!oldEntry.getLoginModuleName().equals(moduleName) && !force) {
-            System.err.println("Another JASS Login Module is edited. 
Cancel/update first, or use the --force option.");
+            System.err.println("Another JAAS Login Module is being edited. 
Cancel/update first, or use the --force option.");
         } else {
 
-            JaasRealm realm = findRealm(realmName);
-
-            if (realm != null) {
-                AppConfigurationEntry entry = findLoginModule(realm, 
moduleName);
+            JaasRealm realm = null;
+            AppConfigurationEntry entry = null;
 
-                if (entry != null) {
-                    Queue<JaasCommandSupport> commands = null;
-
-                    commands = (Queue<JaasCommandSupport>) 
this.session.get(JAAS_CMDS);
-                    if (commands == null) {
-                        commands = new LinkedList<JaasCommandSupport>();
+            if (index > 0) {
+                // user provided the index, get the realm AND entry from the 
index
+                List<JaasRealm> realms = getRealms();
+                if (realms != null && realms.size() > 0) {
+                    int i = 1;
+                    for (JaasRealm r : realms) {
+                        AppConfigurationEntry[] entries = r.getEntries();
+
+                        if (entries != null) {
+                            for (int j = 0; j < entries.length; j++) {
+                                if (i == index) {
+                                    realm = r;
+                                    entry = entries[j];
+                                    break;
+                                }
+                                i++;
+                            }
+                        }
                     }
-
-                    this.session.put(JAAS_REALM, realm);
-                    this.session.put(JAAS_ENTRY, entry);
-                    this.session.put(JAAS_CMDS, commands);
-                } else {
-                    System.err.println(String.format("Could not find JAAS 
Login Module %s in Realm %s", moduleName, realmName));
                 }
             } else {
-                System.err.println(String.format("Could not find JAAS Realm 
%s", realmName));
+                List<JaasRealm> realms = getRealms();
+                if (realms != null && realms.size() > 0) {
+                    for (JaasRealm r : realms) {
+                        if (r.getName().equals(realmName)) {
+                            realm = r;
+                            break;
+                        }
+                    }
+
+                }
+                AppConfigurationEntry[] entries = realm.getEntries();
+                if (entries != null) {
+                    for (AppConfigurationEntry e : entries) {
+                        String moduleClass = (String) 
e.getOptions().get(ProxyLoginModule.PROPERTY_MODULE);
+                        if (moduleName == null) {
+                            entry = e;
+                            break;
+                        } else {
+                            if (moduleName.equals(e.getLoginModuleName()) || 
moduleName.equals(moduleClass)) {
+                                entry = e;
+                                break;
+                            }
+                        }
+                    }
+                }
+            }
+
+            if (realm == null) {
+                System.err.println("JAAS realm has not been found.");
+                return null;
+            }
+
+            if (entry == null) {
+                System.err.println("JAAS module has not been found.");
+                return null;
             }
+
+            Queue<JaasCommandSupport> commands = null;
+
+            commands = (Queue<JaasCommandSupport>) this.session.get(JAAS_CMDS);
+            if (commands == null) {
+                commands = new LinkedList<JaasCommandSupport>();
+            }
+
+            this.session.put(JAAS_REALM, realm);
+            this.session.put(JAAS_ENTRY, entry);
+            this.session.put(JAAS_CMDS, commands);
         }
         return null;
     }


Reply via email to