You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by ff...@apache.org on 2015/03/13 06:48:00 UTC

karaf git commit: [KARAF-3592]Add jaas commands to create group and list group (cherry picked from commit 4e3e53c5f5d55a9d9b90bab9636b9e9861ff1304)

Repository: karaf
Updated Branches:
  refs/heads/karaf-3.0.x 468f59977 -> 64e046eb1


[KARAF-3592]Add jaas commands to create group and list group
(cherry picked from commit 4e3e53c5f5d55a9d9b90bab9636b9e9861ff1304)

Conflicts:
	jaas/command/src/main/resources/OSGI-INF/blueprint/jaas-command.xml
	jaas/modules/src/main/java/org/apache/karaf/jaas/modules/jdbc/JDBCBackingEngine.java
	jaas/modules/src/main/java/org/apache/karaf/jaas/modules/properties/PropertiesBackingEngine.java


Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/64e046eb
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/64e046eb
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/64e046eb

Branch: refs/heads/karaf-3.0.x
Commit: 64e046eb13237250486c570c032ad70bed0dedee
Parents: 468f599
Author: Freeman Fang <fr...@gmail.com>
Authored: Tue Mar 10 13:17:55 2015 +0800
Committer: Freeman Fang <fr...@gmail.com>
Committed: Fri Mar 13 13:47:44 2015 +0800

----------------------------------------------------------------------
 .../karaf/jaas/command/GroupCreateCommand.java  | 48 ++++++++++++++
 .../karaf/jaas/command/ListGroupsCommand.java   | 69 ++++++++++++++++++++
 .../OSGI-INF/blueprint/jaas-command.xml         |  8 +++
 .../karaf/jaas/modules/BackingEngine.java       | 13 ++++
 .../jaas/modules/jdbc/JDBCBackingEngine.java    | 11 ++++
 .../properties/PropertiesBackingEngine.java     | 28 +++++++-
 .../publickey/PublickeyBackingEngine.java       | 25 +++++++
 .../modules/syncope/SyncopeBackingEngine.java   |  9 +++
 8 files changed, 208 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/64e046eb/jaas/command/src/main/java/org/apache/karaf/jaas/command/GroupCreateCommand.java
