]> git.argeo.org Git - lgpl/argeo-commons.git/blob - NodeUserAdmin.java
da67c733d0f1c3f0ce5249016b19aa426b7dbee0
[lgpl/argeo-commons.git] / NodeUserAdmin.java
1 package org.argeo.cms.internal.osgi;
2
3 import java.util.Dictionary;
4 import java.util.HashMap;
5 import java.util.Hashtable;
6 import java.util.Map;
7
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.osgi.useradmin.UserDirectory;
12 import org.argeo.util.directory.DirectoryConf;
13 import org.osgi.framework.Constants;
14 import org.osgi.service.cm.ConfigurationException;
15 import org.osgi.service.cm.ManagedServiceFactory;
16 import org.osgi.service.useradmin.UserAdmin;
17
18 /**
19 * Aggregates multiple {@link UserDirectory} and integrates them with system
20 * roles.
21 */
22 @Deprecated
23 public class NodeUserAdmin extends CmsUserAdmin implements ManagedServiceFactory {
24 private final static CmsLog log = CmsLog.getLog(NodeUserAdmin.class);
25
26 // OSGi
27 private Map<String, String> pidToBaseDn = new HashMap<>();
28
29 @Override
30 public void updated(String pid, Dictionary<String, ?> properties) throws ConfigurationException {
31
32 String basePath = (String) properties.get(DirectoryConf.baseDn.name());
33
34 // FIXME make updates more robust
35 if (pidToBaseDn.containsValue(basePath)) {
36 if (log.isDebugEnabled())
37 log.debug("Ignoring user directory update of " + basePath);
38 return;
39 }
40
41 UserDirectory userDirectory = enableUserDirectory(properties);
42 // OSGi
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);
48
49 CmsActivator.getBundleContext().registerService(UserDirectory.class, userDirectory, regProps);
50 pidToBaseDn.put(pid, basePath);
51
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);
58 }
59 }
60
61 @Override
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);
68 }
69
70 @Override
71 public String getName() {
72 return "Node User Admin";
73 }
74
75 }