public static LdapRepositoryConfiguration from()

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());
    }