package com.sequenceiq.cloudbreak.controller.validation.ldapconfig; import java.util.Hashtable; import javax.naming.Context; import javax.naming.NamingException; import javax.naming.directory.DirContext; import javax.naming.directory.InitialDirContext; import org.springframework.stereotype.Component; import com.sequenceiq.cloudbreak.api.model.LdapConfigRequest; import com.sequenceiq.cloudbreak.controller.BadRequestException; import com.sequenceiq.cloudbreak.domain.LdapConfig; @Component public class LdapConfigValidator { public void validateLdapConnection(LdapConfig ldapConfig) { if (ldapConfig != null) { validateLdapConnection(ldapConfig.getProtocol(), ldapConfig.getServerHost(), ldapConfig.getServerPort(), ldapConfig.getBindDn(), ldapConfig.getBindPassword()); } } public void validateLdapConnection(LdapConfigRequest request) { if (request != null) { validateLdapConnection(request.getProtocol(), request.getServerHost(), request.getServerPort(), request.getBindDn(), request.getBindPassword()); } } private void validateLdapConnection(String protocol, String serverHost, Integer serverPort, String bindDn, String bindPassword) { try { //BEGIN GENERATED CODE Hashtable<String, String> env = new Hashtable<String, String>(); //END GENERATED CODE env.put("com.sun.jndi.ldap.read.timeout", "1000"); env.put("com.sun.jndi.ldap.connect.timeout", "5000"); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); String url = new StringBuilder(protocol). append("://"). append(serverHost). append(":"). append(serverPort).toString(); env.put(Context.PROVIDER_URL, url); env.put(Context.SECURITY_AUTHENTICATION, "simple"); env.put(Context.SECURITY_PRINCIPAL, bindDn); env.put(Context.SECURITY_CREDENTIALS, bindPassword); DirContext ctx = new InitialDirContext(env); ctx.close(); } catch (NamingException e) { throw new BadRequestException("Failed to connect to LDAP server: " + e.getMessage(), e); } } }