X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.security.core%2Fsrc%2Forg%2Fargeo%2Fosgi%2Fuseradmin%2Finternal%2FUserDirectoryFactory.java;fp=org.argeo.security.core%2Fsrc%2Forg%2Fargeo%2Fosgi%2Fuseradmin%2Finternal%2FUserDirectoryFactory.java;h=2182028d99a09d275434b039b8999d24656d7d02;hb=3400a80f88b418c598bf30f27b13ce1360902376;hp=0000000000000000000000000000000000000000;hpb=ee5aea67d92a71fc4cbb0ed1c11fe5f2c0280196;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.security.core/src/org/argeo/osgi/useradmin/internal/UserDirectoryFactory.java b/org.argeo.security.core/src/org/argeo/osgi/useradmin/internal/UserDirectoryFactory.java new file mode 100644 index 000000000..2182028d9 --- /dev/null +++ b/org.argeo.security.core/src/org/argeo/osgi/useradmin/internal/UserDirectoryFactory.java @@ -0,0 +1,45 @@ +package org.argeo.osgi.useradmin.internal; + +import java.util.Dictionary; +import java.util.HashMap; +import java.util.Hashtable; +import java.util.Map; + +import org.argeo.osgi.useradmin.LdapUserAdmin; +import org.argeo.osgi.useradmin.LdifUserAdmin; +import org.argeo.osgi.useradmin.UserAdminConf; +import org.argeo.osgi.useradmin.UserDirectory; +import org.osgi.framework.BundleContext; +import org.osgi.framework.Constants; +import org.osgi.framework.FrameworkUtil; +import org.osgi.service.cm.ConfigurationException; +import org.osgi.service.cm.ManagedServiceFactory; + +public class UserDirectoryFactory implements ManagedServiceFactory { + private final BundleContext bc = FrameworkUtil.getBundle(UserDirectoryFactory.class).getBundleContext(); + + private Map userDirectories = new HashMap<>(); + + @Override + public String getName() { + return "User Directories Factory"; + } + + @Override + public void updated(String pid, Dictionary properties) throws ConfigurationException { + String uri = (String) properties.get(UserAdminConf.uri.name()); + UserDirectory userDirectory = uri.startsWith("ldap:") ? new LdapUserAdmin(properties) + : new LdifUserAdmin(properties); + Dictionary regProps = new Hashtable<>(); + regProps.put(Constants.SERVICE_PID, pid); + regProps.put(UserAdminConf.uri.name(), uri); + bc.registerService(UserDirectory.class, userDirectory, regProps); + userDirectories.put(pid, userDirectory); + } + + @Override + public void deleted(String pid) { + userDirectories.remove(pid); + } + +}