import javax.naming.ldap.Rdn;
import javax.transaction.xa.XAResource;
-import org.argeo.api.acr.ldap.LdapAttrs;
-import org.argeo.api.acr.ldap.LdapObjs;
-import org.argeo.api.cms.directory.Directory;
+import org.argeo.api.acr.ldap.LdapAttr;
+import org.argeo.api.acr.ldap.LdapObj;
+import org.argeo.api.cms.directory.CmsDirectory;
import org.argeo.api.cms.directory.HierarchyUnit;
import org.argeo.api.cms.transaction.WorkControl;
import org.argeo.api.cms.transaction.WorkingCopyXaResource;
import org.argeo.cms.osgi.useradmin.OsUserDirectory;
import org.argeo.cms.runtime.DirectoryConf;
-/** A {@link Directory} based either on LDAP or LDIF. */
-public abstract class AbstractLdapDirectory implements Directory, XAResourceProvider {
+/** A {@link CmsDirectory} based either on LDAP or LDIF. */
+public abstract class AbstractLdapDirectory implements CmsDirectory, XAResourceProvider {
protected static final String SHARED_STATE_USERNAME = "javax.security.auth.login.name";
protected static final String SHARED_STATE_PASSWORD = "javax.security.auth.login.password";
private final boolean scoped;
private List<String> credentialAttributeIds = Arrays
- .asList(new String[] { LdapAttrs.userPassword.name(), LdapAttrs.authPassword.name() });
+ .asList(new String[] { LdapAttr.userPassword.name(), LdapAttr.authPassword.name() });
private WorkControl transactionControl;
private WorkingCopyXaResource<LdapEntryWorkingCopy> xaResource;
protected void collectGroups(LdapEntry user, List<LdapEntry> allRoles) {
Attributes attrs = user.getAttributes();
// TODO centralize attribute name
- Attribute memberOf = attrs.get(LdapAttrs.memberOf.name());
+ Attribute memberOf = attrs.get(LdapAttr.memberOf.name());
// if user belongs to this directory, we only check memberOf
if (memberOf != null && user.getDn().startsWith(getBaseDn())) {
try {
return directoryDao.doGetDirectHierarchyUnits(baseDn, functionalOnly);
}
+ @Override
+ public HierarchyUnit getDirectChild(Type type) {
+ // TODO factorise with hierarchy unit?
+ return switch (type) {
+ case ROLES -> getDirectoryDao().doGetHierarchyUnit((LdapName) getBaseDn().add(getSystemRoleBaseRdn()));
+ case PEOPLE -> getDirectoryDao().doGetHierarchyUnit((LdapName) getBaseDn().add(getUserBaseRdn()));
+ case GROUPS -> getDirectoryDao().doGetHierarchyUnit((LdapName) getBaseDn().add(getGroupBaseRdn()));
+ case FUNCTIONAL -> throw new IllegalArgumentException("Type must be a technical type");
+ };
+ }
+
@Override
public String getHierarchyUnitName() {
return getName();
}
@Override
- public Directory getDirectory() {
+ public CmsDirectory getDirectory() {
return this;
}
|| wc.getNewData().containsKey(dn))
throw new IllegalArgumentException("Already a hierarchy unit " + path);
BasicAttributes attrs = new BasicAttributes(true);
- attrs.put(LdapAttrs.objectClass.name(), LdapObjs.organizationalUnit.name());
+ attrs.put(LdapAttr.objectClass.name(), LdapObj.organizationalUnit.name());
Rdn nameRdn = dn.getRdn(dn.size() - 1);
// TODO deal with multiple attr RDN
attrs.put(nameRdn.getType(), nameRdn.getValue());
for (int i = 0; i < segments.length; i++) {
String segment = segments[i];
// TODO make attr names configurable ?
- String attr = getDirectory().getRealm().isPresent()/* IPA */ ? LdapAttrs.cn.name()
- : LdapAttrs.ou.name();
+ String attr = getDirectory().getRealm().isPresent()/* IPA */ ? LdapAttr.cn.name() : LdapAttr.ou.name();
if (parentRdn != null) {
if (getUserBaseRdn().equals(parentRdn))
- attr = LdapAttrs.uid.name();
+ attr = LdapAttr.uid.name();
else if (getGroupBaseRdn().equals(parentRdn))
- attr = LdapAttrs.cn.name();
+ attr = LdapAttr.cn.name();
else if (getSystemRoleBaseRdn().equals(parentRdn))
- attr = LdapAttrs.cn.name();
+ attr = LdapAttr.cn.name();
}
Rdn rdn = new Rdn(attr, segment);
name.add(rdn);
return !name.startsWith(baseDn);
}
- protected static boolean hasObjectClass(Attributes attrs, LdapObjs objectClass) {
+ protected static boolean hasObjectClass(Attributes attrs, LdapObj objectClass) {
return hasObjectClass(attrs, objectClass.name());
}
protected static boolean hasObjectClass(Attributes attrs, String objectClass) {
try {
- Attribute attr = attrs.get(LdapAttrs.objectClass.name());
+ Attribute attr = attrs.get(LdapAttr.objectClass.name());
NamingEnumeration<?> en = attr.getAll();
while (en.hasMore()) {
String v = en.next().toString();