public async Task <OperationResult> LoadNavigationMenuOfPlugin(string pluginId) { var eformPlugin = await _dbContext.EformPlugins .FirstOrDefaultAsync(x => x.PluginId == pluginId); if (eformPlugin == null) { return(new OperationDataResult <InstalledPluginsModel>(false, _localizationService.GetString("PluginNotFound"))); } var plugin = Program.DisabledPlugins.FirstOrDefault(x => x.PluginId == pluginId); if (plugin == null) { return(new OperationDataResult <InstalledPluginsModel>(false, _localizationService.GetString("PluginNotFound"))); } var pluginMenu = plugin.GetNavigationMenu(_serviceProvider); // Load to database all navigation menu from plugin by id var pluginMenuItemsLoader = new PluginMenuItemsLoader(_dbContext, pluginId); pluginMenuItemsLoader.Load(pluginMenu); return(new OperationResult(true)); }
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> LoadNavigationMenuDuringStartProgram(string pluginId) { var eformPlugin = await _dbContext.EformPlugins .FirstOrDefaultAsync(x => x.PluginId == pluginId); if (eformPlugin == null) { return(new OperationDataResult <InstalledPluginsModel>(false, _localizationService.GetString("PluginNotFound"))); } var plugin = Program.EnabledPlugins.FirstOrDefault(x => x.PluginId == pluginId); if (plugin == null) { return(new OperationDataResult <InstalledPluginsModel>(false, _localizationService.GetString("PluginNotFound"))); } var pluginMenu = plugin.GetNavigationMenu(_serviceProvider); // get all menu templates from plugin var menuTemplatesFromPlugin = new List <PluginMenuTemplateModel>(); foreach (var pluginMenuItem in pluginMenu) { if (pluginMenuItem.Type == MenuItemTypeEnum.Link) { menuTemplatesFromPlugin.Add(pluginMenuItem.MenuTemplate); } if (pluginMenuItem.Type == MenuItemTypeEnum.Dropdown) { foreach (var childMenuItem in pluginMenuItem.ChildItems) { if (childMenuItem.Type == MenuItemTypeEnum.Link) { menuTemplatesFromPlugin.Add(childMenuItem.MenuTemplate); } } } } var menuTemplatesFromDatabase = _dbContext.MenuTemplates .Where(x => x.EformPluginId == eformPlugin.Id) .ToList(); if (menuTemplatesFromDatabase.Any()) { if (menuTemplatesFromPlugin.Count() != menuTemplatesFromDatabase.Count()) { foreach (var menuTemplateFromPlugin in menuTemplatesFromPlugin) { // get all templates name that in database var menuTemplatesFromDatabaseNames = menuTemplatesFromDatabase.Select(x => x.E2EId).ToList(); // if template from plugin is not contains in database if (!menuTemplatesFromDatabaseNames.Contains(menuTemplateFromPlugin.E2EId)) { // add to database menu templates from plugin var menuTemplateToDatabase = new MenuTemplate() { Name = menuTemplateFromPlugin.Name, E2EId = menuTemplateFromPlugin.E2EId, DefaultLink = menuTemplateFromPlugin.DefaultLink, EformPluginId = eformPlugin.Id, }; _dbContext.MenuTemplates.Add(menuTemplateToDatabase); _dbContext.SaveChanges(); foreach (var translation in menuTemplateFromPlugin.Translations) { var menuTemplateTranslation = new MenuTemplateTranslation { Language = translation.Language, LocaleName = translation.LocaleName, Name = translation.Name, MenuTemplateId = menuTemplateToDatabase.Id, }; _dbContext.MenuTemplateTranslations.Add(menuTemplateTranslation); _dbContext.SaveChanges(); } if (menuTemplateFromPlugin.Permissions.Any()) { foreach (var itemPermission in menuTemplateFromPlugin.Permissions) { PermissionType newPermissionType = null; var permissionType = _dbContext.PermissionTypes.FirstOrDefault(x => x.Name == itemPermission.PermissionTypeName); if (permissionType == null) { newPermissionType = new PermissionType { Name = itemPermission.PermissionTypeName, }; _dbContext.PermissionTypes.Add(newPermissionType); _dbContext.SaveChanges(); } var permission = new Permission { PermissionName = itemPermission.PermissionName, ClaimName = itemPermission.ClaimName, PermissionTypeId = newPermissionType == null ? permissionType.Id : newPermissionType.Id }; _dbContext.Permissions.Add(permission); _dbContext.SaveChanges(); var menuTemplatePermission = new MenuTemplatePermission { MenuTemplateId = menuTemplateToDatabase.Id, PermissionId = permission.Id, }; _dbContext.MenuTemplatePermissions.Add(menuTemplatePermission); _dbContext.SaveChanges(); } } } } } } else { // Load to database all navigation menu from plugin by id var pluginMenuItemsLoader = new PluginMenuItemsLoader(_dbContext, pluginId); pluginMenuItemsLoader.Load(pluginMenu); } return(new OperationResult(true)); }