Bind SecureStore and SecureStoreClassName in WebAppInitializer

Bug: Issue 3255
Change-Id: I71265720be581dc961d717096e44a84c6858ba55
This commit is contained in:
Dariusz Luksza
2015-03-20 20:31:34 +01:00
committed by David Pursehouse
parent c33a9108e8
commit 9eb14549a0
3 changed files with 69 additions and 22 deletions

View File

@@ -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);