Repository: gora
Updated Branches:
  refs/heads/master f8706c99c -> c36a2c38b


GORA-498 Adding mongodb authentications


Project: http://git-wip-us.apache.org/repos/asf/gora/repo
Commit: http://git-wip-us.apache.org/repos/asf/gora/commit/5846373e
Tree: http://git-wip-us.apache.org/repos/asf/gora/tree/5846373e
Diff: http://git-wip-us.apache.org/repos/asf/gora/diff/5846373e

Branch: refs/heads/master
Commit: 5846373ed25d32a37053853ae16265b7e560eeb1
Parents: 3796843
Author: madhawa <[email protected]>
Authored: Sun Dec 11 14:55:07 2016 +0530
Committer: madhawa <[email protected]>
Committed: Sun Dec 11 14:55:07 2016 +0530

----------------------------------------------------------------------
 .../apache/gora/mongodb/store/MongoStore.java   | 24 ++++++++++++++++++--
 .../mongodb/store/MongoStoreParameters.java     | 19 ++++++++++++++--
 2 files changed, 39 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/gora/blob/5846373e/gora-mongodb/src/main/java/org/apache/gora/mongodb/store/MongoStore.java
----------------------------------------------------------------------
diff --git 
a/gora-mongodb/src/main/java/org/apache/gora/mongodb/store/MongoStore.java 
b/gora-mongodb/src/main/java/org/apache/gora/mongodb/store/MongoStore.java
index d4771df..183005b 100644
--- a/gora-mongodb/src/main/java/org/apache/gora/mongodb/store/MongoStore.java
+++ b/gora-mongodb/src/main/java/org/apache/gora/mongodb/store/MongoStore.java
@@ -17,6 +17,7 @@
  */
 package org.apache.gora.mongodb.store;
 
+import static com.mongodb.AuthenticationMechanism.*;
 import static org.apache.gora.mongodb.store.MongoMapping.DocumentFieldType;
 
 import java.io.IOException;
@@ -152,8 +153,8 @@ DataStoreBase<K, T> {
     }
     // If configuration contains a login + secret, try to authenticated with DB
     List<MongoCredential> credentials = new ArrayList<>();
