/// <summary> /// Tests database connection parameters. /// </summary> /// <param name="Form">Settings parameters provided in configuration form.</param> /// <param name="Save">If parameters should be saved, if OK.</param> /// <param name="Settings">Settings object for the plugin.</param> /// <exception cref="Exception">Exception, in case parameters are not correct.</exception> public async Task Test(Dictionary <string, object> Form, bool Save, object Settings) { if (!Form.TryGetValue("HostName", out object Obj) || !(Obj is string HostName) || !Form.TryGetValue("DatabaseName", out Obj) || !(Obj is string DatabaseName) || !Form.TryGetValue("DefaultCollection", out Obj) || !(Obj is string DefaultCollection) || !Form.TryGetValue("UserName", out Obj) || !(Obj is string UserName) || !Form.TryGetValue("Password", out Obj) || !(Obj is string Password) || !Form.TryGetValue("PortNumber", out Obj) || !(Obj is string PortNumberString) || !(Settings is MongoDBSettings MongoDBSettings)) { throw new BadRequestException(); } int?PortNumber; if (string.IsNullOrEmpty(PortNumberString)) { PortNumber = null; } else if (!int.TryParse(PortNumberString, out int i) || i <= 0 || i > 65535) { throw new BadRequestException("Invalid Port Number."); } else { PortNumber = i; } object MongoClientSettings = Types.CreateObject("MongoDB.Driver.MongoClientSettings"); Types.SetProperty(MongoClientSettings, "ApplicationName", Gateway.ApplicationName); Types.SetProperty(MongoClientSettings, "ConnectTimeout", TimeSpan.FromSeconds(5)); if (!string.IsNullOrEmpty(HostName)) { object MongoServerAddress; if (PortNumber.HasValue) { MongoServerAddress = Types.CreateObject("MongoDB.Driver.MongoServerAddress", HostName, PortNumber.Value); } else { MongoServerAddress = Types.CreateObject("MongoDB.Driver.MongoServerAddress", HostName); } Types.SetProperty(MongoClientSettings, "Server", MongoServerAddress); } if (!string.IsNullOrEmpty(MongoDBSettings.UserName)) { object MongoCredential = Types.CallStatic("MongoDB.Driver.MongoCredential", "CreateCredential", DatabaseName, UserName, Password); Types.SetProperty(MongoClientSettings, "Credential", MongoCredential); } object Client = Types.CreateObject("MongoDB.Driver.MongoClient", MongoClientSettings); Task Task = Types.Call(Client, "StartSessionAsync") as Task; await Task; Types.Call(Client, "GetDatabase", DatabaseName); if (Save) { MongoDBSettings.Host = HostName; MongoDBSettings.Port = PortNumber; MongoDBSettings.UserName = UserName; MongoDBSettings.Password = Password; MongoDBSettings.Database = DatabaseName; MongoDBSettings.DefaultCollection = DefaultCollection; } }