Skip to content
Snippets Groups Projects
Commit a25bba40 authored by Mike McKay's avatar Mike McKay
Browse files

Fixed LDAP Authentication.

parent d6bd24b5
No related branches found
No related tags found
No related merge requests found
......@@ -11,3 +11,4 @@ gradle.properties
.project
.settings/
InstanceSettings.xml
src/main/resources/META-INF/xnat/auth
......@@ -12,6 +12,8 @@ package org.nrg.xnat.security;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nrg.framework.services.ContextService;
import org.nrg.xdat.XDAT;
import org.nrg.xdat.preferences.SiteConfigPreferences;
import org.nrg.xdat.security.helpers.Users;
import org.nrg.xdat.services.XdatUserAuthService;
......@@ -71,11 +73,11 @@ public class XnatLdapUserDetailsMapper extends LdapUserDetailsMapper {
String firstname = (String) ctx.getObjectAttribute(_properties.get(PROPERTY_FIRST));
String lastname = (String) ctx.getObjectAttribute(_properties.get(PROPERTY_LAST));
UserI userDetails = _userAuthService.getUserDetailsByNameAndAuth(user.getUsername(), XdatUserAuthService.LDAP, _authMethodId, email, lastname, firstname);
UserI userDetails = ContextService.getInstance().getBean(XdatUserAuthService.class).getUserDetailsByNameAndAuth(user.getUsername(), XdatUserAuthService.LDAP, _authMethodId, email, lastname, firstname);
try {
final UserI xdatUser = Users.getUser(userDetails.getUsername());
if ((!_preferences.getEmailVerification() || xdatUser.isVerified()) && userDetails.getAuthorization().isEnabled()) {
if ((!XDAT.verificationOn() || xdatUser.isVerified()) && userDetails.getAuthorization().isEnabled()) {
return userDetails;
} else {
throw new NewLdapAccountNotAutoEnabledException(
......
package org.nrg.xnat.security.config;
import org.apache.commons.lang3.StringUtils;
import org.nrg.framework.utilities.BasicXnatResourceLocator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.support.PropertiesLoaderUtils;
import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.core.io.Resource;
import java.util.*;
......@@ -12,33 +17,62 @@ public class AuthenticationProviderAggregator extends ArrayList<AuthenticationPr
throw new IllegalArgumentException("The list of authentication providers cannot be set to null.");
}
String commaDelineatedProviders = properties.getProperty("provider.providers.enabled");
assert !StringUtils.isBlank(commaDelineatedProviders) : "You must specify at least one authentication provider configuration.";
String[] providerArray=commaDelineatedProviders.split("[\\s,]+");
// String commaDelineatedProviders = properties.getProperty("provider.providers.enabled");
// assert !StringUtils.isBlank(commaDelineatedProviders) : "You must specify at least one authentication provider configuration.";
// ArrayList<String> providerArray=new ArrayList<String>(Arrays.asList(commaDelineatedProviders.split("[\\s,]+")));
// HashMap<String, HashMap<String, String>> providerMap = new HashMap<>();
// for(String prov : providerArray){
// providerMap.put(prov, new HashMap<String, String>());
// }
ArrayList<String> providerArray=new ArrayList<String>();
String dbName = "Database";
String dbId = "localdb";
String dbType = "db";
providerArray.add(dbType);
HashMap<String, HashMap<String, String>> providerMap = new HashMap<>();
for(String prov : providerArray){
providerMap.put(prov, new HashMap<String, String>());
}
providerMap.put(dbType, new HashMap<String, String>());
providerMap.get(dbType).put("name",dbName);
providerMap.get(dbType).put("id",dbId);
providerMap.get(dbType).put("type",dbType);
// Populate map of properties
for(Map.Entry<Object, Object> entry : properties.entrySet()) {
String key = (String) entry.getKey();
StringTokenizer st = new StringTokenizer(key, ".");
String provider = st.nextToken();
if (provider.equals("provider")) {
String name = st.nextToken();
if(providerMap.containsKey(name)) {
StringBuilder providerProperty = new StringBuilder();
while (st.hasMoreTokens()) {
if (providerProperty.length() > 0) {
providerProperty.append(".");
}
providerProperty.append(st.nextToken());
}
providerMap.get(name).put(providerProperty.toString(), (String) entry.getValue());
try {
String filnameEnd = "-provider.properties";
final List<Resource> resources = BasicXnatResourceLocator.getResources("classpath*:META-INF/xnat/auth/**/*" + filnameEnd);
for (final Resource resource : resources) {
String filename = resource.getFilename();
String id = filename.substring(0, (filename.length() - filnameEnd.length()));
providerMap.put(id, new HashMap<String, String>());
providerArray.add(id);
final Properties provider = PropertiesLoaderUtils.loadProperties(resource);
for (Map.Entry<Object, Object> providerProperty : provider.entrySet()) {
providerMap.get(id).put(providerProperty.getKey().toString(), providerProperty.getValue().toString());
}
}
}catch(Exception e){
_log.error("",e);
}
//
// for(Map.Entry<Object, Object> entry : properties.entrySet()) {
// String key = (String) entry.getKey();
// StringTokenizer st = new StringTokenizer(key, ".");
// String provider = st.nextToken();
// if (provider.equals("provider")) {
// String name = st.nextToken();
// if(providerMap.containsKey(name)) {
// StringBuilder providerProperty = new StringBuilder();
// while (st.hasMoreTokens()) {
// if (providerProperty.length() > 0) {
// providerProperty.append(".");
// }
// providerProperty.append(st.nextToken());
// }
// providerMap.get(name).put(providerProperty.toString(), (String) entry.getValue());
// }
// }
// }
// Create providers
for(String prov: providerArray){
......@@ -60,4 +94,6 @@ public class AuthenticationProviderAggregator extends ArrayList<AuthenticationPr
addAll(standaloneProviders);
}
}
private static final Logger _log = LoggerFactory.getLogger(AuthenticationProviderAggregator.class);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment