]>
git.argeo.org Git - lgpl/argeo-commons.git/blob - kernel/NodeUserAdmin.java
1 package org
.argeo
.cms
.internal
.kernel
;
3 import java
.util
.ArrayList
;
4 import java
.util
.Arrays
;
5 import java
.util
.HashMap
;
6 import java
.util
.HashSet
;
11 import javax
.naming
.InvalidNameException
;
12 import javax
.naming
.ldap
.LdapName
;
14 import org
.argeo
.cms
.KernelHeader
;
15 import org
.argeo
.osgi
.useradmin
.ArgeoUserAdminException
;
16 import org
.argeo
.osgi
.useradmin
.UserAdminAggregator
;
17 import org
.osgi
.framework
.InvalidSyntaxException
;
18 import org
.osgi
.service
.useradmin
.Authorization
;
19 import org
.osgi
.service
.useradmin
.Role
;
20 import org
.osgi
.service
.useradmin
.User
;
21 import org
.osgi
.service
.useradmin
.UserAdmin
;
23 public class NodeUserAdmin
implements UserAdmin
, UserAdminAggregator
{
24 final static LdapName ROLES_BASE
;
27 ROLES_BASE
= new LdapName(KernelHeader
.ROLES_BASEDN
);
28 } catch (InvalidNameException e
) {
29 throw new ArgeoUserAdminException("Cannot initialize "
30 + NodeUserAdmin
.class, e
);
34 private UserAdmin nodeRoles
= null;
35 private Map
<LdapName
, UserAdmin
> userAdmins
= new HashMap
<LdapName
, UserAdmin
>();
38 public Role
createRole(String name
, int type
) {
39 return findUserAdmin(name
).createRole(name
, type
);
43 public boolean removeRole(String name
) {
44 return findUserAdmin(name
).removeRole(name
);
48 public Role
getRole(String name
) {
49 return findUserAdmin(name
).getRole(name
);
53 public Role
[] getRoles(String filter
) throws InvalidSyntaxException
{
54 List
<Role
> res
= new ArrayList
<Role
>();
55 for (UserAdmin userAdmin
: userAdmins
.values()) {
56 res
.addAll(Arrays
.asList(userAdmin
.getRoles(filter
)));
58 res
.addAll(Arrays
.asList(nodeRoles
.getRoles(filter
)));
59 return res
.toArray(new Role
[res
.size()]);
63 public User
getUser(String key
, String value
) {
64 List
<User
> res
= new ArrayList
<User
>();
65 for (UserAdmin userAdmin
: userAdmins
.values()) {
66 User u
= userAdmin
.getUser(key
, value
);
70 // Note: node roles cannot contain users, so it is not searched
71 return res
.size() == 1 ? res
.get(0) : null;
75 public Authorization
getAuthorization(User user
) {
76 UserAdmin userAdmin
= findUserAdmin(user
.getName());
77 // FIXME clarify assumptions
78 return userAdmin
.getAuthorization(user
);
79 // String[] roles = auth.getRoles();
80 // // Gather system roles
81 // Set<String> systemRoles = new HashSet<String>();
82 // for(String businessRole:roles){
89 // USER ADMIN AGGREGATOR
92 public synchronized void addUserAdmin(String baseDn
, UserAdmin userAdmin
) {
93 if (baseDn
.equals(KernelHeader
.ROLES_BASEDN
)) {
94 nodeRoles
= userAdmin
;
98 if (userAdmins
.containsKey(baseDn
))
99 throw new ArgeoUserAdminException(
100 "There is already a user admin for " + baseDn
);
102 userAdmins
.put(new LdapName(baseDn
), userAdmin
);
103 } catch (InvalidNameException e
) {
104 throw new ArgeoUserAdminException("Badly formatted base DN "
110 public synchronized void removeUserAdmin(String baseDn
) {
111 if (baseDn
.equals(KernelHeader
.ROLES_BASEDN
))
112 throw new ArgeoUserAdminException("Node roles cannot be removed.");
115 base
= new LdapName(baseDn
);
116 } catch (InvalidNameException e
) {
117 throw new ArgeoUserAdminException("Badly formatted base DN "
120 if (!userAdmins
.containsKey(base
))
121 throw new ArgeoUserAdminException("There is no user admin for "
123 userAdmins
.remove(base
);
126 private UserAdmin
findUserAdmin(String name
) {
128 return findUserAdmin(new LdapName(name
));
129 } catch (InvalidNameException e
) {
130 throw new ArgeoUserAdminException("Badly formatted name " + name
, e
);
134 private UserAdmin
findUserAdmin(LdapName name
) {
135 if (name
.startsWith(ROLES_BASE
))
137 List
<UserAdmin
> res
= new ArrayList
<UserAdmin
>(1);
138 for (LdapName baseDn
: userAdmins
.keySet()) {
139 if (name
.startsWith(baseDn
))
140 res
.add(userAdmins
.get(baseDn
));
143 throw new ArgeoUserAdminException("Cannot find user admin for "
146 throw new ArgeoUserAdminException("Multiple user admin found for "