Added MailAddresResolver for LDAP. Needs to be tested before hooked online (issue #1475)

git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@8048 71c3de6d-444a-0410-be80-ed276b4c234a

Originally-Committed-As: d8a9a6fddb09a591879165ef495f4be5c1f9752a
This commit is contained in:
kohsuke 2008-03-27 23:46:20 +00:00
parent 30f13cf34c
commit a104a1e39b

View file

@ -3,8 +3,10 @@ package hudson.security;
import com.sun.jndi.ldap.LdapCtxFactory;
import groovy.lang.Binding;
import hudson.Util;
import hudson.tasks.MailAddressResolver;
import hudson.model.Descriptor;
import hudson.model.Hudson;
import hudson.model.User;
import hudson.util.FormFieldValidator;
import hudson.util.spring.BeanBuilder;
import net.sf.json.JSONObject;
@ -12,6 +14,7 @@ import org.acegisecurity.AuthenticationManager;
import org.acegisecurity.userdetails.UserDetailsService;
import org.acegisecurity.userdetails.UserDetails;
import org.acegisecurity.userdetails.UsernameNotFoundException;
import org.acegisecurity.userdetails.ldap.LdapUserDetails;
import org.acegisecurity.ldap.search.FilterBasedLdapUserSearch;
import org.acegisecurity.ldap.LdapUserSearch;
import org.kohsuke.stapler.DataBoundConstructor;
@ -143,6 +146,33 @@ public class LDAPSecurityRealm extends SecurityRealm {
});
}
/**
* If the security realm is LDAP, try to pick up e-mail address from LDAP.
*/
public static final class MailAdressResolverImpl extends MailAddressResolver {
public String findMailAddressFor(User u) {
// LDAP not active
Hudson hudson = Hudson.getInstance();
if(!(hudson.getSecurityRealm() instanceof LDAPSecurityRealm))
return null;
try {
LdapUserDetails details = (LdapUserDetails) HudsonFilter.USER_DETAILS_SERVICE_PROXY.loadUserByUsername(u.getId());
Attribute mail = details.getAttributes().get("mail");
if(mail==null) return null; // not found
return (String)mail.get();
} catch (UsernameNotFoundException e) {
LOGGER.log(Level.FINE, "Failed to look up LDAP for e-mail address",e);
return null;
} catch (DataAccessException e) {
LOGGER.log(Level.FINE, "Failed to look up LDAP for e-mail address",e);
return null;
} catch (NamingException e) {
LOGGER.log(Level.FINE, "Failed to look up LDAP for e-mail address",e);
return null;
}
}
}
public DescriptorImpl getDescriptor() {
return DESCRIPTOR;
}