/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jbpm.services.task.identity;
import java.util.Properties;
import javax.naming.Context;
import org.jbpm.services.task.utils.LdapSearcher;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
abstract class AbstractLDAPUserGroupInfo extends AbstractUserGroupInfo {
private static final Logger logger = LoggerFactory.getLogger(AbstractLDAPUserGroupInfo.class);
public static final String BIND_USER = "ldap.bind.user";
public static final String BIND_PWD = "ldap.bind.pwd";
protected static final String DEFAULT_ROLE_ATTR_ID = "cn";
protected static final String DEFAULT_USER_ATTR_ID = "uid";
private Properties config;
protected LdapSearcher ldapSearcher;
protected AbstractLDAPUserGroupInfo(String[] requiredProperties, String defaultPropertiesName) {
String propertiesLocation = System.getProperty(defaultPropertiesName);
String defaultPropertiesLocation = "classpath:/" + defaultPropertiesName + ".properties";
Properties config = readProperties(propertiesLocation, defaultPropertiesLocation);
initialize(requiredProperties, config);
}
protected AbstractLDAPUserGroupInfo(String[] requiredProperties, Properties config) {
initialize(requiredProperties, config);
}
private void initialize(String[] requiredProperties, Properties config) {
this.config = config;
validateProperties(requiredProperties);
copyConfigProperty(BIND_USER, Context.SECURITY_PRINCIPAL);
copyConfigProperty(BIND_PWD, Context.SECURITY_CREDENTIALS);
ldapSearcher = new LdapSearcher(this.config);
}
private void copyConfigProperty(String sourceKey, String targetKey) {
String value = config.getProperty(sourceKey);
if (value != null) {
config.setProperty(targetKey, value);
}
}
private void validateProperties(String[] requiredProperties) {
if (config == null) {
throw new IllegalArgumentException("No configuration found for " + getClass().getSimpleName()
+ ", aborting...");
}
StringBuffer missingProperties = new StringBuffer();
for (String requiredProperty : requiredProperties) {
if (!config.containsKey(requiredProperty)) {
if (missingProperties.length() > 0) {
missingProperties.append(", ");
}
missingProperties.append(requiredProperty);
}
}
if (missingProperties.length() > 0) {
logger.debug("Validation failed due to missing required properties: {}", missingProperties.toString());
throw new IllegalArgumentException("Missing required properties to configure " + getClass().getSimpleName()
+ ": " + missingProperties.toString());
}
}
public String getConfigProperty(String key) {
return config.getProperty(key);
}
public String getConfigProperty(String key, String defaultValue) {
return config.getProperty(key, defaultValue);
}
}