package org.zstack.ldap;
import org.springframework.ldap.core.LdapTemplate;
import org.springframework.ldap.core.support.DefaultDirObjectFactory;
import org.springframework.ldap.core.support.DefaultTlsDirContextAuthenticationStrategy;
import org.springframework.ldap.core.support.LdapContextSource;
import org.zstack.header.exception.CloudRuntimeException;
import org.zstack.utils.Utils;
import org.zstack.utils.logging.CLogger;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLSession;
/**
* Created by miao on 12/19/16.
*/
class LdapUtil {
private static final CLogger logger = Utils.getLogger(LdapUtil.class);
void setTls(LdapContextSource ldapContextSource) {
// set tls
logger.debug("Ldap TLS enabled.");
DefaultTlsDirContextAuthenticationStrategy tls = new DefaultTlsDirContextAuthenticationStrategy();
tls.setHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
tls.setSslSocketFactory(new DummySSLSocketFactory());
ldapContextSource.setAuthenticationStrategy(tls);
}
LdapTemplateContextSource loadLdap(LdapServerInventory inv) {
LdapContextSource ldapContextSource;
ldapContextSource = new LdapContextSource();
ldapContextSource.setUrl(inv.getUrl());
ldapContextSource.setBase(inv.getBase());
ldapContextSource.setUserDn(inv.getUsername());
ldapContextSource.setPassword(inv.getPassword());
ldapContextSource.setDirObjectFactory(DefaultDirObjectFactory.class);
if (inv.getEncryption().equals(LdapEncryptionType.TLS.toString())) {
setTls(ldapContextSource);
}
ldapContextSource.setCacheEnvironmentProperties(false);
ldapContextSource.setPooled(false);
//
LdapTemplate ldapTemplate;
ldapTemplate = new LdapTemplate();
ldapTemplate.setContextSource(ldapContextSource);
try {
ldapContextSource.afterPropertiesSet();
logger.info("Test LDAP Context Source loaded ");
} catch (Exception e) {
logger.error("Test LDAP Context Source not loaded ", e);
throw new CloudRuntimeException("Test LDAP Context Source not loaded", e);
}
return new LdapTemplateContextSource(ldapTemplate, ldapContextSource);
}
}