MongoDB Authentication and SSL 46/84946/1
authorGuobiao Mo <guobiaomo@chinamobile.com>
Wed, 10 Apr 2019 20:44:28 +0000 (13:44 -0700)
committerGuobiao Mo <guobiaomo@chinamobile.com>
Wed, 10 Apr 2019 20:44:28 +0000 (13:44 -0700)
Issue-ID: DCAEGEN2-1411
Change-Id: I881cc0e1dd3d7c012a08307bb289f7f97f9c96d5
Signed-off-by: Guobiao Mo <guobiaomo@chinamobile.com>
components/datalake-handler/feeder/src/assembly/scripts/init_db.sql
components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/domain/Db.java
components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/service/CouchbaseService.java
components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/service/MongodbService.java

index 83db9f1..48cb5f9 100644 (file)
@@ -22,6 +22,8 @@ CREATE TABLE `db` (
   `name` varchar(255) NOT NULL,\r
   `host` varchar(255) DEFAULT NULL,\r
   `port` int(11) DEFAULT NULL,\r
+  `database` varchar(255) DEFAULT NULL,\r
+  `encrypt` bit(1) DEFAULT NULL,\r
   `login` varchar(255) DEFAULT NULL,\r
   `pass` varchar(255) DEFAULT NULL,\r
   `property1` varchar(255) DEFAULT NULL,\r
@@ -41,9 +43,9 @@ CREATE TABLE `map_db_topic` (
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;\r
 \r
 \r
-insert into db (name,host,login,pass,property1) values ('Couchbase','dl_couchbase','dl','dl1234','dl');\r
+insert into db (name,host,login,pass,database) values ('Couchbase','dl_couchbase','dl','dl1234','datalake');\r
 insert into db (name,host) values ('Elasticsearch','dl_es');\r
-insert into db (name,host,port,property1) values ('MongoDB','dl_mongodb',27017,'datalake');\r
+insert into db (name,host,port,database) values ('MongoDB','dl_mongodb',27017,'datalake');\r
 insert into db (name,host) values ('Druid','dl_druid');\r
 \r
 \r
index 306af49..3fe14e3 100644 (file)
@@ -51,6 +51,9 @@ public class Db {
        private String login;
        private String pass;
 
+       private String database;
+       private Boolean encrypt;
+       
        private String property1;
        private String property2;
        private String property3;
index f74829e..a63a927 100644 (file)
@@ -68,7 +68,7 @@ public class CouchbaseService {
                Db couchbase = dbService.getCouchbase();
         Cluster cluster = CouchbaseCluster.create(couchbase.getHost());
         cluster.authenticate(couchbase.getLogin(), couchbase.getPass());
-        bucket = cluster.openBucket(couchbase.getProperty1());
+        bucket = cluster.openBucket(couchbase.getDatabase());
 
                log.info("Connect to Couchbase " + couchbase.getHost());
                
index 2b88921..9008fc9 100644 (file)
@@ -28,6 +28,7 @@ import java.util.Map;
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
 
+import org.apache.commons.lang3.StringUtils;
 import org.bson.Document;
 
 import org.json.JSONObject;
@@ -41,6 +42,10 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import com.mongodb.MongoClient;
+import com.mongodb.MongoClientOptions;
+import com.mongodb.MongoClientOptions.Builder;
+import com.mongodb.MongoCredential;
+import com.mongodb.ServerAddress;
 import com.mongodb.client.MongoCollection;
 import com.mongodb.client.MongoDatabase;
 
@@ -66,8 +71,31 @@ public class MongodbService {
        private void init() {
                Db mongodb = dbService.getMongoDB();
 
-               mongoClient = new MongoClient(mongodb.getHost(), mongodb.getPort());
-               database = mongoClient.getDatabase(mongodb.getProperty1());
+               String host = mongodb.getHost();
+
+               Integer port = mongodb.getPort();
+               if (port == null || port == 0) {
+                       port = 27017; //MongoDB default
+               }
+
+               String databaseName = mongodb.getDatabase();
+               String userName = mongodb.getLogin();
+               String password = mongodb.getPass();
+
+               MongoCredential credential = null;
+               if (StringUtils.isNoneBlank(userName) && StringUtils.isNoneBlank(password)) {
+                       credential = MongoCredential.createCredential(userName, databaseName, password.toCharArray());
+               }
+
+               Builder builder = MongoClientOptions.builder();
+               builder.serverSelectionTimeout(30000);//server selection timeout, in milliseconds
+               
+               //http://mongodb.github.io/mongo-java-driver/3.0/driver/reference/connecting/ssl/
+               builder.sslEnabled(Boolean.TRUE.equals(mongodb.getEncrypt()));// getEncrypt() can be null
+               MongoClientOptions options = builder.build();
+
+               mongoClient = new MongoClient(new ServerAddress(host, port), credential, options);
+               database = mongoClient.getDatabase(mongodb.getDatabase());
        }
 
        @PreDestroy
@@ -88,7 +116,7 @@ public class MongodbService {
                        documents.add(doc);
                }
 
-               String collectionName = topic.getName().replaceAll("[^a-zA-Z0-9]","");//remove - _ .
+               String collectionName = topic.getName().replaceAll("[^a-zA-Z0-9]", "");//remove - _ .
                MongoCollection<Document> collection = mongoCollectionMap.computeIfAbsent(collectionName, k -> database.getCollection(k));
                collection.insertMany(documents);