/
Using LDAP in Script Field Processor

Using LDAP in Script Field Processor

Since JEMH 3.3.46

Its now possible to query LDAP from within the Script Field Processor (as well as in the Custom Field Default) through the jemhUtils helper class:

How it works

In order to use LDAP you will need to have LDAP setup /selected within the profile, meaning alternateID → ldap, create from → ldap, even if ‘user creation’ is not enabled (UI limitation) talk to us if you need something else!

By default, just calling jemhUtils.getLdap() will provide an LDAP helper class initialized with the first selected ldap config in the profile, if there are more than one configs selected, a report message will be added in the LDAP section to point this out.

Available LDAP helper methods

public IJEMHUser getUserDetails(String ldapUsername) public IJEMHUser getUserDetailsByEmailAddress(String emailAddress) public List<IJEMHUser> searchWildcarded(String partialLdapFilter) public Map<String, List<Object>> getAllUserAttributes(String fullLdapFilter); public Map<String, List<Object>> getLimitedUserAttributes(String fullLdapFilter, String[] requiredReturnAtts); public Map<String, Map<String, List<Object>>> search(String fullLdapFilter, String[] requiredReturnAtts, int maxResults);

Spec of LDAPUser

public String getUserId(); public void setUserId(String userId); public String getFullName(); public String getEmail(); public void setEmail(String email); public String getFirstName(); public void setFirstName(String firstName); public String getLastName(); public void setLastName(String lastName); public JemhUserNameFormat getFullNameFormat(); public void setFullNameFormat(JemhUserNameFormat fullNameFormat); public String[] getProxyAddresses(); public void setProxyAddresses(String[] proxyAddresses); public void setDisplayName(String value); public String getDisplayName(); public boolean isUserEnabled(); public void setUserEnabled(boolean isEnabled); public ApplicationUser getJiraUser(); void setObjectClasses(String[] split); public String[] getObjectClasses(); public void setPreferredUserDirectoryForCreate(Long preferredUserDirectoryForCreate); public Long getPreferredUserDirectoryForCreate();

Example

var ldap=jemhUtils.getLdap(); print('ldap = '+ldap.getClass().getName()); var username='andy'; var ldapUser = ldap.getUserDetails(username); if (ldapUser != "null") { print('user record for andy: '+ldapUser.getEmail()); } else { print('no user found: '+username); }

Screenshot

Here we show the above script, along with a related Test Case being dynamically evaluated:

Full access to multiple-result attributes

Example Script

