package org.maxkey.connector.activedirectory; import javax.naming.NamingEnumeration; import javax.naming.NamingException; import javax.naming.directory.Attributes; import javax.naming.directory.BasicAttribute; import javax.naming.directory.BasicAttributes; import javax.naming.directory.SearchControls; import javax.naming.directory.SearchResult; import org.maxkey.connector.OrganizationConnector; import org.maxkey.domain.Organizations; import org.maxkey.persistence.ldap.ActiveDirectoryUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; @Component(value = "organizationConnector") public class Organization2Activedirectory extends OrganizationConnector{ private final static Logger logger = LoggerFactory.getLogger(Organization2Activedirectory.class); ActiveDirectoryUtils ldapUtils; public Organization2Activedirectory() { // TODO Auto-generated constructor stub } @Override public boolean create(Organizations organization) throws Exception { try { SearchControls constraints = new SearchControls(); constraints.setSearchScope(ldapUtils.getSearchScope()); NamingEnumeration<SearchResult> results = ldapUtils.getConnection() .search(ldapUtils.getBaseDN(), "(&(objectClass=organizationalUnit)(description="+organization.getpId()+"))", constraints); String rdn=""; if (results == null || !results.hasMore()) { rdn=ldapUtils.getBaseDN(); }else{ SearchResult sr = (SearchResult) results.next(); rdn =sr.getNameInNamespace(); } Attributes attributes = new BasicAttributes(); attributes.put(new BasicAttribute("objectClass","organizationalUnit")); attributes.put(new BasicAttribute("ou",organization.getName())); //attributes.put(new BasicAttribute("name",organization.getName())); //attributes.put(new BasicAttribute("id",organization.getId())); //attributes.put(new BasicAttribute("porgname",organization.getpName())); //attributes.put(new BasicAttribute("porgid",organization.getpId())); attributes.put(new BasicAttribute("description",organization.getId())); String dn="ou="+organization.getName()+","+rdn; ldapUtils.getCtx().createSubcontext(dn, attributes); ldapUtils.close(); } catch (NamingException e) { e.printStackTrace(); } return super.create(organization); } @Override public boolean update(Organizations organization) throws Exception{ try { SearchControls constraints = new SearchControls(); constraints.setSearchScope(ldapUtils.getSearchScope()); NamingEnumeration<SearchResult> results = ldapUtils.getConnection() .search(ldapUtils.getBaseDN(), "(&(objectClass=organizationalUnit)(description="+organization.getId()+"))", constraints); String oldDn=""; String rdn=""; if (results == null || !results.hasMore()) { return create(organization); }else{ SearchResult sr = (SearchResult) results.next(); oldDn =sr.getNameInNamespace(); String[] dnSplit=oldDn.split(","); rdn=oldDn.substring(oldDn.indexOf(",")+1, oldDn.length()); String ouName=dnSplit[0].split("=")[1]; if(organization.getName()!=ouName){ String newDn="ou="+organization.getName()+","+rdn; logger.debug("oldDn : "+oldDn); logger.debug("newDn : "+newDn); ldapUtils.getCtx().rename(oldDn, newDn); //ModificationItem[] modificationItems = new ModificationItem[1]; //modificationItems[0]=new ModificationItem(DirContext.REMOVE_ATTRIBUTE,new BasicAttribute("ou",ouName)); //modificationItems[0]=new ModificationItem(DirContext.REPLACE_ATTRIBUTE,new BasicAttribute("name",organization.getName())); //ldapUtils.getCtx().modifyAttributes(newDn, modificationItems); } } ldapUtils.close(); } catch (NamingException e) { e.printStackTrace(); } return super.update(organization); } @Override public boolean delete(Organizations organization) throws Exception { try { SearchControls constraints = new SearchControls(); constraints.setSearchScope(ldapUtils.getSearchScope()); NamingEnumeration<SearchResult> results = ldapUtils.getConnection() .search(ldapUtils.getBaseDN(), "(&(objectClass=organizationalUnit)(description="+organization.getId()+"))", constraints); String dn=""; if (results == null || !results.hasMore()) { }else{ SearchResult sr = (SearchResult) results.next(); dn =sr.getNameInNamespace(); ldapUtils.getCtx().destroySubcontext(dn); } ldapUtils.close(); } catch (NamingException e) { e.printStackTrace(); } return super.delete(organization); } }