in server/data/data-ldap/src/main/java/org/apache/james/user/ldap/LdapRepositoryConfiguration.java [179:252]
public static LdapRepositoryConfiguration from(HierarchicalConfiguration<ImmutableNode> configuration) throws ConfigurationException {
List<URI> ldapHosts = Splitter.on(",")
.splitToList(Optional.ofNullable(configuration.getString("[@ldapHosts]", null))
.orElse(configuration.getString("[@ldapHost]", ""))
.trim())
.stream()
.map(Throwing.function(URI::new))
.collect(ImmutableList.toImmutableList());
String principal = configuration.getString("[@principal]", "");
String credentials = configuration.getString("[@credentials]", "");
String userBase = configuration.getString("[@userBase]");
String userListBase = Optional.ofNullable(configuration.getString("[@userListBase]", null))
.orElse(userBase);
String userIdAttribute = configuration.getString("[@userIdAttribute]");
Optional<String> resolveLocalPartAttribute = Optional.ofNullable(configuration.getString("[@resolveLocalPartAttribute]", null));
Optional<String> usernameAttribute = Optional.ofNullable(configuration.getString("[@usernameAttribute]", null));
String userObjectClass = configuration.getString("[@userObjectClass]");
// Default is to use connection pooling
int connectionTimeout = configuration.getInt("[@connectionTimeout]", NO_CONNECTION_TIMEOUT);
int readTimeout = configuration.getInt("[@readTimeout]", NO_READ_TIME_OUT);
boolean supportsVirtualHostingFallback = configuration.getBoolean(SUPPORTS_VIRTUAL_HOSTING_FALLBACK, !ENABLE_VIRTUAL_HOSTING);
boolean supportsVirtualHosting = configuration.getBoolean(SUPPORTS_VIRTUAL_HOSTING, supportsVirtualHostingFallback);
HierarchicalConfiguration<ImmutableNode> restrictionConfig = null;
// Check if we have a restriction we can use
// See JAMES-1204
if (configuration.containsKey("restriction[@memberAttribute]")) {
restrictionConfig = configuration.configurationAt("restriction");
}
ReadOnlyLDAPGroupRestriction restriction = new ReadOnlyLDAPGroupRestriction(restrictionConfig);
//see if there is a filter argument
String filter = configuration.getString("[@filter]");
Boolean trustAllCerts = configuration.getBoolean("[@trustAllCerts]", false);
Optional<String> administratorId = Optional.ofNullable(configuration.getString("[@administratorId]"));
int poolSize = Optional.ofNullable(configuration.getInteger("[@poolSize]", null))
.orElse(DEFAULT_POOL_SIZE);
int maxWaitTime = Optional.ofNullable(configuration.getInteger("[@maxWaitTime]", null))
.orElse(DEFAULT_MAX_WAIT_TIME_MILLIS);
ImmutableMap.Builder<Domain, String> builder = ImmutableMap.builder();
if (configuration.getNodeModel()
.getInMemoryRepresentation()
.getChildren()
.stream()
.anyMatch(n -> n.getNodeName().equals("domains"))) {
HierarchicalConfiguration<ImmutableNode> domains = configuration.configurationAt("domains");
Iterator<String> keys = domains.getKeys();
while (keys.hasNext()) {
String next = keys.next();
builder.put(Domain.of(next), domains.getString(next));
}
}
return new LdapRepositoryConfiguration(
ldapHosts,
principal,
credentials,
userBase,
userListBase, userIdAttribute,
resolveLocalPartAttribute,
usernameAttribute,
userObjectClass,
connectionTimeout,
readTimeout,
supportsVirtualHosting,
poolSize,
maxWaitTime,
restriction,
filter,
administratorId,
trustAllCerts, builder.build());
}