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

liuhongyu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hertzbeat.git


The following commit(s) were added to refs/heads/master by this push:
     new 16f52d1b6 [bugfix] Allow anonymous access for MongoDB Atlas and 
standalone instances (#2704)
16f52d1b6 is described below

commit 16f52d1b6e892500ae7536b7af9a1fa50858a660
Author: Logic <[email protected]>
AuthorDate: Thu Sep 12 15:14:42 2024 +0800

    [bugfix] Allow anonymous access for MongoDB Atlas and standalone instances 
(#2704)
    
    Co-authored-by: shown <[email protected]>
    Co-authored-by: aias00 <[email protected]>
---
 .../collect/mongodb/MongodbSingleCollectImpl.java  | 29 +++++++++++++++-------
 1 file changed, 20 insertions(+), 9 deletions(-)

diff --git 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/mongodb/MongodbSingleCollectImpl.java
 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/mongodb/MongodbSingleCollectImpl.java
index c5ec9913f..90e501eac 100644
--- 
a/collector/src/main/java/org/apache/hertzbeat/collector/collect/mongodb/MongodbSingleCollectImpl.java
+++ 
b/collector/src/main/java/org/apache/hertzbeat/collector/collect/mongodb/MongodbSingleCollectImpl.java
@@ -30,6 +30,7 @@ import java.nio.charset.StandardCharsets;
 import java.util.Arrays;
 import java.util.Optional;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.hertzbeat.collector.collect.AbstractCollect;
 import org.apache.hertzbeat.collector.collect.common.cache.CacheIdentifier;
 import 
org.apache.hertzbeat.collector.collect.common.cache.ConnectionCommonCache;
@@ -95,8 +96,6 @@ public class MongodbSingleCollectImpl extends AbstractCollect 
{
         Assert.hasText(mongodbProtocol.getCommand(), "Mongodb Protocol command 
is required.");
         Assert.hasText(mongodbProtocol.getHost(), "Mongodb Protocol host is 
required.");
         Assert.hasText(mongodbProtocol.getPort(), "Mongodb Protocol port is 
required.");
-        Assert.hasText(mongodbProtocol.getUsername(), "Mongodb Protocol 
username is required.");
-        Assert.hasText(mongodbProtocol.getPassword(), "Mongodb Protocol 
password is required.");
     }
 
     @Override
@@ -192,18 +191,30 @@ public class MongodbSingleCollectImpl extends 
AbstractCollect {
         }
 
         String url = null;
-        if 
(CollectorConstants.MONGO_DB_ATLAS_MODEL.equals(mongodbProtocol.getModel())){
-            url = String.format("mongodb+srv://%s:%s@%s/%s?authSource=%s", 
mongodbProtocol.getUsername(),
-                    URLEncoder.encode(mongodbProtocol.getPassword(), 
StandardCharsets.UTF_8), mongodbProtocol.getHost(),
-                    mongodbProtocol.getDatabase(), 
mongodbProtocol.getAuthenticationDatabase());
+        if 
(CollectorConstants.MONGO_DB_ATLAS_MODEL.equals(mongodbProtocol.getModel())) {
+            if (StringUtils.isBlank(mongodbProtocol.getUsername()) && 
StringUtils.isBlank(mongodbProtocol.getPassword())) {
+                // Anonymous access for MongoDB Atlas
+                url = String.format("mongodb+srv://%s/%s", 
mongodbProtocol.getHost(), mongodbProtocol.getDatabase());
+            } else {
+                url = String.format("mongodb+srv://%s:%s@%s/%s?authSource=%s", 
mongodbProtocol.getUsername(),
+                        URLEncoder.encode(mongodbProtocol.getPassword(), 
StandardCharsets.UTF_8), mongodbProtocol.getHost(),
+                        mongodbProtocol.getDatabase(), 
mongodbProtocol.getAuthenticationDatabase());
+            }
         } else {
             // If the multiplexing fails, create a new connection to connect 
to mongodb
             // Passwords may contain special characters and need to be encoded 
using JS-like encodeURIComponent, which uses java URLEncoder
-            url = String.format("mongodb://%s:%s@%s:%s/%s?authSource=%s", 
mongodbProtocol.getUsername(),
-                    URLEncoder.encode(mongodbProtocol.getPassword(), 
StandardCharsets.UTF_8), mongodbProtocol.getHost(), mongodbProtocol.getPort(),
-                    mongodbProtocol.getDatabase(), 
mongodbProtocol.getAuthenticationDatabase());
+            if (StringUtils.isBlank(mongodbProtocol.getUsername()) && 
StringUtils.isBlank(mongodbProtocol.getPassword())) {
+                // Anonymous access for standalone MongoDB
+                url = String.format("mongodb://%s:%s/%s", 
mongodbProtocol.getHost(), mongodbProtocol.getPort(),
+                        mongodbProtocol.getDatabase());
+            } else {
+                url = String.format("mongodb://%s:%s@%s:%s/%s?authSource=%s", 
mongodbProtocol.getUsername(),
+                        URLEncoder.encode(mongodbProtocol.getPassword(), 
StandardCharsets.UTF_8), mongodbProtocol.getHost(), mongodbProtocol.getPort(),
+                        mongodbProtocol.getDatabase(), 
mongodbProtocol.getAuthenticationDatabase());
+            }
         }
 
+
         // Use the Mongo Client Settings builder to configure timeouts and 
other configurations
         MongoClientSettings settings = MongoClientSettings.builder()
                 .applyConnectionString(new ConnectionString(url))


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to