Exemplo n.º 1
0
        private static async Task InitializeSettings(IWebHost webHost, string[] args)
        {
            using var scope = webHost.Services.GetService <IServiceScopeFactory>().CreateScope();
            var settingsService = scope.ServiceProvider.GetRequiredService <ISettingsService>();
            var existsResult    = settingsService.ConnectionStringExist();

            if (!existsResult.Success)// do need to initialize database
            {
                // Find file
                var filePath = Path.Combine(Directory.GetCurrentDirectory(), "init.json");
                if (File.Exists(filePath))
                {
                    Log.LogEvent($"Try initialize from {filePath}");
                    // Get content
                    var startupContent = await File.ReadAllTextAsync(filePath);

                    var startup = JsonConvert.DeserializeObject <StartupInitializeModel>(startupContent);
                    // Apply settings
                    var updateConnectionResult =
                        await settingsService.UpdateConnectionString(startup.InitialSettings);

                    if (!updateConnectionResult.Success)
                    {
                        throw new Exception("Init error: " + updateConnectionResult.Message);
                    }

                    var adminSettingsUpdateModel = new AdminSettingsModel
                    {
                        S3SettingsModel       = startup.S3SettingsModel,
                        SMTPSettingsModel     = startup.SMTPSettingsModel,
                        SdkSettingsModel      = startup.SdkSettingsModel,
                        SendGridSettingsModel = startup.SendGridSettingsModel,
                        SwiftSettingsModel    = startup.SwiftSettingsModel,
                    };

                    var updateAdminSettingsResult =
                        await settingsService.UpdateAdminSettings(adminSettingsUpdateModel);

                    if (!updateAdminSettingsResult.Success)
                    {
                        throw new Exception("Init error: " + updateAdminSettingsResult.Message);
                    }

                    EnabledPlugins  = PluginHelper.GetPlugins(_defaultConnectionString);
                    DisabledPlugins = PluginHelper.GetDisablePlugins(_defaultConnectionString);

                    // Enable plugins
                    foreach (var pluginId in startup.PluginsList)
                    {
                        var pluginObject = DisabledPlugins.FirstOrDefault(x => x.PluginId == pluginId);
                        if (pluginObject != null)
                        {
                            var contextFactory = new BaseDbContextFactory();
                            await using var dbContext =
                                            contextFactory.CreateDbContext(new[] { _defaultConnectionString });
                            var eformPlugin = await dbContext.EformPlugins
                                              .Where(x => x.Status == (int)PluginStatus.Disabled)
                                              .FirstOrDefaultAsync(x => x.PluginId == pluginObject.PluginId);

                            if (eformPlugin != null)
                            {
                                eformPlugin.Status = (int)PluginStatus.Enabled;
                                dbContext.EformPlugins.Update(eformPlugin);
                                await dbContext.SaveChangesAsync();

                                var pluginMenu = pluginObject.GetNavigationMenu(scope.ServiceProvider);

                                // Load to database all navigation menu from plugin by id
                                var pluginMenuItemsLoader = new PluginMenuItemsLoader(dbContext, pluginId);

                                pluginMenuItemsLoader.Load(pluginMenu);
                            }
                        }
                    }
                    // not need because settingsService.UpdateAdminSettings call restart
                    // Restart(); // restart IF some plugins has been enabled
                }
                else if (args.Any())
                {
                    Log.LogEvent("Try initialize from args");
                    var defaultConfig = new ConfigurationBuilder()
                                        .AddCommandLine(args)
                                        .AddEnvironmentVariables(prefix: "ASPNETCORE_")
                                        .Build();
                    var firstName = defaultConfig.GetValue("FirstName", "");
                    var lastName  = defaultConfig.GetValue("LastName", "");
                    var email     = defaultConfig.GetValue("Email", "");
                    var password  = defaultConfig.GetValue("Password", "");
                    var token     = defaultConfig.GetValue("Token", "");


                    if (!string.IsNullOrEmpty(token) && !string.IsNullOrEmpty(firstName) &&
                        !string.IsNullOrEmpty(lastName) && !string.IsNullOrEmpty(email) &&
                        !string.IsNullOrEmpty(password))
                    {
                        var sdkConnectionString = _defaultConnectionString.Replace("_Angular", "_SDK");
                        // get customer number

                        const RegexOptions options = RegexOptions.Multiline | RegexOptions.CultureInvariant;
                        const string       pattern = @"[D|d]atabase=(\D*)(\d*)_Angular";
                        if (int.TryParse(Regex.Match(_defaultConnectionString, pattern, options).Groups[^ 1].Value,
                                         out var customerNumber))
                        {
                            var adminTools = new AdminTools(sdkConnectionString);
                            // Setup SDK DB
                            await adminTools.DbSetup(token);

                            var core = new Core();
                            await core.StartSqlOnly(sdkConnectionString);

                            await core.SetSdkSetting(Settings.customerNo, customerNumber.ToString());

                            // setup admin
                            var adminSetupModel = new AdminSetupModel()
                            {
                                DarkTheme = false,
                                FirstName = firstName,
                                LastName  = lastName,
                                Email     = email,
                                Password  = password,
                            };

                            var contextFactory = new BaseDbContextFactory();
                            await using var dbContext =
                                            contextFactory.CreateDbContext(new[] { _defaultConnectionString });
                            var connectionStringsSdk =
                                scope.ServiceProvider.GetRequiredService <IDbOptions <ConnectionStringsSdk> >();
                            await connectionStringsSdk.UpdateDb(
                                options => { options.SdkConnection = sdkConnectionString; }, dbContext);

                            await SeedAdminHelper.SeedAdmin(adminSetupModel,
                                                            "", dbContext);

                            Restart();
                        }
                    }
                }
            }
        }
        public async Task <OperationResult> UpdateAdminSettings(AdminSettingsModel adminSettingsModel)
        {
            try
            {
                var core = await _coreHelper.GetCore();

                if (adminSettingsModel.SMTPSettingsModel != null)
                {
                    await _emailSettings.UpdateDb((option) =>
                    {
                        option.SmtpHost    = adminSettingsModel.SMTPSettingsModel.Host;
                        option.SmtpPort    = int.Parse(adminSettingsModel.SMTPSettingsModel.Port);
                        option.Login       = adminSettingsModel.SMTPSettingsModel.Login;
                        option.Password    = adminSettingsModel.SMTPSettingsModel.Password;
                        option.SendGridKey = adminSettingsModel.SendGridSettingsModel.ApiKey;
                    }, _dbContext);
                }

                if (adminSettingsModel.HeaderSettingsModel != null)
                {
                    await _headerSettings.UpdateDb((option) =>
                    {
                        option.ImageLink            = adminSettingsModel.HeaderSettingsModel.ImageLink;
                        option.ImageLinkVisible     = adminSettingsModel.HeaderSettingsModel.ImageLinkVisible;
                        option.MainText             = adminSettingsModel.HeaderSettingsModel.MainText;
                        option.MainTextVisible      = adminSettingsModel.HeaderSettingsModel.MainTextVisible;
                        option.SecondaryText        = adminSettingsModel.HeaderSettingsModel.SecondaryText;
                        option.SecondaryTextVisible = adminSettingsModel.HeaderSettingsModel.SecondaryTextVisible;
                    }, _dbContext);
                }

                if (adminSettingsModel.LoginPageSettingsModel != null)
                {
                    await _loginPageSettings.UpdateDb((option) =>
                    {
                        option.ImageLink            = adminSettingsModel.LoginPageSettingsModel.ImageLink;
                        option.ImageLinkVisible     = adminSettingsModel.LoginPageSettingsModel.ImageLinkVisible;
                        option.MainText             = adminSettingsModel.LoginPageSettingsModel.MainText;
                        option.MainTextVisible      = adminSettingsModel.LoginPageSettingsModel.MainTextVisible;
                        option.SecondaryText        = adminSettingsModel.LoginPageSettingsModel.SecondaryText;
                        option.SecondaryTextVisible = adminSettingsModel.LoginPageSettingsModel.SecondaryTextVisible;
                    }, _dbContext);
                }

                if (!string.IsNullOrEmpty(adminSettingsModel.SiteLink))
                {
                    await core.SetSdkSetting(Settings.httpServerAddress, adminSettingsModel.SiteLink);
                }

                if (adminSettingsModel.SwiftSettingsModel != null)
                {
                    await core.SetSdkSetting(
                        Settings.swiftEnabled,
                        adminSettingsModel.SwiftSettingsModel.SwiftEnabled.ToString());

                    await core.SetSdkSetting(
                        Settings.swiftUserName,
                        adminSettingsModel.SwiftSettingsModel.SwiftUserName);

                    if (adminSettingsModel.SwiftSettingsModel.SwiftPassword != "SOMESECRETPASSWORD")
                    {
                        await core.SetSdkSetting(Settings.swiftPassword,
                                                 adminSettingsModel.SwiftSettingsModel.SwiftPassword);
                    }

                    await core.SetSdkSetting(Settings.swiftEndPoint,
                                             adminSettingsModel.SwiftSettingsModel.SwiftEndpoint);

                    await core.SetSdkSetting(Settings.keystoneEndPoint,
                                             adminSettingsModel.SwiftSettingsModel.KeystoneEndpoint);
                }

                if (adminSettingsModel.SdkSettingsModel != null)
                {
                    await core.SetSdkSetting(Settings.customerNo, adminSettingsModel.SdkSettingsModel.CustomerNo);

                    await core.SetSdkSetting(Settings.logLevel, adminSettingsModel.SdkSettingsModel.LogLevel);

                    await core.SetSdkSetting(Settings.logLimit, adminSettingsModel.SdkSettingsModel.LogLimit);

                    await core.SetSdkSetting(Settings.fileLocationPicture, adminSettingsModel.SdkSettingsModel.FileLocationPicture);

                    await core.SetSdkSetting(Settings.fileLocationPdf, adminSettingsModel.SdkSettingsModel.FileLocationPdf);

                    await core.SetSdkSetting(Settings.fileLocationJasper, adminSettingsModel.SdkSettingsModel.FileLocationReports);

                    await core.SetSdkSetting(Settings.httpServerAddress, adminSettingsModel.SdkSettingsModel.HttpServerAddress);
                }

                if (adminSettingsModel.S3SettingsModel != null)
                {
                    await core.SetSdkSetting(Settings.s3Enabled, adminSettingsModel.S3SettingsModel.S3Enabled.ToString());

                    await core.SetSdkSetting(Settings.s3AccessKeyId, adminSettingsModel.S3SettingsModel.S3AccessKeyId);

                    await core.SetSdkSetting(Settings.s3BucketName, adminSettingsModel.S3SettingsModel.S3BucketName);

                    if (adminSettingsModel.S3SettingsModel.S3SecrectAccessKey != "SOMESECRETPASSWORD")
                    {
                        await core.SetSdkSetting(Settings.s3SecrectAccessKey, adminSettingsModel.S3SettingsModel.S3SecrectAccessKey);
                    }

                    await core.SetSdkSetting(Settings.s3Endpoint, adminSettingsModel.S3SettingsModel.S3Endpoint);
                }

                return(new OperationResult(true, _localizationService.GetString("SettingsUpdatedSuccessfully")));
            }
            catch (Exception e)
            {
                _logger.LogError(e.Message);
                return(new OperationResult(false, _localizationService.GetString("CantUpdateSettingsInWebConfig")));
            }
        }
        public async Task <OperationResult> UpdateAdminSettings([FromBody] AdminSettingsModel adminSettingsModel)
        {
            await _settingsService.IntegrityCheck();

            return(await _settingsService.UpdateAdminSettings(adminSettingsModel));
        }
        public async Task <OperationDataResult <AdminSettingsModel> > GetAdminSettings()
        {
            try
            {
                var core = await _coreHelper.GetCore();

                var model = new AdminSettingsModel()
                {
                    SMTPSettingsModel = new SMTPSettingsModel()
                    {
                        Host     = _emailSettings.Value.SmtpHost,
                        Port     = _emailSettings.Value.SmtpPort.ToString(),
                        Login    = _emailSettings.Value.Login,
                        Password = _emailSettings.Value.Password,
                    },
                    SendGridSettingsModel = new SendGridSettingsModel()
                    {
                        ApiKey = _emailSettings.Value.SendGridKey,
                    },
                    HeaderSettingsModel = new HeaderSettingsModel()
                    {
                        ImageLink            = _headerSettings.Value.ImageLink,
                        ImageLinkVisible     = _headerSettings.Value.ImageLinkVisible,
                        MainText             = _headerSettings.Value.MainText,
                        MainTextVisible      = _headerSettings.Value.MainTextVisible,
                        SecondaryText        = _headerSettings.Value.SecondaryText,
                        SecondaryTextVisible = _headerSettings.Value.SecondaryTextVisible,
                    },
                    LoginPageSettingsModel = new LoginPageSettingsModel()
                    {
                        ImageLink            = _loginPageSettings.Value.ImageLink,
                        ImageLinkVisible     = _loginPageSettings.Value.ImageLinkVisible,
                        MainText             = _loginPageSettings.Value.MainText,
                        MainTextVisible      = _loginPageSettings.Value.MainTextVisible,
                        SecondaryText        = _loginPageSettings.Value.SecondaryText,
                        SecondaryTextVisible = _loginPageSettings.Value.SecondaryTextVisible,
                        IsSendGridExists     = !_emailSettings.Value.SendGridKey.IsNullOrEmpty(),
                    },
                    SwiftSettingsModel = new SwiftSettingsModel()
                    {
                        SwiftEnabled     = (core.GetSdkSetting(Settings.swiftEnabled).Result.ToLower() == "true"),
                        SwiftUserName    = await core.GetSdkSetting(Settings.swiftUserName),
                        SwiftPassword    = "******",
                        SwiftEndpoint    = await core.GetSdkSetting(Settings.swiftEndPoint),
                        KeystoneEndpoint = await core.GetSdkSetting(Settings.keystoneEndPoint)
                    },
                    S3SettingsModel = new S3SettingsModel()
                    {
                        S3Enabled          = (core.GetSdkSetting(Settings.s3Enabled).Result.ToLower() == "true"),
                        S3AccessKeyId      = await core.GetSdkSetting(Settings.s3AccessKeyId),
                        S3SecrectAccessKey = "SOMESECRETPASSWORD",
                        S3Endpoint         = await core.GetSdkSetting(Settings.s3Endpoint),
                        S3BucketName       = await core.GetSdkSetting(Settings.s3BucketName)
                    },
                    SdkSettingsModel = new SDKSettingsModel()
                    {
                        CustomerNo          = await core.GetSdkSetting(Settings.customerNo),
                        LogLevel            = await core.GetSdkSetting(Settings.logLevel),
                        LogLimit            = await core.GetSdkSetting(Settings.logLimit),
                        FileLocationPicture = await core.GetSdkSetting(Settings.fileLocationPicture),
                        FileLocationPdf     = await core.GetSdkSetting(Settings.fileLocationPdf),
                        FileLocationReports = await core.GetSdkSetting(Settings.fileLocationJasper),
                        HttpServerAddress   = await core.GetSdkSetting(Settings.httpServerAddress)
                    },
                    SiteLink        = await core.GetSdkSetting(Settings.httpServerAddress),
                    AssemblyVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString()
                };
                return(new OperationDataResult <AdminSettingsModel>(true, model));
            }
            catch (Exception e)
            {
                _logger.LogError(e.Message);
                return(new OperationDataResult <AdminSettingsModel>(false,
                                                                    _localizationService.GetString("CantObtainSettingsFromWebConfig")));
            }
        }