This is an automated email from the ASF dual-hosted git repository.

exceptionfactory pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git


The following commit(s) were added to refs/heads/main by this push:
     new 48d684500f NIFI-14272 Refactored MongoDB Client Creation (#9723)
48d684500f is described below

commit 48d684500f6ad70f65bfd510db054590c5bc74a9
Author: Pierre Villard <[email protected]>
AuthorDate: Mon Feb 17 19:55:12 2025 +0100

    NIFI-14272 Refactored MongoDB Client Creation (#9723)
    
    Signed-off-by: David Handermann <[email protected]>
---
 .../apache/nifi/processors/mongodb/PutMongoIT.java |  2 +
 .../nifi/mongodb/MongoDBControllerService.java     | 61 ++++++++++------------
 2 files changed, 30 insertions(+), 33 deletions(-)

diff --git 
a/nifi-extension-bundles/nifi-mongodb-bundle/nifi-mongodb-processors/src/test/java/org/apache/nifi/processors/mongodb/PutMongoIT.java
 
b/nifi-extension-bundles/nifi-mongodb-bundle/nifi-mongodb-processors/src/test/java/org/apache/nifi/processors/mongodb/PutMongoIT.java
index 717c8de418..e1e6eeeb1f 100644
--- 
a/nifi-extension-bundles/nifi-mongodb-bundle/nifi-mongodb-processors/src/test/java/org/apache/nifi/processors/mongodb/PutMongoIT.java
+++ 
b/nifi-extension-bundles/nifi-mongodb-bundle/nifi-mongodb-processors/src/test/java/org/apache/nifi/processors/mongodb/PutMongoIT.java
@@ -411,6 +411,8 @@ public class PutMongoIT extends MongoWriteTestBase {
         MockFlowFile out = 
runner.getFlowFilesForRelationship(PutMongo.REL_SUCCESS).getFirst();
         out.assertContentEquals(bytes);
 
+        assertEquals(runner.getProvenanceEvents().get(0).getTransitUri(), 
MONGO_CONTAINER.getConnectionString());
+
         // verify 1 doc inserted into the collection
         assertEquals(1, collection.countDocuments());
         assertEquals(doc, collection.find().first());
diff --git 
a/nifi-extension-bundles/nifi-mongodb-bundle/nifi-mongodb-services/src/main/java/org/apache/nifi/mongodb/MongoDBControllerService.java
 
b/nifi-extension-bundles/nifi-mongodb-bundle/nifi-mongodb-services/src/main/java/org/apache/nifi/mongodb/MongoDBControllerService.java
index 56bf3fd008..17d05c6715 100644
--- 
a/nifi-extension-bundles/nifi-mongodb-bundle/nifi-mongodb-services/src/main/java/org/apache/nifi/mongodb/MongoDBControllerService.java
+++ 
b/nifi-extension-bundles/nifi-mongodb-bundle/nifi-mongodb-services/src/main/java/org/apache/nifi/mongodb/MongoDBControllerService.java
@@ -19,17 +19,11 @@ package org.apache.nifi.mongodb;
 
 import com.mongodb.ConnectionString;
 import com.mongodb.MongoClientSettings;
-import com.mongodb.client.MongoClient;
+import com.mongodb.MongoCredential;
 import com.mongodb.WriteConcern;
+import com.mongodb.client.MongoClient;
 import com.mongodb.client.MongoClients;
 import com.mongodb.client.MongoDatabase;
-
-import java.util.Arrays;
-import java.util.List;
-import java.net.URLEncoder;
-import java.nio.charset.StandardCharsets;
-import java.util.Map;
-import javax.net.ssl.SSLContext;
 import org.apache.nifi.annotation.documentation.CapabilityDescription;
 import org.apache.nifi.annotation.documentation.Tags;
 import org.apache.nifi.annotation.lifecycle.OnDisabled;
@@ -43,6 +37,12 @@ import org.apache.nifi.logging.ComponentLog;
 import org.apache.nifi.ssl.SSLContextProvider;
 import org.bson.Document;
 
+import javax.net.ssl.SSLContext;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
 @Tags({"mongo", "mongodb", "service"})
 @CapabilityDescription(
         "Provides a controller service that configures a connection to MongoDB 
and provides access to that connection to " +
@@ -53,7 +53,7 @@ public class MongoDBControllerService extends 
AbstractControllerService implemen
 
     @OnEnabled
     public void onEnabled(final ConfigurationContext context) {
-        this.uri = getURI(context);
+        this.uri = 
context.getProperty(URI).evaluateAttributeExpressions().getValue();
         this.mongoClient = createClient(context, this.mongoClient);
     }
 
@@ -90,8 +90,25 @@ public class MongoDBControllerService extends 
AbstractControllerService implemen
         }
 
         try {
-            final String uri = getURI(context);
-            final MongoClientSettings.Builder builder = getClientSettings(uri, 
sslContext);
+            final String uri = 
context.getProperty(URI).evaluateAttributeExpressions().getValue();
+            final String user = 
context.getProperty(DB_USER).evaluateAttributeExpressions().getValue();
+            final String passw = 
context.getProperty(DB_PASSWORD).evaluateAttributeExpressions().getValue();
+
+            final MongoClientSettings.Builder builder = 
MongoClientSettings.builder();
+            final ConnectionString cs = new ConnectionString(uri);
+
+            if (user != null && passw != null) {
+                final String database = cs.getDatabase() == null ? "admin" : 
cs.getDatabase();
+                final MongoCredential credential = 
MongoCredential.createCredential(user, database, passw.toCharArray());
+                builder.credential(credential);
+            }
+
+            if (sslContext != null) {
+                builder.applyToSslSettings(sslBuilder -> 
sslBuilder.enabled(true).context(sslContext));
+            }
+
+            builder.applyConnectionString(cs);
+
             final MongoClientSettings clientSettings = builder.build();
             return MongoClients.create(clientSettings);
         } catch (Exception e) {
@@ -100,17 +117,6 @@ public class MongoDBControllerService extends 
AbstractControllerService implemen
         }
     }
 
-    protected MongoClientSettings.Builder getClientSettings(final String uri, 
final SSLContext sslContext) {
-        final MongoClientSettings.Builder builder = 
MongoClientSettings.builder();
-        builder.applyConnectionString(new ConnectionString(uri));
-        if (sslContext != null) {
-            builder.applyToSslSettings(sslBuilder ->
-                    sslBuilder.enabled(true).context(sslContext)
-            );
-        }
-        return builder;
-    }
-
     @OnStopped
     public final void onStopped() {
         closeClient(mongoClient);
@@ -122,17 +128,6 @@ public class MongoDBControllerService extends 
AbstractControllerService implemen
         }
     }
 
-    protected String getURI(final ConfigurationContext context) {
-        final String uri = 
context.getProperty(URI).evaluateAttributeExpressions().getValue();
-        final String user = 
context.getProperty(DB_USER).evaluateAttributeExpressions().getValue();
-        final String passw = 
context.getProperty(DB_PASSWORD).evaluateAttributeExpressions().getValue();
-        if (!uri.contains("@") && user != null && passw != null) {
-            return uri.replaceFirst("://", "://" + URLEncoder.encode(user, 
StandardCharsets.UTF_8) + ":" + URLEncoder.encode(passw, 
StandardCharsets.UTF_8) + "@");
-        } else {
-            return uri;
-        }
-    }
-
     @Override
     public WriteConcern getWriteConcern() {
         WriteConcern writeConcern = null;

Reply via email to