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