summaryrefslogtreecommitdiffstats
path: root/gerrit-server/src/main/java/com/google/gerrit/server/contact/ContactStoreProvider.java
diff options
context:
space:
mode:
Diffstat (limited to 'gerrit-server/src/main/java/com/google/gerrit/server/contact/ContactStoreProvider.java')
-rw-r--r--gerrit-server/src/main/java/com/google/gerrit/server/contact/ContactStoreProvider.java40
1 files changed, 35 insertions, 5 deletions
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/contact/ContactStoreProvider.java b/gerrit-server/src/main/java/com/google/gerrit/server/contact/ContactStoreProvider.java
index da17c08581..d5cd11a57a 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/contact/ContactStoreProvider.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/contact/ContactStoreProvider.java
@@ -14,39 +14,47 @@
package com.google.gerrit.server.contact;
-import com.google.gerrit.reviewdb.ReviewDb;
+import com.google.gerrit.reviewdb.server.ReviewDb;
import com.google.gerrit.server.config.GerritServerConfig;
import com.google.gerrit.server.config.SitePaths;
-import com.google.gwtorm.client.SchemaFactory;
+import com.google.gwtorm.server.SchemaFactory;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.ProvisionException;
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.openpgp.PGPPublicKey;
import org.eclipse.jgit.lib.Config;
+import org.eclipse.jgit.util.StringUtils;
import java.io.File;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
import java.net.MalformedURLException;
import java.net.URL;
+import java.security.Security;
/** Creates the {@link ContactStore} based on the configuration. */
public class ContactStoreProvider implements Provider<ContactStore> {
private final Config config;
private final SitePaths site;
private final SchemaFactory<ReviewDb> schema;
+ private final ContactStoreConnection.Factory connFactory;
@Inject
ContactStoreProvider(@GerritServerConfig final Config config,
- final SitePaths site, final SchemaFactory<ReviewDb> schema) {
+ final SitePaths site, final SchemaFactory<ReviewDb> schema,
+ final ContactStoreConnection.Factory connFactory) {
this.config = config;
this.site = site;
this.schema = schema;
+ this.connFactory = connFactory;
}
@Override
public ContactStore get() {
final String url = config.getString("contactstore", null, "url");
- if (url == null) {
+ if (StringUtils.isEmptyOrNull(url)) {
return new NoContactStore();
}
@@ -68,17 +76,39 @@ public class ContactStoreProvider implements Provider<ContactStore> {
throw new ProvisionException("PGP public key file \""
+ pubkey.getAbsolutePath() + "\" not found");
}
- return new EncryptedContactStore(storeUrl, storeAPPSEC, pubkey, schema);
+ return new EncryptedContactStore(storeUrl, storeAPPSEC, pubkey, schema,
+ connFactory);
}
private static boolean havePGP() {
try {
Class.forName(PGPPublicKey.class.getName());
+ addBouncyCastleProvider();
return true;
} catch (NoClassDefFoundError noBouncyCastle) {
return false;
} catch (ClassNotFoundException noBouncyCastle) {
return false;
+ } catch (SecurityException noBouncyCastle) {
+ return false;
+ } catch (NoSuchMethodException noBouncyCastle) {
+ return false;
+ } catch (InstantiationException noBouncyCastle) {
+ return false;
+ } catch (IllegalAccessException noBouncyCastle) {
+ return false;
+ } catch (InvocationTargetException noBouncyCastle) {
+ return false;
+ } catch (ClassCastException noBouncyCastle) {
+ return false;
}
}
+
+ private static void addBouncyCastleProvider() throws ClassNotFoundException,
+ SecurityException, NoSuchMethodException, InstantiationException,
+ IllegalAccessException, InvocationTargetException {
+ Class<?> clazz = Class.forName(BouncyCastleProvider.class.getName());
+ Constructor<?> constructor = clazz.getConstructor();
+ Security.addProvider((java.security.Provider) constructor.newInstance());
+ }
}