public OperationResult UpdateConnectionString(InitialSettingsModel initialSettingsModel) { if (!ModelState.IsValid) { return(new OperationResult(false, "Required fields are not filled")); } var inputPath = System.Web.Hosting.HostingEnvironment.MapPath("~/bin/Input.txt"); AdminTools adminTools; var sdkConnectionString = "Data Source=" + initialSettingsModel.ConnectionStringSdk.Source + ";Initial Catalog=" + initialSettingsModel.ConnectionStringSdk.Catalogue + ";" + initialSettingsModel.ConnectionStringSdk.Auth; var mainConnectionString = "Data Source=" + initialSettingsModel.ConnectionStringMain.Source + ";Initial Catalog=" + initialSettingsModel.ConnectionStringMain.Catalogue + ";" + initialSettingsModel.ConnectionStringMain.Auth; try { if (File.Exists(inputPath)) { //File.Delete(inputPath); //var fileStream = File.Create(inputPath); //fileStream.Dispose(); return(new OperationResult(false, "Connection string already exist")); } var fileStream = File.Create(inputPath); fileStream.Dispose(); File.WriteAllText(inputPath, sdkConnectionString); } catch (Exception exception) { Logger.Error(exception.Message); return(new OperationResult(false, "Could not write connection string in /bin/Input.txt")); } try { adminTools = new AdminTools(sdkConnectionString); } catch (Exception exception) { Logger.Error(exception.Message); return(new OperationResult(false, "SDK connection string is invalid")); } var configuration = WebConfigurationManager.OpenWebConfiguration("~"); var section = (ConnectionStringsSection)configuration.GetSection("connectionStrings"); section.ConnectionStrings["eFormMainConnection"].ConnectionString = mainConnectionString; try { configuration.Save(); ConfigurationManager.RefreshSection("connectionStrings"); var migrationConfiguration = new EformMigrationsConfiguration(mainConnectionString) { TargetDatabase = new DbConnectionInfo(mainConnectionString, "System.Data.SqlClient") }; var migrator = new DbMigrator(migrationConfiguration); migrator.Update(); var settingsHelper = new SettingsHelper(mainConnectionString); settingsHelper.CreateAdminUser(initialSettingsModel.AdminSetupModel); } catch (Exception exception) { Logger.Error(exception.Message); return(new OperationResult(false, "Main connection string is invalid")); } adminTools.DbSetup(initialSettingsModel.ConnectionStringSdk.Token); return(new OperationResult(true)); }
public OperationResult UpdateConnectionString(InitialSettingsModel initialSettingsModel) { if (!ModelState.IsValid) { return(new OperationResult(false, LocaleHelper.GetString("RequestFieldsAreNotFilled"))); } var sdkConnectionString = initialSettingsModel.ConnectionStringSdk.Source + ";Initial Catalog=" + initialSettingsModel.ConnectionStringSdk.Catalogue + ";" + initialSettingsModel.ConnectionStringSdk.Auth; var mainConnectionString = initialSettingsModel.ConnectionStringMain.Source + ";Initial Catalog=" + initialSettingsModel.ConnectionStringMain.Catalogue + ";" + initialSettingsModel.ConnectionStringMain.Auth; // Save SDK connection string var inputPath = System.Web.Hosting.HostingEnvironment.MapPath("~/bin/Input.txt"); if (inputPath == null) { return(new OperationResult(false, LocaleHelper.GetString("ErrorWhileCreatingFileForSDK"))); } AdminTools adminTools; try { if (File.Exists(inputPath)) { return(new OperationResult(false, LocaleHelper.GetString("ConnectionStringAlreadyExist"))); } var fileStream = File.Create(inputPath); fileStream.Dispose(); File.WriteAllText(inputPath, sdkConnectionString); } catch (Exception exception) { Logger.Error(exception.Message); return(new OperationResult(false, LocaleHelper.GetString("CouldNotWriteConnectionString"))); } try { adminTools = new AdminTools(sdkConnectionString); } catch (Exception exception) { Logger.Error(exception.Message); return(new OperationResult(false, LocaleHelper.GetString("SDKConnectionStringIsInvalid"))); } // Save Main connection string var configuration = WebConfigurationManager.OpenWebConfiguration("~"); var connStringsSection = (ConnectionStringsSection)configuration.GetSection("connectionStrings"); connStringsSection.ConnectionStrings["eFormMainConnection"].ConnectionString = mainConnectionString; // Save general app settings var section = (AppSettingsSection)configuration.GetSection("appSettings"); section.Settings["general:defaultLocale"].Value = initialSettingsModel.GeneralAppSetupSettingsModel.DefaultLocale; // Save settings and migrate DB try { configuration.Save(); ConfigurationManager.RefreshSection("connectionStrings"); var migrationConfiguration = new EformMigrationsConfiguration(mainConnectionString) { TargetDatabase = new DbConnectionInfo(mainConnectionString, "System.Data.SqlClient") }; var migrator = new DbMigrator(migrationConfiguration); migrator.Update(); var settingsHelper = new SettingsHelper(mainConnectionString); settingsHelper.CreateAdminUser(initialSettingsModel.AdminSetupModel); } catch (Exception exception) { Logger.Error(exception.Message); return(new OperationResult(false, LocaleHelper.GetString("MainConnectionStringIsInvalid"))); } // Setup SDK DB adminTools.DbSetup(initialSettingsModel.ConnectionStringSdk.Token); return(new OperationResult(true)); }
public async Task <OperationResult> UpdateConnectionString([FromBody] InitialSettingsModel initialSettingsModel) { return(await _settingsService.UpdateConnectionString(initialSettingsModel)); }
public async Task <OperationResult> UpdateConnectionString(InitialSettingsModel initialSettingsModel) { var customerNo = initialSettingsModel.GeneralAppSetupSettingsModel.CustomerNo.ToString(); var dbNamePrefix = ""; if (initialSettingsModel.ConnectionStringSdk.PrefixAllDatabases) { dbNamePrefix = "Microting_"; } var sdkDbName = $"{dbNamePrefix}{customerNo}_SDK"; var angularDbName = $"{dbNamePrefix}{customerNo}_Angular"; var sdkConnectionString = $"host= {initialSettingsModel.ConnectionStringSdk.Host};" + $"Database={sdkDbName};{initialSettingsModel.ConnectionStringSdk.Auth}" + $"port={initialSettingsModel.ConnectionStringSdk.Port};" + "Convert Zero Datetime = true;SslMode=none;"; var angularConnectionString = $"host= {initialSettingsModel.ConnectionStringSdk.Host};" + $"Database={angularDbName};{initialSettingsModel.ConnectionStringSdk.Auth}" + $"port={initialSettingsModel.ConnectionStringSdk.Port};" + "Convert Zero Datetime = true;SslMode=none;"; if (!string.IsNullOrEmpty(_connectionStringsSdk.Value.SdkConnection)) { return(new OperationResult(false, _localizationService.GetString("ConnectionStringAlreadyExist"))); } try { Log.LogEvent($"SettingsService.ConnectionStringExist: connection string is {sdkConnectionString}"); var adminTools = new AdminTools(sdkConnectionString); // Setup SDK DB await adminTools.DbSetup(initialSettingsModel.ConnectionStringSdk.Token); // var core = await _coreHelper.GetCore(); Core core = new Core(); await core.StartSqlOnly(sdkConnectionString); await core.SetSdkSetting(Settings.customerNo, customerNo); } catch (Exception exception) { _logger.LogError(exception.Message); _logger.LogError(exception.StackTrace); if (exception.InnerException != null) { return(new OperationResult(false, exception.Message + " - " + exception.InnerException.Message)); } return(new OperationResult(false, exception.Message)); //return new OperationResult(false, // _localizationService.GetString("SDKConnectionStringIsInvalid")); } // Migrate DB var dbContextOptionsBuilder = new DbContextOptionsBuilder <BaseDbContext>(); try { dbContextOptionsBuilder.UseMySql(angularConnectionString, new MariaDbServerVersion( new Version(10, 4, 0)), b => b.EnableRetryOnFailure()); await using var dbContext = new BaseDbContext(dbContextOptionsBuilder.Options); await dbContext.Database.MigrateAsync(); if (initialSettingsModel.AdminSetupModel != null) { // Seed admin and demo users await SeedAdminHelper.SeedAdmin(initialSettingsModel.AdminSetupModel, initialSettingsModel.GeneralAppSetupSettingsModel.DefaultLocale, dbContext); } } catch (Exception exception) { _logger.LogError(exception.Message); _logger.LogError(exception.StackTrace); //return new OperationResult(false, // _localizationService.GetString("MainConnectionStringIsInvalid")); if (exception.Message == "Could not create the user") { return(new OperationResult(false, _localizationService.GetString(exception.Message))); } if (exception.InnerException != null) { return(new OperationResult(false, exception.Message + " - " + exception.InnerException.Message)); } return(new OperationResult(false, exception.Message)); } try { // Generate SigningKey var key = new byte[32]; RandomNumberGenerator.Create().GetBytes(key); var signingKey = Convert.ToBase64String(key); // Update Database settings await using var dbContext = new BaseDbContext(dbContextOptionsBuilder.Options); await _tokenOptions.UpdateDb((options) => { options.SigningKey = signingKey; }, dbContext); await _applicationSettings.UpdateDb( options => { options.DefaultLocale = initialSettingsModel.GeneralAppSetupSettingsModel.DefaultLocale; }, dbContext); await _connectionStringsSdk.UpdateDb((options) => { options.SdkConnection = sdkConnectionString; }, dbContext); // Update connection string _connectionStrings.UpdateFile((options) => { options.DefaultConnection = angularConnectionString; }); } catch (Exception exception) { _logger.LogError(exception.Message); _logger.LogError(exception.StackTrace); return(exception.InnerException != null ? new OperationResult(false, exception.Message + " - " + exception.InnerException.Message) : new OperationResult(false, exception.Message)); //return new OperationResult(false, // _localizationService.GetString("CouldNotWriteConnectionString")); } Program.Restart(); return(new OperationResult(true)); }