package alien4cloud.security.spring.ldap; import java.util.List; import javax.annotation.Resource; import lombok.Getter; import lombok.Setter; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Conditional; import org.springframework.ldap.core.LdapTemplate; import org.springframework.stereotype.Component; import alien4cloud.security.model.User; /** * Manage connection with LDAP for security management. */ @Getter @Setter @Component @Conditional(LdapCondition.class) public class LdapUserDao { @Resource private LdapTemplate ldapTemplate; @Resource private UserLdapAttributeMapper userLdapAttributeMapper; @Value("${ldap.filter}") private String filter; @Value("${ldap.mapping.id}") private String userIdKey; /** * Authenticate the user against ldap. * * @param userName the user name. * @param password the user password. */ public boolean authenticate(String userName, String password) { return ldapTemplate.authenticate("", userIdKey + "=" + userName, password); } /** * Return all users from LDAP. * * @return The list of users in LDAP. */ public List<User> getUsers() { return ldapTemplate.search("", this.filter, userLdapAttributeMapper); } /** * Find a user based on it's username/id * * @param id The username / id of the user. * @return The user found in LDAP matching this username/id. */ public User getById(String id) { String idFilter = "(" + userIdKey + "=" + id + ")"; List<User> users = ldapTemplate.search("", idFilter, userLdapAttributeMapper); if (users == null || users.size() == 0) { return null; } return users.get(0); } }