-    if (params.getLogin() != null && params.getSecret() != null) {
-      credentials.add(MongoCredential.createCredential(params.getLogin(), 
params.getDbname(), params.getSecret().toCharArray()));
+    if (params.getAuthenticationType() != null) {
+      credentials.add(createCredential(params.getAuthenticationType(), 
params.getLogin(), params.getDbname(), params.getSecret()));
     }
     // Build server address
     List<ServerAddress> addrs = new ArrayList<>();
@@ -179,6 +180,25 @@ DataStoreBase<K, T> {
     return new MongoClient(addrs, credentials, optBuilder.build());
   }
 
+  private MongoCredential createCredential(String authenticationType, String 
username, String database, String password) {
+    MongoCredential credential = null;
+    if (authenticationType.equals(PLAIN.getMechanismName())) {
+      credential = MongoCredential.createPlainCredential(username, database, 
password.toCharArray());
+    } else if (authenticationType.equals(SCRAM_SHA_1.getMechanismName())) {
+      credential = MongoCredential.createScramSha1Credential(username, 
database, password.toCharArray());
+    } else if (authenticationType.equals(MONGODB_CR.getMechanismName())) {
+      credential = MongoCredential.createMongoCRCredential(username, database, 
password.toCharArray());
+    } else if (authenticationType.equals(GSSAPI.getMechanismName())) {
+      credential = MongoCredential.createGSSAPICredential(username);
+    } else if (authenticationType.equals(MONGODB_X509.getMechanismName())) {
+      credential = MongoCredential.createMongoX509Credential(username);
+    } else {
+      LOG.error("Error while initializing MongoDB store: Invalid 
Authentication type.");
+      throw new RuntimeException("Error while initializing MongoDB store: 
Invalid Authentication type.");
+    }
+    return credential;
+  }
+
   /**
    * Get reference to Mongo DB, using credentials if not null.
    */

http://git-wip-us.apache.org/repos/asf/gora/blob/5846373e/gora-mongodb/src/main/java/org/apache/gora/mongodb/store/MongoStoreParameters.java
----------------------------------------------------------------------
diff --git 
a/gora-mongodb/src/main/java/org/apache/gora/mongodb/store/MongoStoreParameters.java
 
b/gora-mongodb/src/main/java/org/apache/gora/mongodb/store/MongoStoreParameters.java
index 020dcf9..e69ec65 100644
--- 
a/gora-mongodb/src/main/java/org/apache/gora/mongodb/store/MongoStoreParameters.java
+++ 
b/gora-mongodb/src/main/java/org/apache/gora/mongodb/store/MongoStoreParameters.java
@@ -49,6 +49,12 @@ public class MongoStoreParameters {
    */
   public static final String PROP_MONGO_LOGIN = "gora.mongodb.login";
 
+
+  /**
+   * Property pointing to the authentication type to connect to the server
+   */
+  public static final String PROP_MONGO_AUTHENTICATION_TYPE = 
"gora.mongodb.authentication.type";
+
   /**
    * Property pointing to the secret to connect to the server
    */
@@ -77,6 +83,7 @@ public class MongoStoreParameters {
 
   private final String mappingFile;
   private final String servers;
+  private final String authenticationType;
   private final String dbname;
   private final String login;
   private final String secret;
@@ -87,15 +94,17 @@ public class MongoStoreParameters {
    * @param mappingFile
    * @param servers
    * @param dbname         Name of database to connect to.
+   * @param authenticationType Authentication type to login
    * @param login          Optionnal login for remote database.
    * @param secret         Optional secret for remote database.
    * @param readPreference
    * @param writeConcern   @return a {@link DB} instance from 
<tt>mongoClient</tt> or null if
    */
-  private MongoStoreParameters(String mappingFile, String servers, String 
dbname, String login, String secret, String readPreference, String 
writeConcern) {
+  private MongoStoreParameters(String mappingFile, String servers, String 
dbname, String authenticationType, String login, String secret, String 
readPreference, String writeConcern) {
     this.mappingFile = mappingFile;
     this.servers = servers;
     this.dbname = dbname;
+    this.authenticationType = authenticationType;
     this.login = login;
     this.secret = secret;
     this.readPreference = readPreference;
@@ -118,6 +127,10 @@ public class MongoStoreParameters {
     return login;
   }
 
+  public String getAuthenticationType() {
+    return authenticationType;
+  }
+
   public String getSecret() {
     return secret;
   }
@@ -134,6 +147,7 @@ public class MongoStoreParameters {
     // Prepare the configuration
     String vPropMappingFile = properties.getProperty(PROP_MAPPING_FILE, 
MongoStore.DEFAULT_MAPPING_FILE);
     String vPropMongoServers = properties.getProperty(PROP_MONGO_SERVERS);
+    String vPropMongoAuthenticationType = 
properties.getProperty(PROP_MONGO_AUTHENTICATION_TYPE);
     String vPropMongoLogin = properties.getProperty(PROP_MONGO_LOGIN);
     String vPropMongoSecret = properties.getProperty(PROP_MONGO_SECRET);
     String vPropMongoDb = properties.getProperty(PROP_MONGO_DB);
@@ -144,12 +158,13 @@ public class MongoStoreParameters {
       MongoStore.LOG.debug("Hadoop configuration has priority.");
       vPropMappingFile = conf.get(PROP_MAPPING_FILE, vPropMappingFile);
       vPropMongoServers = conf.get(PROP_MONGO_SERVERS, vPropMongoServers);
+      vPropMongoAuthenticationType = conf.get(PROP_MONGO_AUTHENTICATION_TYPE, 
vPropMongoAuthenticationType);
       vPropMongoLogin = conf.get(PROP_MONGO_LOGIN, vPropMongoLogin);
       vPropMongoSecret = conf.get(PROP_MONGO_SECRET, vPropMongoSecret);
       vPropMongoDb = conf.get(PROP_MONGO_DB, vPropMongoDb);
       vPropMongoRead = conf.get(PROP_MONGO_READPREFERENCE, vPropMongoRead);
       vPropMongoWrite = conf.get(PROP_MONGO_WRITECONCERN, vPropMongoWrite);
     }
-    return new MongoStoreParameters(vPropMappingFile, vPropMongoServers, 
vPropMongoDb, vPropMongoLogin, vPropMongoSecret, vPropMongoRead, 
vPropMongoWrite);
+    return new MongoStoreParameters(vPropMappingFile, vPropMongoServers, 
vPropMongoDb, vPropMongoAuthenticationType, vPropMongoLogin, vPropMongoSecret, 
vPropMongoRead, vPropMongoWrite);
   }
 }

Reply via email to