diff --git a/authentication/source/java/ch/systemsx/cisd/authentication/ldap/LDAPDirectoryConfiguration.java b/authentication/source/java/ch/systemsx/cisd/authentication/ldap/LDAPDirectoryConfiguration.java index a4eeda1a7648bf9e57f0c1d7598855d1e6065e48..a8f17eb69a5ba2bf423afeec25dff621d902d0c3 100644 --- a/authentication/source/java/ch/systemsx/cisd/authentication/ldap/LDAPDirectoryConfiguration.java +++ b/authentication/source/java/ch/systemsx/cisd/authentication/ldap/LDAPDirectoryConfiguration.java @@ -44,6 +44,8 @@ public final class LDAPDirectoryConfiguration private String firstNameAttributeName = "givenName"; private String emailAttributeName = "mail"; + + private String emailAttributePrefix = ""; private String securityProtocol = "ssl"; @@ -125,6 +127,21 @@ public final class LDAPDirectoryConfiguration } } + public String getEmailAttributePrefix() + { + return emailAttributePrefix; + } + + /** + * The prefix of email values that is used when doing a search. + * <p> + * Default value: empty + */ + public void setEmailAttributePrefix(String emailAttributePrefix) + { + this.emailAttributePrefix = emailAttributePrefix; + } + /** * Default value: <code>ssl</code> * diff --git a/authentication/source/java/ch/systemsx/cisd/authentication/ldap/LDAPPrincipalQuery.java b/authentication/source/java/ch/systemsx/cisd/authentication/ldap/LDAPPrincipalQuery.java index 9e9444f9dc2f72ae50c649f07665b2d624acc3a9..02dd907523ed11efa0f080df50b6e04035b845e1 100644 --- a/authentication/source/java/ch/systemsx/cisd/authentication/ldap/LDAPPrincipalQuery.java +++ b/authentication/source/java/ch/systemsx/cisd/authentication/ldap/LDAPPrincipalQuery.java @@ -82,6 +82,18 @@ public final class LDAPPrincipalQuery implements ISelfTestable public Principal tryGetPrincipal(String userId) throws IllegalArgumentException { final List<Principal> principals = listPrincipalsByUserId(userId, 1); + return tryGetPrincipal(principals, "User '%s' is not unique.", userId); + } + + public Principal tryGetPrincipalByEmail(String email) + { + final List<Principal> principals = listPrincipalsByEmail(email, 1); + return tryGetPrincipal(principals, "Email '%s' is not unique.", email); + } + + private Principal tryGetPrincipal(final List<Principal> principals, final String msgTemplate, + final String user) + { if (principals.size() == 0) { return null; @@ -91,7 +103,7 @@ public final class LDAPPrincipalQuery implements ISelfTestable } else { // Cannot happen - we have limited the search to 1 - throw new IllegalArgumentException("User '" + userId + "' is not unique."); + throw new IllegalArgumentException(String.format(msgTemplate, user)); } } @@ -114,14 +126,35 @@ public final class LDAPPrincipalQuery implements ISelfTestable return listPrincipalsByKeyValue(config.getUserIdAttributeName(), userId, null, limit); } + public List<Principal> listPrincipalsByEmail(String email, int limit) + { + if (operationLog.isDebugEnabled()) + { + operationLog.debug(String.format("listPrincipalsByEmail(%s,%s)", email, limit)); + } + return listPrincipalsByKeyValue(config.getEmailAttributeName(), config + .getEmailAttributePrefix() + + email, null, limit); + } + public List<Principal> listPrincipalsByEmail(String email) { if (operationLog.isDebugEnabled()) { operationLog.debug(String.format("listPrincipalsByEmail(%s)", email)); } - return listPrincipalsByKeyValue(config.getEmailAttributeName(), email, null, - Integer.MAX_VALUE); + return listPrincipalsByKeyValue(config.getEmailAttributeName(), config + .getEmailAttributePrefix() + + email, null, Integer.MAX_VALUE); + } + + public List<Principal> listPrincipalsByLastName(String lastName, int limit) + { + if (operationLog.isDebugEnabled()) + { + operationLog.debug(String.format("listPrincipalsByLastName(%s,%s)", lastName, limit)); + } + return listPrincipalsByKeyValue(config.getLastNameAttributeName(), lastName, null, limit); } public List<Principal> listPrincipalsByLastName(String lastName)