1+ using System . Web ;
2+
13namespace BotSharp . Plugin . MongoStorage ;
24
35public class MongoDbContext
@@ -6,6 +8,8 @@ public class MongoDbContext
68 private readonly string _mongoDbDatabaseName ;
79 private readonly string _collectionPrefix ;
810
11+ private const string DB_NAME_INDEX = "authSource" ;
12+
913 public MongoDbContext ( BotSharpDatabaseSettings dbSettings )
1014 {
1115 var mongoDbConnectionString = dbSettings . BotSharpMongoDb ;
@@ -16,14 +20,27 @@ public MongoDbContext(BotSharpDatabaseSettings dbSettings)
1620
1721 private string GetDatabaseName ( string mongoDbConnectionString )
1822 {
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 ) )
2125 {
22- databaseName = databaseName . Substring ( 0 , databaseName . IndexOf ( "?" , StringComparison . InvariantCultureIgnoreCase ) ) ;
26+ return dbName ;
2327 }
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 ;
2541 }
2642
43+
2744 private IMongoDatabase Database { get { return _mongoClient . GetDatabase ( _mongoDbDatabaseName ) ; } }
2845
2946 #region Indexes
0 commit comments