package io.vertx.ext.auth.shiro.impl;
import static io.vertx.ext.auth.shiro.LDAPProviderConstants.LDAP_AUTHENTICATION_MECHANISM;
import static io.vertx.ext.auth.shiro.LDAPProviderConstants.LDAP_CONTEXT_FACTORY_CLASS_NAME;
import static io.vertx.ext.auth.shiro.LDAPProviderConstants.LDAP_POOLING_ENABLED;
import static io.vertx.ext.auth.shiro.LDAPProviderConstants.LDAP_REFERRAL;
import static io.vertx.ext.auth.shiro.LDAPProviderConstants.LDAP_SYSTEM_PASSWORD;
import static io.vertx.ext.auth.shiro.LDAPProviderConstants.LDAP_SYSTEM_USERNAME;
import static io.vertx.ext.auth.shiro.LDAPProviderConstants.LDAP_URL;
import static io.vertx.ext.auth.shiro.LDAPProviderConstants.LDAP_USER_DN_TEMPLATE_FIELD;
import org.apache.shiro.realm.Realm;
import org.apache.shiro.realm.ldap.JndiLdapContextFactory;
import org.apache.shiro.realm.ldap.JndiLdapRealm;
import io.vertx.core.Vertx;
import io.vertx.core.json.JsonObject;
public class LDAPAuthProvider extends ShiroAuthProviderImpl {
public static Realm createRealm(JsonObject config) {
JndiLdapRealm ldapRealm = new JndiLdapRealm();
JndiLdapContextFactory factory = new JndiLdapContextFactory();
String userDNTemplate = config.getString(LDAP_USER_DN_TEMPLATE_FIELD);
if (userDNTemplate != null) {
ldapRealm.setUserDnTemplate(userDNTemplate);
}
String url = config.getString(LDAP_URL);
if (url != null) {
factory.setUrl(url);
}
String authenticationMechanism = config.getString(LDAP_AUTHENTICATION_MECHANISM);
if (authenticationMechanism != null) {
factory.setAuthenticationMechanism(authenticationMechanism);
}
String contextFactoryClassName = config.getString(LDAP_CONTEXT_FACTORY_CLASS_NAME);
if (contextFactoryClassName != null) {
factory.setContextFactoryClassName(contextFactoryClassName);
}
boolean poolingEnabled = config.getBoolean(LDAP_POOLING_ENABLED, false);
factory.setPoolingEnabled(poolingEnabled);
String referral = config.getString(LDAP_REFERRAL);
if (referral != null) {
factory.setReferral(referral);
}
String systemUsername = config.getString(LDAP_SYSTEM_USERNAME);
if (systemUsername != null) {
factory.setSystemUsername(systemUsername);
}
String systemPassword = config.getString(LDAP_SYSTEM_PASSWORD);
if (systemPassword != null) {
factory.setSystemPassword(systemPassword);
}
ldapRealm.setContextFactory(factory);
ldapRealm.init();
return ldapRealm;
}
public LDAPAuthProvider(Vertx vertx, Realm realm) {
super(vertx, realm);
}
}