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]