package pl.net.bluesoft.rnd.pt.ext.userdata.widget; import com.novell.ldap.*; import pl.net.bluesoft.rnd.processtool.ui.widgets.annotations.AliasName; import pl.net.bluesoft.rnd.processtool.ui.widgets.annotations.AperteDoc; import pl.net.bluesoft.rnd.processtool.ui.widgets.annotations.AutoWiredProperty; import pl.net.bluesoft.rnd.processtool.ui.widgets.annotations.WidgetGroup; import java.util.Collection; import java.util.HashSet; /** * @author tlipski@bluesoft.net.pl */ @AliasName(name="LdapUserData") @WidgetGroup("userdata-widget") public class LdapUserDataWidget extends UserDataWidget { @AutoWiredProperty(required = true) @AperteDoc( humanNameKey = "userdata.widget.ldap.ip", descriptionKey = "userdata.widget.ldap.ip.description" ) public String ip; @AutoWiredProperty @AperteDoc( humanNameKey = "userdata.widget.ldap.port", descriptionKey = "userdata.widget.ldap.port.description" ) public Integer port = 389; @AutoWiredProperty(required = true) @AperteDoc( humanNameKey = "userdata.widget.ldap.loginDN", descriptionKey = "userdata.widget.ldap.loginDN.description" ) public String loginDN; @AutoWiredProperty(required = true) @AperteDoc( humanNameKey = "userdata.widget.ldap.password", descriptionKey = "userdata.widget.ldap.password.description" ) public String password; @AutoWiredProperty @AperteDoc( humanNameKey = "userdata.widget.ldap.searchBase", descriptionKey = "userdata.widget.ldap.searchBase.description" ) public String searchBase = ""; @AutoWiredProperty @AperteDoc( humanNameKey = "userdata.widget.ldap.searchFilter", descriptionKey = "userdata.widget.ldap.searchFilter.description" ) public String searchFilter = "(objectClass=inetOrgPerson)"; @AutoWiredProperty @AperteDoc( humanNameKey = "userdata.widget.ldap.loginAttr", descriptionKey = "userdata.widget.ldap.loginAttr.description" ) public String loginAttr = "uid"; @AutoWiredProperty @AperteDoc( humanNameKey = "userdata.widget.ldap.descriptionAttr", descriptionKey = "userdata.widget.ldap.descriptionAttr.description" ) public String descriptionAttr = "cn"; private LDAPConnection getLdapConnection() { try { LDAPConnection lc = new LDAPConnection(); lc.connect(ip, port); lc.bind(LDAPConnection.LDAP_V3, loginDN, password.getBytes("UTF8")); return lc; } catch (Exception e) { throw new RuntimeException(e); } } @Override protected Collection<UserData> getUsers() { Collection<UserData> users = new HashSet(); LDAPConnection ldapConnection = getLdapConnection(); try { try { LDAPSearchResults results = ldapConnection.search(searchBase, LDAPConnection.SCOPE_SUB, searchFilter, null, false); while (results.hasMore()) { LDAPEntry ldapEntry = results.next(); LDAPAttributeSet attrs = ldapEntry.getAttributeSet(); UserData ud = new UserData(); if (attrs.getAttribute(loginAttr) == null) continue; String login = attrs.getAttribute(loginAttr).getStringValue(); ud.setLogin(ldapEntry.getDN() + ", " + loginAttr + "=" + login); if (attrs.getAttribute(descriptionAttr) == null) { ud.setDescription(ud.getLogin()); } else { ud.setDescription(attrs.getAttribute(descriptionAttr).getStringValue()); } ud.setBpmLogin(login); users.add(ud); } } finally { ldapConnection.disconnect(); } } catch (LDAPException e) { throw new RuntimeException(e); } return users; } public String getIp() { return ip; } public void setIp(String ip) { this.ip = ip; } public int getPort() { return port; } public void setPort(int port) { this.port = port; } public String getLoginDN() { return loginDN; } public void setLoginDN(String loginDN) { this.loginDN = loginDN; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getSearchBase() { return searchBase; } public void setSearchBase(String searchBase) { this.searchBase = searchBase; } public String getSearchFilter() { return searchFilter; } public void setSearchFilter(String searchFilter) { this.searchFilter = searchFilter; } public String getLoginAttr() { return loginAttr; } public void setLoginAttr(String loginAttr) { this.loginAttr = loginAttr; } public String getDescriptionAttr() { return descriptionAttr; } public void setDescriptionAttr(String descriptionAttr) { this.descriptionAttr = descriptionAttr; } }