private ThreadLocal<WorkingCopy> workingCopy = new ThreadLocal<AbstractUserDirectory.WorkingCopy>();
private Xid editingTransactionXid = null;
- public AbstractUserDirectory(Dictionary<String, ?> properties) {
+ AbstractUserDirectory(Dictionary<String, ?> properties) {
// TODO make a copy?
this.properties = properties;
import org.osgi.service.useradmin.Group;
+/** A group in a user directroy. */
interface DirectoryGroup extends Group, DirectoryUser {
List<LdapName> getMemberNames();
}
import org.osgi.service.useradmin.User;
+/** A user in a user directory. */
interface DirectoryUser extends User {
LdapName getDn();
import javax.naming.directory.SearchResult;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapName;
+import javax.transaction.TransactionManager;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.osgi.framework.Filter;
import org.osgi.service.useradmin.User;
+/**
+ * A user admin based on a LDAP server. Requires a {@link TransactionManager}
+ * and an open transaction for write access.
+ */
public class LdapUserAdmin extends AbstractUserDirectory {
private final static Log log = LogFactory.getLog(LdapUserAdmin.class);
import org.osgi.service.useradmin.Role;
import org.osgi.service.useradmin.User;
+/** Basic authorization. */
class LdifAuthorization implements Authorization {
private final String name;
private final String displayName;
import org.osgi.service.useradmin.Role;
+/** Directory group implementation */
class LdifGroup extends LdifUser implements DirectoryGroup {
private final String memberAttributeId;
- public LdifGroup(AbstractUserDirectory userAdmin, LdapName dn,
+ LdifGroup(AbstractUserDirectory userAdmin, LdapName dn,
Attributes attributes) {
super(userAdmin, dn, attributes);
memberAttributeId = userAdmin.getMemberAttributeId();
public final static String PREFIX = "ldap:";
+ /** For use as XML name. */
public String property() {
return PREFIX + name();
}
import org.apache.commons.codec.digest.DigestUtils;
import org.argeo.osgi.useradmin.AbstractUserDirectory.WorkingCopy;
+/** Directory user implementation */
class LdifUser implements DirectoryUser {
private final AbstractUserDirectory userAdmin;
import javax.naming.NamingEnumeration;
import javax.naming.directory.Attributes;
import javax.naming.ldap.LdapName;
+import javax.transaction.TransactionManager;
import org.apache.commons.io.IOUtils;
import org.osgi.framework.Filter;
import org.osgi.service.useradmin.Role;
import org.osgi.service.useradmin.User;
-/** User admin implementation using LDIF file(s) as backend. */
+/**
+ * A user admin based on a LDIF files. Requires a {@link TransactionManager} and
+ * an open transaction for write access.
+ */
public class LdifUserAdmin extends AbstractUserDirectory {
- SortedMap<LdapName, DirectoryUser> users = new TreeMap<LdapName, DirectoryUser>();
- SortedMap<LdapName, DirectoryGroup> groups = new TreeMap<LdapName, DirectoryGroup>();
+ private SortedMap<LdapName, DirectoryUser> users = new TreeMap<LdapName, DirectoryUser>();
+ private SortedMap<LdapName, DirectoryGroup> groups = new TreeMap<LdapName, DirectoryGroup>();
private Map<String, Map<String, DirectoryUser>> userIndexes = new LinkedHashMap<String, Map<String, DirectoryUser>>();
class LdifWriter {
private final Writer writer;
- public LdifWriter(OutputStream out) {
+ LdifWriter(OutputStream out) {
this.writer = new OutputStreamWriter(out);
}
import javax.naming.Context;
+/** Properties used to configure user admins. */
public enum UserAdminConf {
/** Base DN */
baseDn("dc=example,dc=com"),
return def;
}
+ /** For use as Java property. */
public String property() {
return getPrefix() + name();
}