package models;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import javax.naming.NamingEnumeration;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import play.Play;
public class LdapGroup {
private ArrayList<String> members;
private String groupName;
private String owner;
public LdapGroup(String groupName,ArrayList<String> members,String owner){
this.groupName=groupName;
this.members=members;
this.owner=owner;
}
public static LdapGroup retrieve(String groupName){
Ldap adminConnection = new Ldap();
adminConnection.SetEnv(Play.configuration.getProperty("ldap.host"),Play.configuration.getProperty("ldap.admin.dn"), Play.configuration.getProperty("ldap.admin.password"));
LdapGroup newGroup;
ArrayList<String> members= new ArrayList<String>();
String owner="";
Attributes atts=adminConnection.getGroupInfo(adminConnection.getLdapEnv(), groupName);
if(atts==null){
return null;
}
try {
for (NamingEnumeration e = atts.getAll(); e.hasMore();){
Attribute a = (Attribute) e.next();
String attributeName = a.getID();
String attributeValue = "";
Enumeration values = a.getAll();
while (values.hasMoreElements()) {
attributeValue = values.nextElement().toString();
System.out.println(attributeName+" value --> " + attributeValue.toString());
}
if(attributeName.equals("owner")){
owner = attributeValue;
}
else if(attributeName.equals("member")){
members.add(attributeValue);
}
}
newGroup = new LdapGroup(groupName,members,owner);
return newGroup;
}catch (javax.naming.NamingException e) {
System.out.println(e.getMessage());
}
return null;
}
public static int createGroup(String groupName, ArrayList members, LdapUser owner) {
Ldap adminConnection = new Ldap();
adminConnection.SetEnv(Play.configuration.getProperty("ldap.host"),Play.configuration.getProperty("ldap.admin.dn"), Play.configuration.getProperty("ldap.admin.password"));
if(adminConnection.getGroupInfo(adminConnection.getLdapEnv(),groupName)!=null){
return 1 ;
}
else{
adminConnection.addGroup(adminConnection.getLdapEnv(), groupName, members, owner.getLogin());
return 0;
}
}
public void addSpecificMember(String newMemberLogin) {
Ldap adminConnection = new Ldap();
adminConnection.SetEnv(Play.configuration.getProperty("ldap.host"),Play.configuration.getProperty("ldap.admin.dn"), Play.configuration.getProperty("ldap.admin.password"));
adminConnection.addSpecificMember(adminConnection.getLdapEnv(), this.groupName, this.members, newMemberLogin);
}
public void removeSpecificMember(String memberLogin) {
Ldap adminConnection = new Ldap();
adminConnection.SetEnv(Play.configuration.getProperty("ldap.host"),Play.configuration.getProperty("ldap.admin.dn"), Play.configuration.getProperty("ldap.admin.password"));
adminConnection.removeSpecificMember(adminConnection.getLdapEnv(), this.groupName, this.members, memberLogin);
}
public void displayGroupMembers() {
System.out.println();
System.out.println("----- Members of the group "+ this.groupName +" -----");
System.out.println("------------------------------------------------------------------ ");
for(int i = 0; i < this.members.size(); i++)
{
System.out.println("Member number " + (i+1) + " : " + this.members.get(i));
System.out.println("------------------------------------------------------------------ ");
}
}
public void deleteGroup(){
Ldap adminConnection = new Ldap();
adminConnection.SetEnv(Play.configuration.getProperty("ldap.host"),Play.configuration.getProperty("ldap.admin.dn"), Play.configuration.getProperty("ldap.admin.password"));
adminConnection.deleteGroup(adminConnection.getLdapEnv(), "cn="+groupName+","+Play.configuration.getProperty("ldap.dn"));
}
}