var ldap=jemhUtils.getLdap(); print('ldap = '+ldap.getClass().getName()); var username='andy'; var ldapUser = ldap.getUserDetails(username); if (ldapUser != "null") { print('user record for andy: '+ldapUser.getEmail()); } else { print('no user found: '+username); } var atts = ['samAccountName','sn','mail','objectClass', 'memberOf']; var matches = ldap.search('(sn=brook)', atts, 5); var keySet = matches.keySet(); var keySetIter = keySet.iterator(); while (keySetIter.hasNext()) { var key=keySetIter.next(); print('[record: '+key+']'); var hashMap=matches.get(key); var hashMapKeys = hashMap.keySet(); var hashMapKeysIter = hashMapKeys.iterator(); while (hashMapKeysIter.hasNext()) { var _key=hashMapKeysIter.next(); //print('got attrib key: '+_key); var arrayListVal=hashMap.get(_key); //print('got attrib key['+_key+'] value class: '+arrayListVal.getClass().getName()); var attribValueIterator=arrayListVal.iterator(); var idx=0; while(attribValueIterator.hasNext()) { var attribVal=attribValueIterator.next(); print('\t'+_key+"["+(idx++)+"] = "+attribVal); } } }

Console output

ldap = com.javahollic.jira.emh.service.DefaultJEMHLdapVelocityContextUtil user record for andy: andy@dev.ppl.com [record: andy] mail[0] = andy@dev.ppl.com sAMAccountName[0] = andy objectClass[0] = top objectClass[1] = person objectClass[2] = organizationalPerson objectClass[3] = user sn[0] = Brook memberOf[0] = CN=TS-read write,DC=dev,DC=ppl,DC=com memberOf[1] = CN=differentgroup,OU=OtherGroups,DC=dev,DC=ppl,DC=com memberOf[2] = CN=example-sub-sub-group,CN=Users,DC=dev,DC=ppl,DC=com memberOf[3] = CN=jira-users,CN=Users,DC=dev,DC=ppl,DC=com memberOf[4] = CN=Remote Desktop Users,CN=Builtin,DC=dev,DC=ppl,DC=com memberOf[5] = CN=Administrators,CN=Builtin,DC=dev,DC=ppl,DC=com

Edit time screenshot

Searching for a single user

var filter = "(sAMAccountName=Administrator)"; var ldap = jemhUtils.getLdap(); var atts = [ "sAMAccountName", "mail", "primaryGroupID", "memberOf" ]; var userAtts = ldap.getLimitedUserAttributes(filter, atts); var keySetIter = userAtts.entrySet().iterator(); while (keySetIter.hasNext()) { var anAtt = keySetIter.next(); print("Attr: "+anAtt.getKey()+" == "+anAtt.getValue()); } // showing how to get single value from result print("primaryGroupID = "+userAtts.get("primaryGroupID").get(0)); var userGroups = userAtts.get("memberOf").iterator(); while (userGroups.hasNext()) { var aGroup = userGroups.next(); print("usergroup: "+aGroup); }

Results:

Attr: mail == [Administrator@dev.ppl.com] Attr: sAMAccountName == [Administrator] Attr: primaryGroupID == [513] Attr: memberOf == [CN=jira-administrators,CN=Users,DC=dev,DC=ppl,DC=com, CN=jira-users,CN=Users,DC=dev,DC=ppl,DC=com, CN=Group Policy Creator Owners,CN=Users,DC=dev,DC=ppl,DC=com, CN=Domain Admins,CN=Users,DC=dev,DC=ppl,DC=com, CN=Enterprise Admins,CN=Users,DC=dev,DC=ppl,DC=com, CN=Schema Admins,CN=Users,DC=dev,DC=ppl,DC=com, CN=Remote Desktop Users,CN=Builtin,DC=dev,DC=ppl,DC=com, CN=Administrators,CN=Builtin,DC=dev,DC=ppl,DC=com] primaryGroupID = 513 usergroup: CN=jira-administrators,CN=Users,DC=dev,DC=ppl,DC=com usergroup: CN=jira-users,CN=Users,DC=dev,DC=ppl,DC=com usergroup: CN=Group Policy Creator Owners,CN=Users,DC=dev,DC=ppl,DC=com usergroup: CN=Domain Admins,CN=Users,DC=dev,DC=ppl,DC=com usergroup: CN=Enterprise Admins,CN=Users,DC=dev,DC=ppl,DC=com usergroup: CN=Schema Admins,CN=Users,DC=dev,DC=ppl,DC=com usergroup: CN=Remote Desktop Users,CN=Builtin,DC=dev,DC=ppl,DC=com usergroup: CN=Administrators,CN=Builtin,DC=dev,DC=ppl,DC=com

Get all user attributes:

If the user filter finds many users, only the first is returned - i.e., if you search by email, be sure there is only ONE user in the directory with that “mail” attribute value!

var filter = "(sAMAccountName=Administrator)"; var ldap = jemhUtils.getLdap(); var userAtts = ldap.getAllUserAttributes(filter); var keySetIter = userAtts.entrySet().iterator(); while (keySetIter.hasNext()) { var anAtt = keySetIter.next(); print("Attr: "+anAtt.getKey()+" == "+anAtt.getValue()); } // showing how to get single value from result print("primaryGroupID = "+userAtts.get("primaryGroupID").get(0));

Execution result:

Get specific user attributes:

var filter = "(sAMAccountName=Administrator)"; var ldap = jemhUtils.getLdap(); var atts = [ "sAMAccountName", "mail", "primaryGroupID" ]; var userAtts = ldap.getLimitedUserAttributes(filter, atts); var keySetIter = userAtts.entrySet().iterator(); while (keySetIter.hasNext()) { var anAtt = keySetIter.next(); print("Attr: "+anAtt.getKey()+" == "+anAtt.getValue()); } // showing how to get single value from result print("primaryGroupID = "+userAtts.get("primaryGroupID").get(0));

Execution result:

 

Related content