package models;
import java.util.*;
import javax.persistence.*;
import play.*;
import play.db.jpa.*;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import javax.naming.NamingEnumeration;
import controllers.*;
public class LdapUser {
public String email;
public String password;
public String login;
public String firstname;
public String lastname;
Ldap userConnection;
public LdapUser(String email, String password, String firstname, String lastname, String login) {
this.email = email;
this.password = password;
this.firstname=firstname;
this.lastname=lastname;
this.login = login;
userConnection = new Ldap();
userConnection.SetEnv(Play.configuration.getProperty("ldap.host"), "cn=" + login + "," + Play.configuration.getProperty("ldap.dn"), password);
}
public static LdapUser connect(String login, String password) {
//return find("byLoginAndPassword", login, password).first();
Ldap staticConnection = new Ldap();
staticConnection.SetEnv(Play.configuration.getProperty("ldap.host"),"cn="+login+","+Play.configuration.getProperty("ldap.dn"), password);
//staticConnection.SetEnv("test.hypertopic.org:389", "cn=" + login + ",dc=hypertopic,dc=org", password);
LdapUser newUser;
String email="";
String firstname="";
String lastname="";
Attributes atts=staticConnection.getUserInfo(staticConnection.getLdapEnv(), login);
if(atts==null)
{
return null;
}
try {
for (NamingEnumeration e = atts.getAll(); e.hasMore();)
{
Attribute a = (Attribute) e.next();
//System.out.println(a.getID() + ":");
String attributeName = a.getID();
String attributeValue = "";
Enumeration values = a.getAll();
while (values.hasMoreElements()) {
//System.out.println("valeur : " + values.nextElement().toString());
attributeValue = values.nextElement().toString();
System.out.println("value " + attributeValue.toString());
}
if(attributeName.equals("mail"))
{
email = attributeValue;
}
else if(attributeName.equals("givenName"))
{
firstname=attributeValue;
}
else if(attributeName.equals("sn"))
{
lastname = attributeValue;
}
}
newUser = new LdapUser(email, password, firstname, lastname, login);
return newUser;
} catch (javax.naming.NamingException e) {
System.out.println(e.getMessage());
}
return null;
}
public int addUser() {
// this.save();
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.getUserInfo(adminConnection.getLdapEnv(),login)!=null){return 1 ;}
else{adminConnection.addUser(adminConnection.getLdapEnv(), email, firstname, lastname, login, password);return 0;}
}
public void updateUser(String email, String password, String firstname, String lastname){
this.email = email;
this.password = password;
//this.refresh();
Ldap adminConnection = new Ldap();
adminConnection.SetEnv(Play.configuration.getProperty("ldap.host"),Play.configuration.getProperty("ldap.admin.dn"), Play.configuration.getProperty("ldap.admin.password"));
adminConnection.modifyAttribute(adminConnection.getLdapEnv(), this.getLogin(), "givenName", firstname);
adminConnection.modifyAttribute(adminConnection.getLdapEnv(), this.getLogin(), "sn", lastname);
adminConnection.modifyAttribute(adminConnection.getLdapEnv(), this.getLogin(), "mail", email);
adminConnection.modifyAttribute(adminConnection.getLdapEnv(), this.getLogin(), "userPassword", password);
}
public void deleteUser (){
// this.delete();
Ldap adminConnection = new Ldap();
adminConnection.SetEnv(Play.configuration.getProperty("ldap.host"),Play.configuration.getProperty("ldap.admin.dn"), Play.configuration.getProperty("ldap.admin.password"));
adminConnection.deleteUser(adminConnection.getLdapEnv(), "cn="+login+","+Play.configuration.getProperty("ldap.dn"));
}
public String getEmail(){return email;}
public String getLogin(){return login;}
public String getFirstname(){return firstname;}
public String getLastname(){return lastname;}
}