You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2018/07/03 02:48:22 UTC
[4/6] james-project git commit: JAMES-2441 Get ride of
UnionConfigurationProvider to inject LDAP host
JAMES-2441 Get ride of UnionConfigurationProvider to inject LDAP host
We rather should inject the POJO first!
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/6430724b
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/6430724b
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/6430724b
Branch: refs/heads/master
Commit: 6430724b34d5c3a8e0d0ead454cc508a6e640051
Parents: fcd09ee
Author: benwa <bt...@linagora.com>
Authored: Wed Jun 27 11:06:22 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Tue Jul 3 09:47:14 2018 +0700
----------------------------------------------------------------------
.../james/data/LdapUsersRepositoryModule.java | 18 ++-
.../apache/james/CassandraLdapJmapTestRule.java | 70 ++++------
.../user/ldap/LdapRepositoryConfiguration.java | 130 ++++++++++++++++++-
3 files changed, 164 insertions(+), 54 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/6430724b/server/container/guice/cassandra-ldap-guice/src/main/java/org/apache/james/data/LdapUsersRepositoryModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-ldap-guice/src/main/java/org/apache/james/data/LdapUsersRepositoryModule.java b/server/container/guice/cassandra-ldap-guice/src/main/java/org/apache/james/data/LdapUsersRepositoryModule.java
index 6fcab3c..cab8827 100644
--- a/server/container/guice/cassandra-ldap-guice/src/main/java/org/apache/james/data/LdapUsersRepositoryModule.java
+++ b/server/container/guice/cassandra-ldap-guice/src/main/java/org/apache/james/data/LdapUsersRepositoryModule.java
@@ -20,15 +20,18 @@ package org.apache.james.data;
import java.util.List;
+import org.apache.commons.configuration.ConfigurationException;
import org.apache.james.lifecycle.api.Configurable;
import org.apache.james.server.core.configuration.ConfigurationProvider;
import org.apache.james.user.api.UsersRepository;
+import org.apache.james.user.ldap.LdapRepositoryConfiguration;
import org.apache.james.user.ldap.ReadOnlyUsersLDAPRepository;
import org.apache.james.utils.ConfigurationPerformer;
import com.google.common.collect.ImmutableList;
import com.google.inject.AbstractModule;
import com.google.inject.Inject;
+import com.google.inject.Provides;
import com.google.inject.Scopes;
import com.google.inject.Singleton;
import com.google.inject.multibindings.Multibinder;
@@ -43,22 +46,29 @@ public class LdapUsersRepositoryModule extends AbstractModule {
Multibinder.newSetBinder(binder(), ConfigurationPerformer.class).addBinding().to(LdapUsersRepositoryConfigurationPerformer.class);
}
+ @Provides
+ @Singleton
+ public LdapRepositoryConfiguration provideConfiguration(ConfigurationProvider configurationProvider) throws ConfigurationException {
+ return LdapRepositoryConfiguration.from(
+ configurationProvider.getConfiguration("usersrepository"));
+ }
+
@Singleton
public static class LdapUsersRepositoryConfigurationPerformer implements ConfigurationPerformer {
- private final ConfigurationProvider configurationProvider;
+ private final LdapRepositoryConfiguration configuration;
private final ReadOnlyUsersLDAPRepository usersRepository;
@Inject
- public LdapUsersRepositoryConfigurationPerformer(ConfigurationProvider configurationProvider, ReadOnlyUsersLDAPRepository usersRepository) {
- this.configurationProvider = configurationProvider;
+ public LdapUsersRepositoryConfigurationPerformer(LdapRepositoryConfiguration configuration, ReadOnlyUsersLDAPRepository usersRepository) {
+ this.configuration = configuration;
this.usersRepository = usersRepository;
}
@Override
public void initModule() {
try {
- usersRepository.configure(configurationProvider.getConfiguration("usersrepository"));
+ usersRepository.configure(configuration);
usersRepository.init();
} catch (Exception e) {
throw new RuntimeException(e);
http://git-wip-us.apache.org/repos/asf/james-project/blob/6430724b/server/container/guice/cassandra-ldap-guice/src/test/java/org/apache/james/CassandraLdapJmapTestRule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-ldap-guice/src/test/java/org/apache/james/CassandraLdapJmapTestRule.java b/server/container/guice/cassandra-ldap-guice/src/test/java/org/apache/james/CassandraLdapJmapTestRule.java
index 3a81da6..b4b8fd0 100644
--- a/server/container/guice/cassandra-ldap-guice/src/test/java/org/apache/james/CassandraLdapJmapTestRule.java
+++ b/server/container/guice/cassandra-ldap-guice/src/test/java/org/apache/james/CassandraLdapJmapTestRule.java
@@ -21,22 +21,16 @@ package org.apache.james;
import java.io.IOException;
-import org.apache.commons.configuration.HierarchicalConfiguration;
-import org.apache.commons.configuration.plist.PropertyListConfiguration;
-import org.apache.james.http.jetty.ConfigurationException;
+import org.apache.commons.configuration.ConfigurationException;
import org.apache.james.modules.TestJMAPServerModule;
import org.apache.james.server.core.configuration.Configuration;
-import org.apache.james.server.core.configuration.ConfigurationProvider;
-import org.apache.james.server.core.configuration.FileConfigurationProvider;
+import org.apache.james.user.ldap.LdapRepositoryConfiguration;
import org.junit.rules.TemporaryFolder;
import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;
-import com.google.inject.Inject;
import com.google.inject.Module;
-import com.google.inject.name.Named;
-import com.google.inject.name.Names;
public class CassandraLdapJmapTestRule implements TestRule {
private static final int LIMIT_TO_3_MESSAGES = 3;
@@ -65,12 +59,31 @@ public class CassandraLdapJmapTestRule implements TestRule {
.build();
return new GuiceJamesServer(configuration)
- .combineWith(CassandraLdapJamesServerMain.cassandraLdapServerModule,
- binder -> binder.bind(String.class).annotatedWith(Names.named("ldapIp")).toInstance(ldapIp))
+ .combineWith(CassandraLdapJamesServerMain.cassandraLdapServerModule)
.overrideWith(new TestJMAPServerModule(LIMIT_TO_3_MESSAGES))
.overrideWith(guiceModuleTestRule.getModule())
.overrideWith(additionals)
- .overrideWith(binder -> binder.bind(ConfigurationProvider.class).to(UnionConfigurationProvider.class));
+ .overrideWith(binder -> binder.bind(LdapRepositoryConfiguration.class)
+ .toInstance(computeConfiguration(ldapIp)));
+ }
+
+ private LdapRepositoryConfiguration computeConfiguration(String ldapIp) {
+ try {
+ return LdapRepositoryConfiguration.builder()
+ .ldapHost(ldapIp)
+ .principal("cn=admin,dc=james,dc=org")
+ .credentials("mysecretpassword")
+ .userBase("ou=People,dc=james,dc=org")
+ .userIdAttribute("uid")
+ .userObjectClass("inetOrgPerson")
+ .maxRetries(4)
+ .retryStartInterval(0)
+ .retryMaxInterval(8)
+ .scale(1000)
+ .build();
+ } catch (ConfigurationException e) {
+ throw new RuntimeException(e);
+ }
}
@Override
@@ -81,39 +94,4 @@ public class CassandraLdapJmapTestRule implements TestRule {
public void await() {
guiceModuleTestRule.await();
}
-
- private static class UnionConfigurationProvider implements ConfigurationProvider {
- private final FileConfigurationProvider fileConfigurationProvider;
- private final String ldapIp;
-
- @Inject
- public UnionConfigurationProvider(FileConfigurationProvider fileConfigurationProvider,
- @Named("ldapIp") String ldapIp) {
- this.fileConfigurationProvider = fileConfigurationProvider;
- this.ldapIp = ldapIp;
- }
-
- @Override
- public HierarchicalConfiguration getConfiguration(String component) throws org.apache.commons.configuration.ConfigurationException {
- if (component.equals("usersrepository")) {
- return ldapRepositoryConfiguration();
- }
- return fileConfigurationProvider.getConfiguration(component);
- }
-
- private HierarchicalConfiguration ldapRepositoryConfiguration() throws ConfigurationException {
- PropertyListConfiguration configuration = new PropertyListConfiguration();
- configuration.addProperty("[@ldapHost]", ldapIp);
- configuration.addProperty("[@principal]", "cn=admin\\,dc=james\\,dc=org");
- configuration.addProperty("[@credentials]", "mysecretpassword");
- configuration.addProperty("[@userBase]", "ou=People\\,dc=james\\,dc=org");
- configuration.addProperty("[@userIdAttribute]", "uid");
- configuration.addProperty("[@userObjectClass]", "inetOrgPerson");
- configuration.addProperty("[@maxRetries]", "4");
- configuration.addProperty("[@retryStartInterval]", "0");
- configuration.addProperty("[@retryMaxInterval]", "8");
- configuration.addProperty("[@retryIntervalScale]", "1000");
- return configuration;
- }
- }
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/6430724b/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/LdapRepositoryConfiguration.java
----------------------------------------------------------------------
diff --git a/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/LdapRepositoryConfiguration.java b/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/LdapRepositoryConfiguration.java
index fe230f0..9546ec4 100644
--- a/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/LdapRepositoryConfiguration.java
+++ b/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/LdapRepositoryConfiguration.java
@@ -25,9 +25,131 @@ import java.util.Optional;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.HierarchicalConfiguration;
+import com.google.common.base.Preconditions;
+
public class LdapRepositoryConfiguration {
public static final String SUPPORTS_VIRTUAL_HOSTING = "supportsVirtualHosting";
+ private static final boolean USE_CONNECTION_POOL = true;
+ private static final int NO_CONNECTION_TIMEOUT = -1;
+ private static final int NO_READ_TIME_OUT = -1;
+ private static final boolean ENABLE_VIRTUAL_HOSTING = true;
+ private static final ReadOnlyLDAPGroupRestriction NO_RESTRICTION = new ReadOnlyLDAPGroupRestriction(null);
+ private static final String NO_FILTER = null;
+ private static final Optional<String> NO_ADMINISTRATOR_ID = Optional.empty();
+
+ public static class Builder {
+ private Optional<String> ldapHost;
+ private Optional<String> principal;
+ private Optional<String> credentials;
+ private Optional<String> userBase;
+ private Optional<String> userIdAttribute;
+ private Optional<String> userObjectClass;
+ private Optional<Integer> maxRetries;
+ private Optional<Long> retryStartInterval;
+ private Optional<Long> retryMaxInterval;
+ private Optional<Integer> scale;
+
+ public Builder() {
+ ldapHost = Optional.empty();
+ principal = Optional.empty();
+ credentials = Optional.empty();
+ userBase = Optional.empty();
+ userIdAttribute = Optional.empty();
+ userObjectClass = Optional.empty();
+ maxRetries = Optional.empty();
+ retryStartInterval = Optional.empty();
+ retryMaxInterval = Optional.empty();
+ scale = Optional.empty();
+ }
+
+ public Builder ldapHost(String ldapHost) {
+ this.ldapHost = Optional.of(ldapHost);
+ return this;
+ }
+
+ public Builder principal(String principal) {
+ this.principal = Optional.of(principal);
+ return this;
+ }
+
+ public Builder credentials(String credentials) {
+ this.credentials = Optional.of(credentials);
+ return this;
+ }
+
+ public Builder userBase(String userBase) {
+ this.userBase = Optional.of(userBase);
+ return this;
+ }
+
+ public Builder userIdAttribute(String userIdAttribute) {
+ this.userIdAttribute = Optional.of(userIdAttribute);
+ return this;
+ }
+
+ public Builder userObjectClass(String userObjectClass) {
+ this.userObjectClass = Optional.of(userObjectClass);
+ return this;
+ }
+
+ public Builder maxRetries(int maxRetries) {
+ this.maxRetries = Optional.of(maxRetries);
+ return this;
+ }
+
+ public Builder retryStartInterval(long retryStartInterval) {
+ this.retryStartInterval = Optional.of(retryStartInterval);
+ return this;
+ }
+
+ public Builder retryMaxInterval(long retryMaxInterval) {
+ this.retryMaxInterval = Optional.of(retryMaxInterval);
+ return this;
+ }
+
+ public Builder scale(int scale) {
+ this.scale = Optional.of(scale);
+ return this;
+ }
+
+ public LdapRepositoryConfiguration build() throws ConfigurationException {
+ Preconditions.checkState(ldapHost.isPresent(), "'ldapHost' is mandatory");
+ Preconditions.checkState(principal.isPresent(), "'principal' is mandatory");
+ Preconditions.checkState(credentials.isPresent(), "'credentials' is mandatory");
+ Preconditions.checkState(userBase.isPresent(), "'userBase' is mandatory");
+ Preconditions.checkState(userIdAttribute.isPresent(), "'userIdAttribute' is mandatory");
+ Preconditions.checkState(userObjectClass.isPresent(), "'userObjectClass' is mandatory");
+ Preconditions.checkState(maxRetries.isPresent(), "'maxRetries' is mandatory");
+ Preconditions.checkState(retryStartInterval.isPresent(), "'retryStartInterval' is mandatory");
+ Preconditions.checkState(retryMaxInterval.isPresent(), "'retryMaxInterval' is mandatory");
+ Preconditions.checkState(scale.isPresent(), "'scale' is mandatory");
+
+ return new LdapRepositoryConfiguration(
+ ldapHost.get(),
+ principal.get(),
+ credentials.get(),
+ userBase.get(),
+ userIdAttribute.get(),
+ userObjectClass.get(),
+ USE_CONNECTION_POOL,
+ NO_CONNECTION_TIMEOUT,
+ NO_READ_TIME_OUT,
+ maxRetries.get(),
+ !ENABLE_VIRTUAL_HOSTING,
+ retryStartInterval.get(),
+ retryMaxInterval.get(),
+ scale.get(),
+ NO_RESTRICTION,
+ NO_FILTER,
+ NO_ADMINISTRATOR_ID);
+ }
+ }
+
+ public static Builder builder() {
+ return new Builder();
+ }
+
public static LdapRepositoryConfiguration from(HierarchicalConfiguration configuration) throws ConfigurationException {
String ldapHost = configuration.getString("[@ldapHost]", "");
String principal = configuration.getString("[@principal]", "");
@@ -36,13 +158,13 @@ public class LdapRepositoryConfiguration {
String userIdAttribute = configuration.getString("[@userIdAttribute]");
String userObjectClass = configuration.getString("[@userObjectClass]");
// Default is to use connection pooling
- boolean useConnectionPool = configuration.getBoolean("[@useConnectionPool]", true);
- int connectionTimeout = configuration.getInt("[@connectionTimeout]", -1);
- int readTimeout = configuration.getInt("[@readTimeout]", -1);
+ boolean useConnectionPool = configuration.getBoolean("[@useConnectionPool]", USE_CONNECTION_POOL);
+ int connectionTimeout = configuration.getInt("[@connectionTimeout]", NO_CONNECTION_TIMEOUT);
+ int readTimeout = configuration.getInt("[@readTimeout]", NO_READ_TIME_OUT);
// Default maximum retries is 1, which allows an alternate connection to
// be found in a multi-homed environment
int maxRetries = configuration.getInt("[@maxRetries]", 1);
- boolean supportsVirtualHosting = configuration.getBoolean(SUPPORTS_VIRTUAL_HOSTING, false);
+ boolean supportsVirtualHosting = configuration.getBoolean(SUPPORTS_VIRTUAL_HOSTING, !ENABLE_VIRTUAL_HOSTING);
// Default retry start interval is 0 second
long retryStartInterval = configuration.getLong("[@retryStartInterval]", 0);
// Default maximum retry interval is 60 seconds
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org