----------------------------------------------------------------------
diff --git a/jaas/command/src/main/java/org/apache/karaf/jaas/command/GroupCreateCommand.java b/jaas/command/src/main/java/org/apache/karaf/jaas/command/GroupCreateCommand.java
new file mode 100644
index 0000000..b15b91b
--- /dev/null
+++ b/jaas/command/src/main/java/org/apache/karaf/jaas/command/GroupCreateCommand.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.karaf.jaas.command;
+
+import org.apache.felix.gogo.commands.Argument;
+import org.apache.felix.gogo.commands.Command;
+import org.apache.karaf.jaas.modules.BackingEngine;
+
+@Command(scope = "jaas", name = "group-create", description = "create a group in a realm")
+public class GroupCreateCommand extends JaasCommandSupport {
+   
+    @Argument(index = 0, name = "group", description = "Group", required = true, multiValued = false)
+    private String group;
+
+    @Override
+    protected Object doExecute(BackingEngine engine) throws Exception {
+        engine.createGroup(group);
+        return null;
+    }
+
+        
+    public String getGroup() {
+        return group;
+    }
+
+    public void setGroup(String group) {
+        this.group = group;
+    }
+
+    @Override
+    public String toString() {
+        return "GroupCreateCommand {group='" + group + "'}";
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/karaf/blob/64e046eb/jaas/command/src/main/java/org/apache/karaf/jaas/command/ListGroupsCommand.java
----------------------------------------------------------------------
diff --git a/jaas/command/src/main/java/org/apache/karaf/jaas/command/ListGroupsCommand.java b/jaas/command/src/main/java/org/apache/karaf/jaas/command/ListGroupsCommand.java
new file mode 100644
index 0000000..37a4620
--- /dev/null
+++ b/jaas/command/src/main/java/org/apache/karaf/jaas/command/ListGroupsCommand.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.karaf.jaas.command;
+
+import java.security.Principal;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import javax.security.auth.login.AppConfigurationEntry;
+
+import org.apache.felix.gogo.commands.Command;
+import org.apache.karaf.jaas.boot.principal.GroupPrincipal;
+import org.apache.karaf.jaas.boot.principal.UserPrincipal;
+import org.apache.karaf.jaas.config.JaasRealm;
+import org.apache.karaf.jaas.modules.BackingEngine;
+
+@Command(scope = "jaas", name = "group-list", description = "List groups in a realm")
+public class ListGroupsCommand extends JaasCommandSupport {
+
+    private static final String GROUP_LIST_FORMAT = "%-10s  %-80s";
+
+        
+    @Override
+    protected Object doExecute() throws Exception {
+        JaasRealm realm = (JaasRealm) session.get(JAAS_REALM);
+        AppConfigurationEntry entry = (AppConfigurationEntry) session.get(JAAS_ENTRY);
+
+        if (realm == null || entry == null) {
+            System.err.println("No JAAS Realm / Module has been selected.");
+            return null;
+        }
+
+        BackingEngine engine = backingEngineService.get(entry);
+
+        if (engine == null) {
+            System.err.println("Can't get the list of users (no backing engine service registered)");
+            return null;
+        }
+
+        return doExecute(engine);
+    }
+
+    @Override
+    protected Object doExecute(BackingEngine engine) throws Exception {
+        System.out.println(String.format(GROUP_LIST_FORMAT, "Group", "Roles"));
+
+        for (GroupPrincipal group : engine.listGroups().keySet()) {
+            
+            System.out.println(String.format(GROUP_LIST_FORMAT, group.getName(), engine.listGroups().get(group)));
+        }
+        return null;
+    }
+}
+    

http://git-wip-us.apache.org/repos/asf/karaf/blob/64e046eb/jaas/command/src/main/resources/OSGI-INF/blueprint/jaas-command.xml
----------------------------------------------------------------------
diff --git a/jaas/command/src/main/resources/OSGI-INF/blueprint/jaas-command.xml b/jaas/command/src/main/resources/OSGI-INF/blueprint/jaas-command.xml
index 9767676..0c0cdd3 100644
--- a/jaas/command/src/main/resources/OSGI-INF/blueprint/jaas-command.xml
+++ b/jaas/command/src/main/resources/OSGI-INF/blueprint/jaas-command.xml
@@ -47,6 +47,11 @@
             </action>
         </command>
         <command>
+            <action class="org.apache.karaf.jaas.command.ListGroupsCommand">
+                <property name="backingEngineService" ref="engineService"/>
+            </action>
+        </command>
+        <command>
             <action class="org.apache.karaf.jaas.command.ListRealmsCommand">
                 <property name="realms" ref="realms"/>
             </action>
@@ -64,6 +69,9 @@
             <action class="org.apache.karaf.jaas.command.RoleDeleteCommand"/>
         </command>
         <command>
+            <action class="org.apache.karaf.jaas.command.GroupCreateCommand"/>
+        </command>
+        <command>
             <action class="org.apache.karaf.jaas.command.GroupAddCommand"/>
         </command>
         <command>

http://git-wip-us.apache.org/repos/asf/karaf/blob/64e046eb/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/BackingEngine.java
----------------------------------------------------------------------
diff --git a/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/BackingEngine.java b/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/BackingEngine.java
index 6f39801..01ab8b0 100644
--- a/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/BackingEngine.java
+++ b/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/BackingEngine.java
@@ -16,6 +16,7 @@ package org.apache.karaf.jaas.modules;
 
 import java.security.Principal;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.karaf.jaas.boot.principal.GroupPrincipal;
 import org.apache.karaf.jaas.boot.principal.RolePrincipal;
@@ -52,6 +53,12 @@ public interface BackingEngine {
      * @return
      */
     List<GroupPrincipal> listGroups(UserPrincipal user);
+    
+    /**
+     * List groups in a certain realm
+     * @return the groups in a certain realm
+     */
+    Map<GroupPrincipal, String> listGroups();
 
     /**
      * Add a user to a group.
@@ -60,6 +67,12 @@ public interface BackingEngine {
      * @param group
      */
     void addGroup(String username, String group);
+    
+    /**
+     * Create a group
+     * @param group
+     */
+    void createGroup(String group);
 
     /**
      * Remove a user from a group.

http://git-wip-us.apache.org/repos/asf/karaf/blob/64e046eb/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/jdbc/JDBCBackingEngine.java
----------------------------------------------------------------------
diff --git a/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/jdbc/JDBCBackingEngine.java b/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/jdbc/JDBCBackingEngine.java
index 9723de8..ee17664 100644
--- a/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/jdbc/JDBCBackingEngine.java
+++ b/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/jdbc/JDBCBackingEngine.java
@@ -32,6 +32,7 @@ import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 
 public class JDBCBackingEngine implements BackingEngine {
 
@@ -437,5 +438,15 @@ public class JDBCBackingEngine implements BackingEngine {
         // TODO support of groups has to be added
         throw new UnsupportedOperationException();
     }
+    
+    @Override
+    public Map<GroupPrincipal, String> listGroups() {
+        throw new UnsupportedOperationException();
+    }
 
+    @Override
+    public void createGroup(String group) {
+        throw new UnsupportedOperationException();
+        
+    }
 }

http://git-wip-us.apache.org/repos/asf/karaf/blob/64e046eb/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/properties/PropertiesBackingEngine.java
----------------------------------------------------------------------
diff --git a/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/properties/PropertiesBackingEngine.java b/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/properties/PropertiesBackingEngine.java
index bc568c1..2056871 100644
--- a/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/properties/PropertiesBackingEngine.java
+++ b/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/properties/PropertiesBackingEngine.java
@@ -15,6 +15,12 @@
  */
 package org.apache.karaf.jaas.modules.properties;
 
+import java.security.Principal;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 import org.apache.felix.utils.properties.Properties;
 import org.apache.karaf.jaas.boot.principal.GroupPrincipal;
 import org.apache.karaf.jaas.boot.principal.RolePrincipal;
@@ -24,9 +30,6 @@ import org.apache.karaf.jaas.modules.encryption.EncryptionSupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.security.Principal;
-import java.util.ArrayList;
-import java.util.List;
 
 public class PropertiesBackingEngine implements BackingEngine {
 
@@ -269,4 +272,23 @@ public class PropertiesBackingEngine implements BackingEngine {
         deleteRole(GROUP_PREFIX + group, role);
     }
 
+    public Map<GroupPrincipal, String> listGroups() {
+        Map<GroupPrincipal, String> result = new HashMap<GroupPrincipal, String>();
+        for (String name : users.keySet()) {
+            if (name.startsWith(GROUP_PREFIX)) {
+                result.put(new GroupPrincipal(name.substring(GROUP_PREFIX.length())), users.get(name));
+            }
+        }
+        return result;
+    }
+
+    public void createGroup(String group) {
+        String groupName = GROUP_PREFIX + group;
+        if (users.get(groupName) == null) {
+            addUserInternal(groupName, "group");
+        } else {
+            throw new IllegalArgumentException("Group: " + group + " already exist");
+        }
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/karaf/blob/64e046eb/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/publickey/PublickeyBackingEngine.java
----------------------------------------------------------------------
diff --git a/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/publickey/PublickeyBackingEngine.java b/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/publickey/PublickeyBackingEngine.java
index 2693ab0..e9a9181 100644
--- a/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/publickey/PublickeyBackingEngine.java
+++ b/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/publickey/PublickeyBackingEngine.java
@@ -17,7 +17,9 @@ package org.apache.karaf.jaas.modules.publickey;
 
 import java.security.Principal;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.felix.utils.properties.Properties;
 import org.apache.karaf.jaas.boot.principal.GroupPrincipal;
@@ -255,4 +257,27 @@ public class PublickeyBackingEngine implements BackingEngine {
         deleteRole(GROUP_PREFIX + group, role);
     }
 
+
+
+    public Map<GroupPrincipal, String> listGroups() {
+        Map<GroupPrincipal, String> result = new HashMap<GroupPrincipal, String>();
+        for (String name : users.keySet()) {
+            if (name.startsWith(GROUP_PREFIX)) {
+                result.put(new GroupPrincipal(name.substring(GROUP_PREFIX.length())), users.get(name));
+            }
+        }
+        return result;
+    }
+
+
+
+    public void createGroup(String group) {
+        String groupName = GROUP_PREFIX + group;
+        if (users.get(groupName) == null) {
+            addUserInternal(groupName, "group");
+        } else {
+            throw new IllegalArgumentException("Group: " + group + " already exist");
+        }
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/karaf/blob/64e046eb/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/syncope/SyncopeBackingEngine.java
----------------------------------------------------------------------
diff --git a/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/syncope/SyncopeBackingEngine.java b/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/syncope/SyncopeBackingEngine.java
index 6df409b..d1734c7 100644
--- a/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/syncope/SyncopeBackingEngine.java
+++ b/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/syncope/SyncopeBackingEngine.java
@@ -36,6 +36,7 @@ import javax.naming.OperationNotSupportedException;
 import java.security.Principal;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 public class SyncopeBackingEngine implements BackingEngine {
 
@@ -173,4 +174,12 @@ public class SyncopeBackingEngine implements BackingEngine {
         throw new RuntimeException("Group management is not supported by Syncope backend");
     }
 
+    public Map<GroupPrincipal, String> listGroups() {
+        throw new RuntimeException("Group management is not supported by Syncope backend");
+    }
+
+    public void createGroup(String group) {
+            throw new RuntimeException("Group management is not supported by Syncope backend");
+    }
+
 }