1
+ using System . Web ;
2
+
1
3
namespace BotSharp . Plugin . MongoStorage ;
2
4
3
5
public class MongoDbContext
@@ -6,6 +8,8 @@ public class MongoDbContext
6
8
private readonly string _mongoDbDatabaseName ;
7
9
private readonly string _collectionPrefix ;
8
10
11
+ private const string DB_NAME_INDEX = "authSource" ;
12
+
9
13
public MongoDbContext ( BotSharpDatabaseSettings dbSettings )
10
14
{
11
15
var mongoDbConnectionString = dbSettings . BotSharpMongoDb ;
@@ -16,14 +20,27 @@ public MongoDbContext(BotSharpDatabaseSettings dbSettings)
16
20
17
21
private string GetDatabaseName ( string mongoDbConnectionString )
18
22
{
19
- var databaseName = mongoDbConnectionString . Substring ( mongoDbConnectionString . LastIndexOf ( "/" , StringComparison . InvariantCultureIgnoreCase ) + 1 ) ;
20
- if ( databaseName . Contains ( "?" ) )
23
+ var dbName = string . Empty ;
24
+ if ( ! Uri . TryCreate ( mongoDbConnectionString , UriKind . Absolute , out var conn ) )
21
25
{
22
- databaseName = databaseName . Substring ( 0 , databaseName . IndexOf ( "?" , StringComparison . InvariantCultureIgnoreCase ) ) ;
26
+ return dbName ;
23
27
}
24
- return databaseName ;
28
+
29
+ var query = HttpUtility . ParseQueryString ( conn . Query ) ;
30
+ var keys = query . AllKeys ?? [ ] ;
31
+
32
+ if ( keys . Contains ( DB_NAME_INDEX ) )
33
+ {
34
+ dbName = query [ DB_NAME_INDEX ] ;
35
+ }
36
+ else
37
+ {
38
+ dbName = conn . Segments ? . FirstOrDefault ( x => x != "/" ) ?? string . Empty ;
39
+ }
40
+ return dbName ;
25
41
}
26
42
43
+
27
44
private IMongoDatabase Database { get { return _mongoClient . GetDatabase ( _mongoDbDatabaseName ) ; } }
28
45
29
46
#region Indexes
0 commit comments