Merge "Merge branch 'stable-2.10' into stable-2.11" into stable-2.11
diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/util/SiteProgram.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/util/SiteProgram.java
index 02a8eac..7e0aa1e 100644
--- a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/util/SiteProgram.java
+++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/util/SiteProgram.java
@@ -14,6 +14,7 @@
package com.google.gerrit.pgm.util;
+import static com.google.gerrit.server.config.GerritServerConfigModule.getSecureStoreClassName;
import static com.google.inject.Scopes.SINGLETON;
import static com.google.inject.Stage.PRODUCTION;
@@ -188,26 +189,7 @@
}
protected final String getConfiguredSecureStoreClass() {
- Module m = new AbstractModule() {
- @Override
- protected void configure() {
- bind(File.class).annotatedWith(SitePath.class).toInstance(sitePath);
- bind(SitePaths.class);
- }
- };
- Injector i = Guice.createInjector(m);
- SitePaths site = i.getInstance(SitePaths.class);
- FileBasedConfig cfg = new FileBasedConfig(site.gerrit_config, FS.DETECTED);
- if (!cfg.getFile().exists()) {
- return null;
- }
-
- try {
- cfg.load();
- return cfg.getString("gerrit", null, "secureStoreClass");
- } catch (IOException | ConfigInvalidException e) {
- throw new ProvisionException(e.getMessage(), e);
- }
+ return getSecureStoreClassName(sitePath);
}
private String getDbType(Provider<DataSource> dsProvider) {
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/config/GerritServerConfigModule.java b/gerrit-server/src/main/java/com/google/gerrit/server/config/GerritServerConfigModule.java
index 2683ca1..89331fd 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/config/GerritServerConfigModule.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/config/GerritServerConfigModule.java
@@ -16,14 +16,61 @@
import static com.google.inject.Scopes.SINGLETON;
+import com.google.gerrit.server.securestore.DefaultSecureStore;
import com.google.gerrit.server.securestore.SecureStore;
import com.google.gerrit.server.securestore.SecureStoreProvider;
import com.google.inject.AbstractModule;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.ProvisionException;
+import org.eclipse.jgit.errors.ConfigInvalidException;
import org.eclipse.jgit.lib.Config;
+import org.eclipse.jgit.storage.file.FileBasedConfig;
+import org.eclipse.jgit.util.FS;
+
+import java.io.File;
+import java.io.IOException;
/** Creates {@link GerritServerConfig}. */
public class GerritServerConfigModule extends AbstractModule {
+ public static String getSecureStoreClassName(final File sitePath) {
+ if (sitePath != null) {
+ return getSecureStoreFromGerritConfig(sitePath);
+ }
+
+ String secureStoreProperty = System.getProperty("gerrit.secure_store_class");
+ return nullToDefault(secureStoreProperty);
+ }
+
+ private static String getSecureStoreFromGerritConfig(final File sitePath) {
+ AbstractModule m = new AbstractModule() {
+ @Override
+ protected void configure() {
+ bind(File.class).annotatedWith(SitePath.class).toInstance(sitePath);
+ bind(SitePaths.class);
+ }
+ };
+ Injector injector = Guice.createInjector(m);
+ SitePaths site = injector.getInstance(SitePaths.class);
+ FileBasedConfig cfg = new FileBasedConfig(site.gerrit_config, FS.DETECTED);
+ if (!cfg.getFile().exists()) {
+ return DefaultSecureStore.class.getName();
+ }
+
+ try {
+ cfg.load();
+ String className = cfg.getString("gerrit", null, "secureStoreClass");
+ return nullToDefault(className);
+ } catch (IOException | ConfigInvalidException e) {
+ throw new ProvisionException(e.getMessage(), e);
+ }
+ }
+
+ private static String nullToDefault(String className) {
+ return className != null ? className : DefaultSecureStore.class.getName();
+ }
+
@Override
protected void configure() {
bind(SitePaths.class);
diff --git a/gerrit-war/src/main/java/com/google/gerrit/httpd/WebAppInitializer.java b/gerrit-war/src/main/java/com/google/gerrit/httpd/WebAppInitializer.java
index ec9f9fe..a0728e9 100644
--- a/gerrit-war/src/main/java/com/google/gerrit/httpd/WebAppInitializer.java
+++ b/gerrit-war/src/main/java/com/google/gerrit/httpd/WebAppInitializer.java
@@ -56,6 +56,9 @@
import com.google.gerrit.server.schema.DatabaseModule;
import com.google.gerrit.server.schema.SchemaModule;
import com.google.gerrit.server.schema.SchemaVersionCheck;
+import com.google.gerrit.server.securestore.SecureStore;
+import com.google.gerrit.server.securestore.SecureStoreClassName;
+import com.google.gerrit.server.securestore.SecureStoreProvider;
import com.google.gerrit.server.ssh.NoSshModule;
import com.google.gerrit.server.ssh.SshAddressesModule;
import com.google.gerrit.solr.SolrIndexModule;
@@ -74,6 +77,7 @@
import com.google.inject.servlet.GuiceFilter;
import com.google.inject.servlet.GuiceServletContextListener;
import com.google.inject.spi.Message;
+import com.google.inject.util.Providers;
import org.eclipse.jgit.lib.Config;
import org.slf4j.Logger;
@@ -206,6 +210,7 @@
private Injector createDbInjector() {
final List<Module> modules = new ArrayList<>();
+ AbstractModule secureStore = createSecureStoreModule();
if (sitePath != null) {
Module sitePathModule = new AbstractModule() {
@Override
@@ -218,13 +223,13 @@
Module configModule = new GerritServerConfigModule();
modules.add(configModule);
- Injector cfgInjector = Guice.createInjector(sitePathModule, configModule);
+ Injector cfgInjector = Guice.createInjector(sitePathModule, configModule, secureStore);
Config cfg = cfgInjector.getInstance(Key.get(Config.class,
GerritServerConfig.class));
String dbType = cfg.getString("database", null, "type");
final DataSourceType dst = Guice.createInjector(new DataSourceModule(),
- configModule, sitePathModule).getInstance(
+ configModule, sitePathModule, secureStore).getInstance(
Key.get(DataSourceType.class, Names.named(dbType.toLowerCase())));
modules.add(new LifecycleModule() {
@Override
@@ -239,6 +244,7 @@
});
} else {
+ modules.add(secureStore);
modules.add(new LifecycleModule() {
@Override
protected void configure() {
@@ -375,4 +381,16 @@
manager = null;
}
}
+
+ private AbstractModule createSecureStoreModule() {
+ return new AbstractModule() {
+ @Override
+ public void configure() {
+ String secureStoreClassName =
+ GerritServerConfigModule.getSecureStoreClassName(sitePath);
+ bind(String.class).annotatedWith(SecureStoreClassName.class).toProvider(
+ Providers.of(secureStoreClassName));
+ }
+ };
+ }
}