diff options
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.java | 40 |
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()); + } } |