package com.constellio.model.conf.ldap.user;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.apache.commons.lang.StringUtils;
public class LDAPGroup {
//TODO hierarchie de groupes (plus cn mais plutot distinguishedName)
public static final String COMMON_NAME = "cn";
public static final String DISTINGUISHED_NAME = "distinguishedName";
//FIXME Important member ne suffit pas lorsque le groupe est le primaryGroupID de l'utilisateur car ni le groupe n apparaitra dans l utilisateur ni l inverse :
//Users don't have a memberOf property for their primary group, and the primary group won't have a member property listing them.
//requete ldap (&(objectCategory=person)(objectClass=user)(primaryGroupID=XXXX))
public static final String MEMBER = "member";
public static final String MEMBER_OF = "memberof";
public static final String[] FETCHED_ATTRIBUTES = { DISTINGUISHED_NAME, COMMON_NAME, MEMBER, MEMBER_OF };
private String distinguishedName;
private String simpleName;
private List<String> ldapUsers = new ArrayList<>();
private boolean enabled = true;
public LDAPGroup(String simpleName, String distinguishedName) {
super();
this.simpleName = extractSimpleName(simpleName);
this.distinguishedName = distinguishedName;
}
public LDAPGroup(String distinguishedName) {
super();
this.simpleName = extractSimpleName(distinguishedName);
this.distinguishedName = distinguishedName;
}
private String extractSimpleName(String simpleNameOrDN) {
//CN=Denied RODC Password Replication Group,CN=Users,DC=test,DC=doculibre,DC=ca
if (simpleNameOrDN.contains("=")) {
return StringUtils.substringBetween(simpleNameOrDN, "=", ",");
} else {
return simpleNameOrDN;
}
}
public String getDistinguishedName() {
return distinguishedName;
}
public String getSimpleName() {
return simpleName;
}
public void addUser(String userId) {
if (!this.ldapUsers.contains(userId)) {
this.ldapUsers.add(userId);
}
}
public List<String> getMembers() {
return Collections.unmodifiableList(this.ldapUsers);
}
@Override
public String toString() {
return "\t" + distinguishedName + "\n\tUsers :\n\t" + StringUtils.join(ldapUsers.toArray(), "\n\t");
}
@Override
public boolean equals(Object o) {
if (this == o)
return true;
if (o == null || getClass() != o.getClass())
return false;
LDAPGroup ldapGroup = (LDAPGroup) o;
if (distinguishedName != null ?
!distinguishedName.equals(ldapGroup.distinguishedName) :
ldapGroup.distinguishedName != null)
return false;
return true;
}
@Override
public int hashCode() {
return distinguishedName != null ? distinguishedName.hashCode() : 0;
}
}