Bind SecureStore and SecureStoreClassName in WebAppInitializer
Bug: Issue 3255 Change-Id: I71265720be581dc961d717096e44a84c6858ba55
This commit is contained in:
committed by
David Pursehouse
parent
c33a9108e8
commit
9eb14549a0
@@ -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 @@ public abstract class SiteProgram extends AbstractProgram {
|
||||
}
|
||||
|
||||
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) {
|
||||
|
||||
@@ -16,14 +16,61 @@ package com.google.gerrit.server.config;
|
||||
|
||||
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);
|
||||
|
||||
@@ -56,6 +56,9 @@ import com.google.gerrit.server.schema.DataSourceType;
|
||||
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.name.Names;
|
||||
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 @@ public class WebAppInitializer extends GuiceServletContextListener
|
||||
|
||||
private Injector createDbInjector() {
|
||||
final List<Module> modules = new ArrayList<>();
|
||||
AbstractModule secureStore = createSecureStoreModule();
|
||||
if (sitePath != null) {
|
||||
Module sitePathModule = new AbstractModule() {
|
||||
@Override
|
||||
@@ -218,13 +223,13 @@ public class WebAppInitializer extends GuiceServletContextListener
|
||||
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 @@ public class WebAppInitializer extends GuiceServletContextListener
|
||||
});
|
||||
|
||||
} else {
|
||||
modules.add(secureStore);
|
||||
modules.add(new LifecycleModule() {
|
||||
@Override
|
||||
protected void configure() {
|
||||
@@ -375,4 +381,16 @@ public class WebAppInitializer extends GuiceServletContextListener
|
||||
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));
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user