-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathMongoClientSettingsExtensions.cs
60 lines (49 loc) · 1.94 KB
/
MongoClientSettingsExtensions.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
using System;
using System.Linq;
using System.Text;
using MongoDB.Driver;
public static class MongoClientSettingsExtensions
{
public static string ToConnectionString(this MongoClientSettings settings)
{
var builder = new StringBuilder("mongodb://");
// Add username and password if present
if (
settings.Credential != null
&& !string.IsNullOrEmpty(settings.Credential.Username)
&& !string.IsNullOrEmpty(settings.Credential.Password)
)
{
builder.Append(Uri.EscapeDataString(settings.Credential.Username));
builder.Append(":");
builder.Append(Uri.EscapeDataString(settings.Credential.Password));
builder.Append("@");
}
// Add hosts
builder.Append(string.Join(",", settings.Servers.Select(s => s.ToString())));
// Add database name if present
if (settings.Credential != null && !string.IsNullOrEmpty(settings.Credential.Source))
{
builder.Append("/");
builder.Append(settings.Credential.Source);
}
// Add options
var options = new StringBuilder();
if (settings.UseTls)
options.Append("tls=true&");
if (!string.IsNullOrEmpty(settings.ReplicaSetName))
options.Append($"replicaSet={settings.ReplicaSetName}&");
if (settings.Credential != null && !string.IsNullOrEmpty(settings.Credential.Source))
options.Append($"authSource={settings.Credential.Source}&");
if (options.Length > 0)
{
builder.Append("?");
builder.Append(options.ToString().TrimEnd('&'));
}
return builder.ToString();
}
}
// Example usage:
// var settings = MongoClientSettings.FromUrl(new MongoUrl("mongodb://user:password@localhost:27017/mydb?authSource=admin"));
// string connectionString = settings.ToConnectionString();
// Console.WriteLine(connectionString);