1 package org
.argeo
.cms
.internal
.osgi
;
3 import java
.util
.Dictionary
;
4 import java
.util
.HashMap
;
5 import java
.util
.Hashtable
;
8 import org
.argeo
.api
.cms
.CmsConstants
;
9 import org
.argeo
.api
.cms
.CmsLog
;
10 import org
.argeo
.cms
.internal
.runtime
.CmsUserAdmin
;
11 import org
.argeo
.cms
.internal
.runtime
.KernelConstants
;
12 import org
.argeo
.osgi
.useradmin
.UserDirectory
;
13 import org
.argeo
.util
.directory
.DirectoryConf
;
14 import org
.osgi
.framework
.Constants
;
15 import org
.osgi
.service
.cm
.ConfigurationException
;
16 import org
.osgi
.service
.cm
.ManagedServiceFactory
;
17 import org
.osgi
.service
.useradmin
.UserAdmin
;
20 * Aggregates multiple {@link UserDirectory} and integrates them with system
23 public class NodeUserAdmin
extends CmsUserAdmin
implements ManagedServiceFactory
, KernelConstants
{
24 private final static CmsLog log
= CmsLog
.getLog(NodeUserAdmin
.class);
27 private Map
<String
, String
> pidToBaseDn
= new HashMap
<>();
30 public void updated(String pid
, Dictionary
<String
, ?
> properties
) throws ConfigurationException
{
32 String basePath
= (String
) properties
.get(DirectoryConf
.baseDn
.name());
34 // FIXME make updates more robust
35 if (pidToBaseDn
.containsValue(basePath
)) {
36 if (log
.isDebugEnabled())
37 log
.debug("Ignoring user directory update of " + basePath
);
41 UserDirectory userDirectory
= enableUserDirectory(properties
);
43 Hashtable
<String
, Object
> regProps
= new Hashtable
<>();
44 regProps
.put(Constants
.SERVICE_PID
, pid
);
45 if (isSystemRolesBaseDn(basePath
))
46 regProps
.put(Constants
.SERVICE_RANKING
, Integer
.MAX_VALUE
);
47 regProps
.put(DirectoryConf
.baseDn
.name(), basePath
);
49 CmsActivator
.getBundleContext().registerService(UserDirectory
.class, userDirectory
, regProps
);
50 pidToBaseDn
.put(pid
, basePath
);
52 if (isSystemRolesBaseDn(basePath
)) {
53 // publishes itself as user admin only when system roles are available
54 Dictionary
<String
, Object
> userAdminregProps
= new Hashtable
<>();
55 userAdminregProps
.put(CmsConstants
.CN
, CmsConstants
.DEFAULT
);
56 userAdminregProps
.put(Constants
.SERVICE_RANKING
, Integer
.MAX_VALUE
);
57 CmsActivator
.getBundleContext().registerService(UserAdmin
.class, this, userAdminregProps
);
62 public void deleted(String pid
) {
63 // assert pidToServiceRegs.get(pid) != null;
64 assert pidToBaseDn
.get(pid
) != null;
65 // pidToServiceRegs.remove(pid).unregister();
66 String basePath
= pidToBaseDn
.remove(pid
);
67 removeUserDirectory(basePath
);
71 public String
getName() {
72 return "Node User Admin";