// If both params are null, the master login (from initial open command)
// will be used
boolean masterLogin = false;
// Create authentication session
AuthenticationSession authSession = null;
AuthenticationModule authModule = getAuthenticationModule();
// Master login
if (user == null && credentials == null) {
user = this.masterLoginInputName;
credentials = this.masterLoginPassword;
masterLogin = true;
authSession = MasterLoginAuthSession.getInstance();
}
// Anonymous login
else if (user.equals(WGDatabase.ANONYMOUS_USER)) {
authSession = AnonymousAuthSession.getInstance();
}
// Regular login against authentication module
else if (authModule != null) {
if (certAuthEnabled() && (credentials instanceof X509Certificate)) {
authSession = ((CertAuthCapableAuthModule) authModule).login((X509Certificate) credentials);
}
else {
authSession = authModule.login(user, credentials);
}
if (authSession == null) {
return WGDatabase.ACCESSLEVEL_NOTLOGGEDIN;
}
}
// Backend login
else if (hasFeature(FEATURE_PERFORMS_BACKEND_LOGIN)) {
authSession = new BackendAuthSession(user, credentials);
}
// If no auth module and database does not accept backend logins we use an anonymous session
else {
authSession = AnonymousAuthSession.getInstance();
}
// Open core session
WGUserAccess userAccess = this.core.openSession(authSession, credentials, masterLogin);
if (userAccess.getAccessLevel() <= ACCESSLEVEL_NOACCESS) {
return userAccess.getAccessLevel();
}
userHashMapGroup.fetchAllMapsForUser(authSession.getDistinguishedName());
WGSessionContext sessionContext = new WGSessionContext(this, authSession, credentials, userAccess);
sessionContext.setCachingEnabled(cachingEnabled);
this.setSessionContext(sessionContext);
core.setCurrentSession(sessionContext);