public void DoMigrations() { //if (String.IsNullOrEmpty(_config.SqlConnectionString.ProviderName) || // !_config.SqlConnectionString.ProviderName.Equals(SqlClient, StringComparison.OrdinalIgnoreCase)) //{ // return; //} var settingsManager = new DataSettingsManager(); try { //save settings // var connectionString = "mongodb://" + userNameandPassword + model.MongoDBServerName + "/" + model.MongoDBDatabaseName; var settings = new DataSettings { DataProvider = "mongodb", DataConnectionString = " mongodb://localhost:27017/chatdb" }; settingsManager.SaveSettings(settings); var dataProviderInstance = new MongoDBDataProviderManager(settingsManager.LoadSettings()).LoadDataProvider(); dataProviderInstance.InitDatabase(); //now resolve installation service var mongoDBDataProviderManager = new MongoDBDataProviderManager(settingsManager.LoadSettings()); var dataProviderInstall = mongoDBDataProviderManager.LoadDataProvider(); CreateIndexes(); InstallVersion(); } catch (Exception exception) { } }
private static void CreateAndSeedDatabase() { var dataProvider = EngineContext.Current.Resolve <IBopDataProvider>(); var dataSetting = DataSettingsManager.LoadSettings(reloadSettings: true); dataProvider.CreateDatabase(dataSetting.Collation); dataProvider.InitializeDatabase(); var installationService = EngineContext.Current.Resolve <IInstallationService>(); installationService.InstallRequiredData(dataSetting.Phone, dataSetting.Password); dataSetting.DatabaseInstalled = true; DataSettingsManager.SaveSettings(dataSetting); }
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (DataSettingsManager.DatabaseIsInstalled) { return; } if (!Enum.TryParse(_installationConfiguration["DataProvider"], out DataProviderType dataProviderType)) { throw new DataException("Wrong data provider type."); } var dataProvider = DataProviderManager.GetDataProvider(dataProviderType); var connectionString = _installationConfiguration["ConnectionString"]; if (connectionString.IsNullOrEmpty()) { throw new DataException("Connection string is wrong."); } DataSettingsManager.SaveSettings(new DataSettings() { DataProvider = dataProviderType, ConnectionString = connectionString }, _fileProvider); DataSettingsManager.LoadSettings(reloadSettings: true); if (!dataProvider.IsDatabaseExists()) { dataProvider.CreateDatabase(_installationConfiguration["Collation"]); dataProvider.InitializeDatabase(); _installationService = EngineContext.Current.Resolve <IInstallationService>(); _installationService.InstallRequiredData(); return; } //update schema dataProvider.InitializeDatabase(); }
public virtual ActionResult Index(InstallModel model) { if (DataSettingsHelper.DatabaseIsInstalled()) { return(RedirectToRoute("HomePage")); } //设置页面超时时间为5分钟 this.Server.ScriptTimeout = 300; if (model.DatabaseConnectionString != null) { model.DatabaseConnectionString = model.DatabaseConnectionString.Trim(); } foreach (var lang in _locService.GetAvailableLanguages()) { model.AvailableLanguages.Add(new SelectListItem { Value = Url.Action("ChangeLanguage", "Install", new { language = lang.Code }), Text = lang.Name, Selected = _locService.GetCurrentLanguage().Code == lang.Code, }); } model.DisableSampleDataOption = _config.DisableSampleDataDuringInstallation; //SQL Server if (model.DataProvider.Equals("sqlserver", StringComparison.InvariantCultureIgnoreCase)) { if (model.SqlConnectionInfo.Equals("sqlconnectioninfo_raw", StringComparison.InvariantCultureIgnoreCase)) { if (string.IsNullOrEmpty(model.DatabaseConnectionString)) { ModelState.AddModelError("", _locService.GetResource("ConnectionStringRequired")); } try { new SqlConnectionStringBuilder(model.DatabaseConnectionString); } catch { ModelState.AddModelError("", _locService.GetResource("ConnectionStringWrongFormat")); } } else { if (string.IsNullOrEmpty(model.SqlServerName)) { ModelState.AddModelError("", _locService.GetResource("SqlServerNameRequired")); } if (string.IsNullOrEmpty(model.SqlDatabaseName)) { ModelState.AddModelError("", _locService.GetResource("DatabaseNameRequired")); } if (model.SqlAuthenticationType.Equals("sqlauthentication", StringComparison.InvariantCultureIgnoreCase)) { if (string.IsNullOrEmpty(model.SqlServerUsername)) { ModelState.AddModelError("", _locService.GetResource("SqlServerUsernameRequired")); } if (string.IsNullOrEmpty(model.SqlServerPassword)) { ModelState.AddModelError("", _locService.GetResource("SqlServerPasswordRequired")); } } } } //验证是否有特定文件夹与文件操作权限 var dirsToCheck = FilePermissionHelper.GetDirectoriesWrite(); foreach (string dir in dirsToCheck) { if (!FilePermissionHelper.CheckPermissions(dir, false, true, true, false)) { ModelState.AddModelError("", string.Format(_locService.GetResource("ConfigureDirectoryPermissions"), WindowsIdentity.GetCurrent().Name, dir)); } } var filesToCheck = FilePermissionHelper.GetFilesWrite(); foreach (string file in filesToCheck) { if (!FilePermissionHelper.CheckPermissions(file, false, true, true, true)) { ModelState.AddModelError("", string.Format(_locService.GetResource("ConfigureFilePermissions"), WindowsIdentity.GetCurrent().Name, file)); } } if (ModelState.IsValid) { var webHelper = EngineContext.Current.Resolve <IWebHelper>(); var settingsManager = new DataSettingsManager(); try { string connectionString; if (model.DataProvider.Equals("sqlserver", StringComparison.InvariantCultureIgnoreCase)) { //SQL Server if (model.SqlConnectionInfo.Equals("sqlconnectioninfo_raw", StringComparison.InvariantCultureIgnoreCase)) { var sqlCsb = new SqlConnectionStringBuilder(model.DatabaseConnectionString); if (this.UseMars) { sqlCsb.MultipleActiveResultSets = true; } connectionString = sqlCsb.ToString(); } else { connectionString = CreateConnectionString(model.SqlAuthenticationType == "windowsauthentication", model.SqlServerName, model.SqlDatabaseName, model.SqlServerUsername, model.SqlServerPassword); } if (model.SqlServerCreateDatabase) { if (!SqlServerDatabaseExists(connectionString)) { //create database var collation = model.UseCustomCollation ? model.Collation : ""; var errorCreatingDatabase = CreateDatabase(connectionString, collation); if (!String.IsNullOrEmpty(errorCreatingDatabase)) { throw new Exception(errorCreatingDatabase); } } } else { if (!SqlServerDatabaseExists(connectionString)) { throw new Exception(_locService.GetResource("DatabaseNotExists")); } } } else { //SQL CE string databaseFileName = "Ransurotto.Db.sdf"; string databasePath = @"|DataDirectory|\" + databaseFileName; connectionString = "Data Source=" + databasePath + ";Persist Security Info=False"; string databaseFullPath = CommonHelper.MapPath("~/App_Data/") + databaseFileName; if (System.IO.File.Exists(databaseFullPath)) { System.IO.File.Delete(databaseFullPath); } } //保存数据库连接设定 var dataProvider = model.DataProvider; var settings = new DataSettings { DataProvider = dataProvider, DataConnectionString = connectionString }; settingsManager.SaveSettings(settings); //初始化数据提供商 var dataProviderInstance = EngineContext.Current.Resolve <BaseDataProviderManager>().LoadDataProvider(); dataProviderInstance.InitDatabase(); //添加数据 var installationService = EngineContext.Current.Resolve <IInstallationService>(); installationService.InstallData(model.AdminEmail, model.AdminPassword, model.InstallSampleData); //TODO 安装插件 //安装权限 var permissionProviders = new List <Type>(); permissionProviders.Add(typeof(StandardPermissionProvider)); foreach (var providerType in permissionProviders) { dynamic provider = Activator.CreateInstance(providerType); EngineContext.Current.Resolve <IPermissionService>().InstallPermissions(provider); } //清空缓存 DataSettingsHelper.ResetCache(); //重启应用程序 webHelper.RestartAppDomain(); //跳转至主页 return(RedirectToRoute("HomePage")); } catch (Exception ex) { DataSettingsHelper.ResetCache(); var cacheManager = EngineContext.Current.ContainerManager.Resolve <ICacheManager>("ransurotto_cache_static"); cacheManager.Clear(); settingsManager.SaveSettings(new DataSettings { DataProvider = null, DataConnectionString = null }); ModelState.AddModelError("", string.Format(_locService.GetResource("SetupFailed"), ex.Message)); } } return(View(model)); }
public ActionResult Index(InstallModel model) { if (DataSettingsHelper.DatabaseIsInstalled()) { return(RedirectToRoute("HomePage")); } //set page timeout to 5 minutes this.Server.ScriptTimeout = 300; if (model.DatabaseConnectionString != null) { model.DatabaseConnectionString = model.DatabaseConnectionString.Trim(); } string connectionString = ""; if (model.MongoDBConnectionInfo) { if (String.IsNullOrEmpty(model.DatabaseConnectionString)) { ModelState.AddModelError("", _locService.GetResource("ConnectionStringRequired")); } else { connectionString = model.DatabaseConnectionString; } } else { if (String.IsNullOrEmpty(model.MongoDBDatabaseName)) { ModelState.AddModelError("", _locService.GetResource("DatabaseNameRequired")); } if (String.IsNullOrEmpty(model.MongoDBServerName)) { ModelState.AddModelError("", _locService.GetResource("MongoDBNameRequired")); } string userNameandPassword = ""; if (!(String.IsNullOrEmpty(model.MongoDBUsername))) { userNameandPassword = model.MongoDBUsername + ":" + model.MongoDBPassword + "@"; } connectionString = "mongodb://" + userNameandPassword + model.MongoDBServerName + "/" + model.MongoDBDatabaseName; } var webHelper = EngineContext.Current.Resolve <IWebHelper>(); //validate permissions var dirsToCheck = FilePermissionHelper.GetDirectoriesWrite(); foreach (string dir in dirsToCheck) { if (!FilePermissionHelper.CheckPermissions(dir, false, true, true, false)) { ModelState.AddModelError("", string.Format(_locService.GetResource("ConfigureDirectoryPermissions"), WindowsIdentity.GetCurrent().Name, dir)); } } var filesToCheck = FilePermissionHelper.GetFilesWrite(); foreach (string file in filesToCheck) { if (!FilePermissionHelper.CheckPermissions(file, false, true, true, true)) { ModelState.AddModelError("", string.Format(_locService.GetResource("ConfigureFilePermissions"), WindowsIdentity.GetCurrent().Name, file)); } } if (ModelState.IsValid) { var settingsManager = new DataSettingsManager(); try { //save settings var dataProvider = model.DataProvider; var settings = new DataSettings { DataProvider = "mongodb", DataConnectionString = connectionString }; settingsManager.SaveSettings(settings); var dataProviderInstance = EngineContext.Current.Resolve <BaseDataProviderManager>().LoadDataProvider(); dataProviderInstance.InitDatabase(); var dataSettingsManager = new DataSettingsManager(); var dataProviderSettings = dataSettingsManager.LoadSettings(); //now resolve installation service var mongoDBDataProviderManager = new MongoDBDataProviderManager(dataSettingsManager.LoadSettings()); var dataProviderInstall = mongoDBDataProviderManager.LoadDataProvider(); var builder = new ContainerBuilder(); builder.Register(c => new MongoClient(dataProviderSettings.DataConnectionString)).As(typeof(IMongoClient)).SingleInstance(); builder.RegisterGeneric(typeof(MongoDBRepository <>)).As(typeof(IRepository <>)).InstancePerLifetimeScope(); builder.Update(EngineContext.Current.ContainerManager.Container); var installationService = EngineContext.Current.Resolve <IInstallationService>(); installationService.InstallData(model.AdminEmail, model.AdminPassword, model.InstallSampleData); //reset cache DataSettingsHelper.ResetCache(); //install plugins PluginManager.MarkAllPluginsAsUninstalled(); var pluginFinder = EngineContext.Current.Resolve <IPluginFinder>(); var plugins = pluginFinder.GetPlugins <IPlugin>(LoadPluginsMode.All) .ToList() .OrderBy(x => x.PluginDescriptor.Group) .ThenBy(x => x.PluginDescriptor.DisplayOrder) .ToList(); var pluginsIgnoredDuringInstallation = String.IsNullOrEmpty(_config.PluginsIgnoredDuringInstallation) ? new List <string>() : _config.PluginsIgnoredDuringInstallation .Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries) .Select(x => x.Trim()) .ToList(); foreach (var plugin in plugins) { if (pluginsIgnoredDuringInstallation.Contains(plugin.PluginDescriptor.SystemName)) { continue; } plugin.Install(); } //register default permissions var permissionProviders = new List <Type>(); permissionProviders.Add(typeof(StandardPermissionProvider)); foreach (var providerType in permissionProviders) { dynamic provider = Activator.CreateInstance(providerType); EngineContext.Current.Resolve <IPermissionService>().InstallPermissions(provider); } //restart application webHelper.RestartAppDomain(); //Redirect to home page return(RedirectToRoute("HomePage")); } catch (Exception exception) { //reset cache DataSettingsHelper.ResetCache(); //clear provider settings if something got wrong settingsManager.SaveSettings(new DataSettings { DataProvider = null, DataConnectionString = null }); ModelState.AddModelError("", string.Format(_locService.GetResource("SetupFailed"), exception.Message)); } } //prepare language list foreach (var lang in _locService.GetAvailableLanguages()) { model.AvailableLanguages.Add(new SelectListItem { Value = Url.Action("ChangeLanguage", "Install", new { language = lang.Code }), Text = lang.Name, Selected = _locService.GetCurrentLanguage().Code == lang.Code, }); } return(View(model)); }
public ActionResult Index(InstallModel model) { if (DataSettingsHelper.DatabaseIsInstalled()) { return(RedirectToAction("Index", "Home")); } //set page timeout to 5 minutes this.Server.ScriptTimeout = 300; if (model.DatabaseConnectionString != null) { model.DatabaseConnectionString = model.DatabaseConnectionString.Trim(); } //SQL Server if (model.DataProvider.Equals("sqlserver", StringComparison.InvariantCultureIgnoreCase)) { if (model.SqlConnectionInfo.Equals("sqlconnectioninfo_raw", StringComparison.InvariantCultureIgnoreCase)) { //raw connection string if (string.IsNullOrEmpty(model.DatabaseConnectionString)) { ModelState.AddModelError("", "A SQL connection string is required"); } try { //try to create connection string new SqlConnectionStringBuilder(model.DatabaseConnectionString); } catch { ModelState.AddModelError("", "Wrong SQL connection string format"); } } else { //values if (string.IsNullOrEmpty(model.SqlServerName)) { ModelState.AddModelError("", "SQL Server name is required"); } if (string.IsNullOrEmpty(model.SqlDatabaseName)) { ModelState.AddModelError("", "Database name is required"); } //authentication type if (model.SqlAuthenticationType.Equals("sqlauthentication", StringComparison.InvariantCultureIgnoreCase)) { //SQL authentication if (string.IsNullOrEmpty(model.SqlServerUsername)) { ModelState.AddModelError("", "SQL Username is required"); } if (string.IsNullOrEmpty(model.SqlServerPassword)) { ModelState.AddModelError("", "SQL Password is required"); } } } } //Consider granting access rights to the resource to the ASP.NET request identity. //ASP.NET has a base process identity //(typically {MACHINE}\ASPNET on IIS 5 or Network Service on IIS 6 and IIS 7, //and the configured application pool identity on IIS 7.5) that is used if the application is not impersonating. //If the application is impersonating via <identity impersonate="true"/>, //the identity will be the anonymous user (typically IUSR_MACHINENAME) or the authenticated request user. //validate permissions string rootDir = Server.MapPath("~/"); var dirsToCheck = new List <string>(); //dirsToCheck.Add(rootDir); dirsToCheck.Add(rootDir + "App_Data"); dirsToCheck.Add(rootDir + "bin"); dirsToCheck.Add(rootDir + "content"); dirsToCheck.Add(rootDir + "content\\images"); dirsToCheck.Add(rootDir + "content\\images\\thumbs"); dirsToCheck.Add(rootDir + "content\\images\\uploaded"); dirsToCheck.Add(rootDir + "content\\files\\exportimport"); dirsToCheck.Add(rootDir + "plugins"); dirsToCheck.Add(rootDir + "plugins\\bin"); foreach (string dir in dirsToCheck) { if (!checkPermissions(dir, false, true, true, true)) { ModelState.AddModelError("", string.Format("The '{0}' account is not granted with Modify permission on folder '{1}'. Please configure these permissions.", WindowsIdentity.GetCurrent().Name, dir)); } } var filesToCheck = new List <string>(); filesToCheck.Add(rootDir + "Global.asax"); filesToCheck.Add(rootDir + "web.config"); filesToCheck.Add(rootDir + "App_Data\\InstalledPlugins.txt"); filesToCheck.Add(rootDir + "App_Data\\Settings.txt"); foreach (string file in filesToCheck) { if (!checkPermissions(file, false, true, true, true)) { ModelState.AddModelError("", string.Format("The '{0}' account is not granted with Modify permission on file '{1}'. Please configure these permissions.", WindowsIdentity.GetCurrent().Name, file)); } } if (ModelState.IsValid) { var settingsManager = new DataSettingsManager(); try { string connectionString = null; if (model.DataProvider.Equals("sqlserver", StringComparison.InvariantCultureIgnoreCase)) { //SQL Server if (model.SqlConnectionInfo.Equals("sqlconnectioninfo_raw", StringComparison.InvariantCultureIgnoreCase)) { //raw connection string connectionString = model.DatabaseConnectionString; } else { //values connectionString = createConnectionString(model.SqlAuthenticationType == "windowsauthentication", model.SqlServerName, model.SqlDatabaseName, model.SqlServerUsername, model.SqlServerPassword); } if (model.SqlServerCreateDatabase) { if (!sqlServerDatabaseExists(connectionString)) { //create database var errorCreatingDatabase = createDatabase(connectionString); if (!String.IsNullOrEmpty(errorCreatingDatabase)) { throw new Exception(errorCreatingDatabase); } else { //Database cannot be created sometimes. Weird! Seems to be Entity Framework issue //that's just wait 3 seconds Thread.Sleep(3000); } } } else { //check whether database exists if (!sqlServerDatabaseExists(connectionString)) { throw new Exception("Database does not exist or you don't have permissions to connect to it"); } } } else { //SQL CE string databaseFileName = "Nop.Db.sdf"; string databasePath = @"|DataDirectory|\" + databaseFileName; connectionString = "Data Source=" + databasePath + ";Persist Security Info=False"; //drop database if exists string databaseFullPath = HostingEnvironment.MapPath("~/App_Data/") + databaseFileName; if (System.IO.File.Exists(databaseFullPath)) { System.IO.File.Delete(databaseFullPath); } } //save settings var dataProvider = model.DataProvider; var settings = new DataSettings() { DataProvider = dataProvider, DataConnectionString = connectionString }; settingsManager.SaveSettings(settings); //init data provider var dataProviderInstance = EngineContext.Current.Resolve <BaseDataProviderManager>().LoadDataProvider(); dataProviderInstance.InitDatabase(); //now resolve installation service var installationService = EngineContext.Current.Resolve <IInstallationService>(); installationService.InstallData(model.AdminEmail, model.AdminPassword, model.InstallSampleData); //reset cache DataSettingsHelper.ResetCache(); //install plugins PluginManager.MarkAllPluginsAsUninstalled(); var pluginFinder = EngineContext.Current.Resolve <IPluginFinder>(); var plugins = pluginFinder.GetPlugins <IPlugin>(false) .ToList() .OrderBy(x => x.PluginDescriptor.Group) .ThenBy(x => x.PluginDescriptor.DisplayOrder) .ToList(); foreach (var plugin in plugins) { plugin.Install(); } //register default permissions //var permissionProviders = EngineContext.Current.Resolve<ITypeFinder>().FindClassesOfType<IPermissionProvider>(); var permissionProviders = new List <Type>(); permissionProviders.Add(typeof(StandardPermissionProvider)); foreach (var providerType in permissionProviders) { dynamic provider = Activator.CreateInstance(providerType); EngineContext.Current.Resolve <IPermissionService>().InstallPermissions(provider); } //restart application var webHelper = EngineContext.Current.Resolve <IWebHelper>(); webHelper.RestartAppDomain(); //Redirect to home page return(RedirectToAction("Index", "Home")); } catch (Exception exception) { //reset cache DataSettingsHelper.ResetCache(); //clear provider settings if something got wrong settingsManager.SaveSettings(new DataSettings { DataProvider = null, DataConnectionString = null }); ModelState.AddModelError("", "Setup failed: " + exception); } } return(View(model)); }
public ActionResult Index(InstallModel model) { if (DataSettingsHelper.DatabaseIsInstalled()) { return(RedirectToRoute("HomePage")); } //set page timeout to 5 minutes this.Server.ScriptTimeout = 300; if (model.DatabaseConnectionString != null) { model.DatabaseConnectionString = model.DatabaseConnectionString.Trim(); } //prepare language list foreach (var lang in _locService.GetAvailableLanguages()) { model.AvailableLanguages.Add(new SelectListItem { Value = Url.Action("ChangeLanguage", "Install", new { language = lang.Code }), Text = lang.Name, Selected = _locService.GetCurrentLanguage().Code == lang.Code, }); } string connectionString = ""; if (model.MongoDBConnectionInfo) { if (String.IsNullOrEmpty(model.DatabaseConnectionString)) { ModelState.AddModelError("", _locService.GetResource("ConnectionStringRequired")); } else { connectionString = model.DatabaseConnectionString; } } else { if (String.IsNullOrEmpty(model.MongoDBDatabaseName)) { ModelState.AddModelError("", _locService.GetResource("DatabaseNameRequired")); } if (String.IsNullOrEmpty(model.MongoDBServerName)) { ModelState.AddModelError("", _locService.GetResource("MongoDBNameRequired")); } string userNameandPassword = ""; if (!(String.IsNullOrEmpty(model.MongoDBUsername))) { userNameandPassword = model.MongoDBUsername + ":" + model.MongoDBPassword + "@"; } connectionString = "mongodb://" + userNameandPassword + model.MongoDBServerName + "/" + model.MongoDBDatabaseName; } if (!String.IsNullOrEmpty(connectionString)) { /* * try * { * var client = new MongoClient(connectionString); * var databases = client.ListDatabasesAsync().Result; * } * catch (Exception ex) * { * * if (ex.InnerException == null) * ModelState.AddModelError("", ex.Message); * else * { * ModelState.AddModelError("", ex.InnerException.Message); * } * } */ } //Consider granting access rights to the resource to the ASP.NET request identity. //ASP.NET has a base process identity //(typically {MACHINE}\ASPNET on IIS 5 or Network Service on IIS 6 and IIS 7, //and the configured application pool identity on IIS 7.5) that is used if the application is not impersonating. //If the application is impersonating via <identity impersonate="true"/>, //the identity will be the anonymous user (typically IUSR_MACHINENAME) or the authenticated request user. var webHelper = EngineContext.Current.Resolve <IWebHelper>(); //validate permissions var dirsToCheck = FilePermissionHelper.GetDirectoriesWrite(webHelper); foreach (string dir in dirsToCheck) { if (!FilePermissionHelper.CheckPermissions(dir, false, true, true, false)) { ModelState.AddModelError("", string.Format(_locService.GetResource("ConfigureDirectoryPermissions"), WindowsIdentity.GetCurrent().Name, dir)); } } var filesToCheck = FilePermissionHelper.GetFilesWrite(webHelper); foreach (string file in filesToCheck) { if (!FilePermissionHelper.CheckPermissions(file, false, true, true, true)) { ModelState.AddModelError("", string.Format(_locService.GetResource("ConfigureFilePermissions"), WindowsIdentity.GetCurrent().Name, file)); } } if (ModelState.IsValid) { var settingsManager = new DataSettingsManager(); try { //save settings var dataProvider = model.DataProvider; var settings = new DataSettings { DataProvider = "mongodb", DataConnectionString = connectionString }; settingsManager.SaveSettings(settings); //DataSettingsHelper.InitConnectionString(); var dataProviderInstance = EngineContext.Current.Resolve <BaseDataProviderManager>().LoadDataProvider(); dataProviderInstance.InitDatabase(); //now resolve installation service var installationService = EngineContext.Current.Resolve <IInstallationService>(); installationService.InstallData(model.AdminEmail, model.AdminPassword, model.InstallSampleData); //reset cache DataSettingsHelper.ResetCache(); //install plugins PluginManager.MarkAllPluginsAsUninstalled(); var pluginFinder = EngineContext.Current.Resolve <IPluginFinder>(); var plugins = pluginFinder.GetPlugins <IPlugin>(LoadPluginsMode.All) .ToList() .OrderBy(x => x.PluginDescriptor.Group) .ThenBy(x => x.PluginDescriptor.DisplayOrder) .ToList(); var pluginsIgnoredDuringInstallation = String.IsNullOrEmpty(_config.PluginsIgnoredDuringInstallation) ? new List <string>() : _config.PluginsIgnoredDuringInstallation .Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries) .Select(x => x.Trim()) .ToList(); foreach (var plugin in plugins) { if (pluginsIgnoredDuringInstallation.Contains(plugin.PluginDescriptor.SystemName)) { continue; } plugin.Install(); } //register default permissions var permissionProviders = new List <Type>(); permissionProviders.Add(typeof(StandardPermissionProvider)); foreach (var providerType in permissionProviders) { dynamic provider = Activator.CreateInstance(providerType); EngineContext.Current.Resolve <IPermissionService>().InstallPermissions(provider); } //restart application webHelper.RestartAppDomain(); //Redirect to home page return(RedirectToRoute("HomePage")); } catch (Exception exception) { //reset cache DataSettingsHelper.ResetCache(); //clear provider settings if something got wrong settingsManager.SaveSettings(new DataSettings { DataProvider = null, DataConnectionString = null }); ModelState.AddModelError("", string.Format(_locService.GetResource("SetupFailed"), exception.Message)); } } return(View(model)); }
public virtual IActionResult Index(InstallModel model) { if (DataSettingsManager.DatabaseIsInstalled) { return(RedirectToRoute("HomePage")); } if (model.DatabaseConnectionString != null) { model.DatabaseConnectionString = model.DatabaseConnectionString.Trim(); } model.DisableSampleDataOption = _config.DisableSampleDataDuringInstallation; if (model.DataProvider == DataProviderType.SqlServer) { if (model.SqlConnectionInfo.Equals("sqlconnectioninfo_raw", StringComparison.InvariantCultureIgnoreCase)) { //raw connection string if (string.IsNullOrEmpty(model.DatabaseConnectionString)) { ModelState.AddModelError("", "A SQL connection string is required"); } try { new SqlConnectionStringBuilder(model.DatabaseConnectionString); } catch { ModelState.AddModelError("", "Wrong SQL connection string format"); } } else { //values if (string.IsNullOrEmpty(model.SqlServerName)) { ModelState.AddModelError("", "SQL Server name is required"); } if (string.IsNullOrEmpty(model.SqlDatabaseName)) { ModelState.AddModelError("", "Database name is required"); } //authentication type if (model.SqlAuthenticationType.Equals("sqlauthentication", StringComparison.InvariantCultureIgnoreCase)) { //SQL authentication if (string.IsNullOrEmpty(model.SqlServerUsername)) { ModelState.AddModelError("", "SQL Username is required"); } if (string.IsNullOrEmpty(model.SqlServerPassword)) { ModelState.AddModelError("", "SQL Password is required"); } } } } var webHelper = EngineContext.Current.Resolve <IWebHelper>(); //validate permissions var dirsToCheck = FilePermissionHelper.GetDirectoriesWrite(); foreach (var dir in dirsToCheck) { if (!FilePermissionHelper.CheckPermissions(dir, false, true, true, false)) { ModelState.AddModelError("", $"The '{WindowsIdentity.GetCurrent().Name}' account is not granted with Modify permission on folder '{dir}'. Please configure these permissions."); } } var filesToCheck = FilePermissionHelper.GetFilesWrite(); foreach (var file in filesToCheck) { if (!FilePermissionHelper.CheckPermissions(file, false, true, true, true)) { ModelState.AddModelError("", $"The '{WindowsIdentity.GetCurrent().Name}' account is not granted with Modify permission on file '{file}'. Please configure these permissions."); } } if (ModelState.IsValid) { try { var connectionString = string.Empty; if (model.DataProvider == DataProviderType.SqlServer) { if (model.SqlConnectionInfo.Equals("sqlconnectioninfo_raw", StringComparison.InvariantCultureIgnoreCase)) { //raw connection string var sqlStringBuilder = new SqlConnectionStringBuilder(model.DatabaseConnectionString); if (UseMars) { sqlStringBuilder.MultipleActiveResultSets = true; } connectionString = sqlStringBuilder.ToString(); } else { //values connectionString = CreateConnectionString( model.SqlAuthenticationType == "windowsauthentication", model.SqlServerName, model.SqlDatabaseName, model.SqlServerUsername, model.SqlServerPassword); } if (model.SqlServerCreateDatabase) { if (!SqlServerDatabaseExists(connectionString)) { var collation = model.UseCustomCollation ? model.Collation : ""; var errorCreatingDatabase = CreateDatabase(connectionString, collation); if (!string.IsNullOrEmpty(errorCreatingDatabase)) { throw new Exception(errorCreatingDatabase); } } } else { if (!SqlServerDatabaseExists(connectionString)) { throw new Exception("Database does not exist or you don't have permissions to connect to it"); } } } DataSettingsManager.SaveSettings(new DataSettings { DataProvider = model.DataProvider, DataConnectionString = connectionString }, _fileProvider); //initialize database EngineContext.Current.Resolve <IDataProvider>().InitializeDatabase(); var installationService = EngineContext.Current.Resolve <IInstallationService>(); installationService.InstallData(model.AdminEmail, model.AdminUsername, model.AdminPassword, model.InstallSampleData); DataSettingsManager.ResetCache(); //prepare plugins to install var pluginService = EngineContext.Current.Resolve <IPluginService>(); pluginService.ClearInstalledPluginsList(); var pluginsIgnoredDuringInstallation = new List <string>(); if (!string.IsNullOrEmpty(_config.PluginsIgnoredDuringInstallation)) { pluginsIgnoredDuringInstallation = _config.PluginsIgnoredDuringInstallation .Split(',', StringSplitOptions.RemoveEmptyEntries).Select(pluginName => pluginName.Trim()) .ToList(); } var plugins = pluginService.GetPluginDescriptors <IPlugin>(LoadPluginsMode.All) .Where(pluginDescriptor => !pluginsIgnoredDuringInstallation.Contains(pluginDescriptor.SystemName)) .OrderBy(pluginDescriptor => pluginDescriptor.Group).ToList(); foreach (var plugin in plugins) { pluginService.PreparePluginToInstall(plugin.SystemName); } //register default permissions var permissionProviders = new List <Type> { typeof(StandardPermissionProvider) }; foreach (var providerType in permissionProviders) { var provider = (IPermissionProvider)Activator.CreateInstance(providerType); EngineContext.Current.Resolve <IPermissionService>().InstallPermissionsAsync(provider) .GetAwaiter().GetResult(); } webHelper.RestartAppDomain(); //Redirect to home page return(RedirectToRoute("HomePage")); } catch (Exception exception) { //reset cache DataSettingsManager.ResetCache(); var cacheManager = EngineContext.Current.Resolve <IStaticCacheManager>(); cacheManager.Clear(); //clear provider settings if something got wrong DataSettingsManager.SaveSettings(new DataSettings(), _fileProvider); ModelState.AddModelError("", $"Setup failed: {exception.Message}"); } } return(View(model)); }
public virtual IActionResult Index(InstallModel model) { if (DataSettingsManager.DatabaseIsInstalled) { return(RedirectToRoute("Homepage")); } //prepare language list foreach (var lang in _locService.GetAvailableLanguages()) { model.AvailableLanguages.Add(new SelectListItem { Value = Url.Action("ChangeLanguage", "Install", new { language = lang.Code }), Text = lang.Name, Selected = _locService.GetCurrentLanguage().Code == lang.Code }); model.AvailableDataProviders = _locService.GetAvailableProviderTypes()?.ToList(); } model.DisableSampleDataOption = _config.DisableSampleDataDuringInstallation; //Consider granting access rights to the resource to the ASP.NET request identity. //ASP.NET has a base process identity //(typically {MACHINE}\ASPNET on IIS 5 or Network Service on IIS 6 and IIS 7, //and the configured application pool identity on IIS 7.5) that is used if the application is not impersonating. //If the application is impersonating via <identity impersonate="true"/>, //the identity will be the anonymous user (typically IUSR_MACHINENAME) or the authenticated request user. var webHelper = EngineContext.Current.Resolve <IWebHelper>(); //validate permissions var dirsToCheck = FilePermissionHelper.GetDirectoriesWrite(); foreach (var dir in dirsToCheck) { if (!FilePermissionHelper.CheckPermissions(dir, false, true, true, false)) { ModelState.AddModelError(string.Empty, string.Format(_locService.GetResource("ConfigureDirectoryPermissions"), CurrentOSUser.FullName, dir)); } } var filesToCheck = FilePermissionHelper.GetFilesWrite(); foreach (var file in filesToCheck) { if (!_fileProvider.FileExists(file)) { continue; } if (!FilePermissionHelper.CheckPermissions(file, false, true, true, true)) { ModelState.AddModelError(string.Empty, string.Format(_locService.GetResource("ConfigureFilePermissions"), CurrentOSUser.FullName, file)); } } if (!ModelState.IsValid) { return(View(model)); } try { var dataProvider = DataProviderManager.GetDataProvider(model.DataProvider); var connectionString = model.ConnectionStringRaw ? model.ConnectionString : dataProvider.BuildConnectionString(model); if (string.IsNullOrEmpty(connectionString)) { throw new Exception(_locService.GetResource("ConnectionStringWrongFormat")); } DataSettingsManager.SaveSettings(new DataSettings { DataProvider = model.DataProvider, ConnectionString = connectionString }, _fileProvider); DataSettingsManager.LoadSettings(reloadSettings: true); if (model.CreateDatabaseIfNotExists) { try { dataProvider.CreateDatabase(model.Collation); } catch (Exception ex) { throw new Exception(string.Format(_locService.GetResource("DatabaseCreationError"), ex.Message)); } } else { //check whether database exists if (!dataProvider.IsDatabaseExists()) { throw new Exception(_locService.GetResource("DatabaseNotExists")); } } dataProvider.InitializeDatabase(); //now resolve installation service var installationService = EngineContext.Current.Resolve <IInstallationService>(); installationService.InstallRequiredData(model.AdminEmail, model.AdminPassword); if (model.InstallSampleData) { installationService.InstallSampleData(model.AdminEmail); } //prepare plugins to install var pluginService = EngineContext.Current.Resolve <IPluginService>(); pluginService.ClearInstalledPluginsList(); var pluginsIgnoredDuringInstallation = new List <string>(); if (!string.IsNullOrEmpty(_config.PluginsIgnoredDuringInstallation)) { pluginsIgnoredDuringInstallation = _config.PluginsIgnoredDuringInstallation .Split(',', StringSplitOptions.RemoveEmptyEntries).Select(pluginName => pluginName.Trim()).ToList(); } var plugins = pluginService.GetPluginDescriptors <IPlugin>(LoadPluginsMode.All) .Where(pluginDescriptor => !pluginsIgnoredDuringInstallation.Contains(pluginDescriptor.SystemName)) .OrderBy(pluginDescriptor => pluginDescriptor.Group).ThenBy(pluginDescriptor => pluginDescriptor.DisplayOrder) .ToList(); foreach (var plugin in plugins) { pluginService.PreparePluginToInstall(plugin.SystemName, checkDependencies: false); } //register default permissions //var permissionProviders = EngineContext.Current.Resolve<ITypeFinder>().FindClassesOfType<IPermissionProvider>(); var permissionProviders = new List <Type> { typeof(StandardPermissionProvider) }; foreach (var providerType in permissionProviders) { var provider = (IPermissionProvider)Activator.CreateInstance(providerType); EngineContext.Current.Resolve <IPermissionService>().InstallPermissions(provider); } //restart application webHelper.RestartAppDomain(); //Redirect to home page return(RedirectToRoute("Homepage")); } catch (Exception exception) { //reset cache DataSettingsManager.ResetCache(); var cacheManager = EngineContext.Current.Resolve <IStaticCacheManager>(); cacheManager.Clear(); //clear provider settings if something got wrong DataSettingsManager.SaveSettings(new DataSettings(), _fileProvider); ModelState.AddModelError(string.Empty, string.Format(_locService.GetResource("SetupFailed"), exception.Message)); } return(View(model)); }
public virtual async Task <IActionResult> Index(InstallModel model) { if (DataSettingsHelper.DatabaseIsInstalled()) { return(RedirectToRoute("HomePage")); } var locService = _serviceProvider.GetRequiredService <IInstallationLocalizationService>(); if (model.DatabaseConnectionString != null) { model.DatabaseConnectionString = model.DatabaseConnectionString.Trim(); } string connectionString = ""; if (model.MongoDBConnectionInfo) { if (String.IsNullOrEmpty(model.DatabaseConnectionString)) { ModelState.AddModelError("", locService.GetResource("ConnectionStringRequired")); } else { connectionString = model.DatabaseConnectionString; } } else { if (String.IsNullOrEmpty(model.MongoDBDatabaseName)) { ModelState.AddModelError("", locService.GetResource("DatabaseNameRequired")); } if (String.IsNullOrEmpty(model.MongoDBServerName)) { ModelState.AddModelError("", locService.GetResource("MongoDBServerNameRequired")); } string userNameandPassword = ""; if (!(String.IsNullOrEmpty(model.MongoDBUsername))) { userNameandPassword = model.MongoDBUsername + ":" + model.MongoDBPassword + "@"; } connectionString = "mongodb://" + userNameandPassword + model.MongoDBServerName + "/" + model.MongoDBDatabaseName; } if (!string.IsNullOrEmpty(connectionString)) { try { var client = new MongoClient(connectionString); var databaseName = new MongoUrl(connectionString).DatabaseName; var database = client.GetDatabase(databaseName); await database.RunCommandAsync((Command <BsonDocument>) "{ping:1}"); var filter = new BsonDocument("name", "GrandNodeVersion"); var found = database.ListCollectionsAsync(new ListCollectionsOptions { Filter = filter }).Result; if (found.Any()) { ModelState.AddModelError("", locService.GetResource("AlreadyInstalled")); } } catch (Exception ex) { ModelState.AddModelError("", ex.InnerException != null ? ex.InnerException.Message : ex.Message); } } else { ModelState.AddModelError("", locService.GetResource("ConnectionStringRequired")); } var webHelper = _serviceProvider.GetRequiredService <IWebHelper>(); //validate permissions var dirsToCheck = FilePermissionHelper.GetDirectoriesWrite(); foreach (string dir in dirsToCheck) { if (!FilePermissionHelper.CheckPermissions(dir, false, true, true, false)) { ModelState.AddModelError("", string.Format(locService.GetResource("ConfigureDirectoryPermissions"), WindowsIdentity.GetCurrent().Name, dir)); } } var filesToCheck = FilePermissionHelper.GetFilesWrite(); foreach (string file in filesToCheck) { if (!FilePermissionHelper.CheckPermissions(file, false, true, true, true)) { ModelState.AddModelError("", string.Format(locService.GetResource("ConfigureFilePermissions"), WindowsIdentity.GetCurrent().Name, file)); } } if (ModelState.IsValid) { var settingsManager = new DataSettingsManager(); try { //save settings var settings = new DataSettings { DataProvider = "mongodb", DataConnectionString = connectionString }; settingsManager.SaveSettings(settings); var dataProviderInstance = _serviceProvider.GetRequiredService <BaseDataProviderManager>().LoadDataProvider(); dataProviderInstance.InitDatabase(); var dataSettingsManager = new DataSettingsManager(); var dataProviderSettings = dataSettingsManager.LoadSettings(reloadSettings: true); var installationService = _serviceProvider.GetRequiredService <IInstallationService>(); await installationService.InstallData(model.AdminEmail, model.AdminPassword, model.Collation, model.InstallSampleData, model.CompanyName, model.CompanyAddress, model.CompanyPhoneNumber, model.CompanyEmail); //reset cache DataSettingsHelper.ResetCache(); //install plugins PluginManager.MarkAllPluginsAsUninstalled(); var pluginFinder = _serviceProvider.GetRequiredService <IPluginFinder>(); var plugins = pluginFinder.GetPlugins <IPlugin>(LoadPluginsMode.All) .ToList() .OrderBy(x => x.PluginDescriptor.Group) .ThenBy(x => x.PluginDescriptor.DisplayOrder) .ToList(); foreach (var plugin in plugins) { try { await plugin.Install(); } catch (Exception ex) { var _logger = _serviceProvider.GetRequiredService <ILogger>(); await _logger.InsertLog(Domain.Logging.LogLevel.Error, "Error during installing plugin " + plugin.PluginDescriptor.SystemName, ex.Message + " " + ex.InnerException?.Message); } } //register default permissions var permissionProviders = new List <Type>(); permissionProviders.Add(typeof(StandardPermissionProvider)); foreach (var providerType in permissionProviders) { var provider = (IPermissionProvider)Activator.CreateInstance(providerType); await _mediator.Send(new InstallPermissionsCommand() { PermissionProvider = provider }); } //restart application await _cacheManager.SetAsync("Installed", true, 120); return(View(new InstallModel() { Installed = true })); } catch (Exception exception) { //reset cache DataSettingsHelper.ResetCache(); await _cacheManager.Clear(); System.IO.File.Delete(CommonHelper.MapPath("~/App_Data/Settings.txt")); ModelState.AddModelError("", string.Format(locService.GetResource("SetupFailed"), exception.Message + " " + exception.InnerException?.Message)); } } //prepare language list foreach (var lang in locService.GetAvailableLanguages()) { model.AvailableLanguages.Add(new SelectListItem { Value = Url.Action("ChangeLanguage", "Install", new { language = lang.Code }), Text = lang.Name, Selected = locService.GetCurrentLanguage().Code == lang.Code, }); } //prepare collation list foreach (var col in locService.GetAvailableCollations()) { model.AvailableCollation.Add(new SelectListItem { Value = col.Value, Text = col.Name, Selected = locService.GetCurrentLanguage().Code == col.Value, }); } return(View(model)); }
public virtual async Task <IActionResult> Index(InstallModel model) { if (DataSettingsManager.IsDatabaseInstalled()) { return(RedirectToRoute("Homepage")); } model.DisableSampleDataOption = _appSettings.Get <InstallationConfig>().DisableSampleData; model.InstallRegionalResources = _appSettings.Get <InstallationConfig>().InstallRegionalResources; PrepareAvailableDataProviders(model); PrepareLanguageList(model); PrepareCountryList(model); //Consider granting access rights to the resource to the ASP.NET request identity. //ASP.NET has a base process identity //(typically {MACHINE}\ASPNET on IIS 5 or Network Service on IIS 6 and IIS 7, //and the configured application pool identity on IIS 7.5) that is used if the application is not impersonating. //If the application is impersonating via <identity impersonate="true"/>, //the identity will be the anonymous user (typically IUSR_MACHINENAME) or the authenticated request user. //validate permissions var dirsToCheck = _fileProvider.GetDirectoriesWrite(); foreach (var dir in dirsToCheck) { if (!_fileProvider.CheckPermissions(dir, false, true, true, false)) { ModelState.AddModelError(string.Empty, string.Format(_locService.Value.GetResource("ConfigureDirectoryPermissions"), CurrentOSUser.FullName, dir)); } } var filesToCheck = _fileProvider.GetFilesWrite(); foreach (var file in filesToCheck) { if (!_fileProvider.FileExists(file)) { continue; } if (!_fileProvider.CheckPermissions(file, false, true, true, true)) { ModelState.AddModelError(string.Empty, string.Format(_locService.Value.GetResource("ConfigureFilePermissions"), CurrentOSUser.FullName, file)); } } if (!ModelState.IsValid) { return(View(model)); } try { var dataProvider = DataProviderManager.GetDataProvider(model.DataProvider); var connectionString = model.ConnectionStringRaw ? model.ConnectionString : dataProvider.BuildConnectionString(model); if (string.IsNullOrEmpty(connectionString)) { throw new Exception(_locService.Value.GetResource("ConnectionStringWrongFormat")); } DataSettingsManager.SaveSettings(new DataConfig { DataProvider = model.DataProvider, ConnectionString = connectionString }, _fileProvider); if (model.CreateDatabaseIfNotExists) { try { dataProvider.CreateDatabase(model.Collation); } catch (Exception ex) { throw new Exception(string.Format(_locService.Value.GetResource("DatabaseCreationError"), ex.Message)); } } else { //check whether database exists if (!await dataProvider.DatabaseExistsAsync()) { throw new Exception(_locService.Value.GetResource("DatabaseNotExists")); } } dataProvider.InitializeDatabase(); var cultureInfo = new CultureInfo(NopCommonDefaults.DefaultLanguageCulture); var regionInfo = new RegionInfo(NopCommonDefaults.DefaultLanguageCulture); var languagePackInfo = (DownloadUrl : string.Empty, Progress : 0); if (model.InstallRegionalResources) { //try to get CultureInfo and RegionInfo try { cultureInfo = new CultureInfo(model.Country[3..]); regionInfo = new RegionInfo(model.Country[3..]);
public ActionResult Index(InstallModel model) { if (DataSettingsHelper.DatabaseInstalled()) { return(RedirectToRoute("HomePage")); } //设置页面超时时间为10分钟 this.Server.ScriptTimeout = 600; if (model.DatabaseConnectionString != null) { model.DatabaseConnectionString = model.DatabaseConnectionString.Trim(); } //构建页面可用语言列表 foreach (var lang in _installationLocalizationService.GetAvailableLanguage()) { model.AvailableLanguages.Add(new SelectListItem { Value = Url.Action("ChangeLanguage", new { languageCode = lang.Code }), Text = lang.Name, Selected = _installationLocalizationService.GetCurrentLanguage().Code == lang.Code }); } //使用mysql数据库,检查连接字符串 if (model.DataProvider.Equals("mysql", StringComparison.InvariantCultureIgnoreCase)) { if (model.SqlConnectionInfo.Equals("sqlDatabaseConnectionString", StringComparison.InvariantCultureIgnoreCase)) { if (string.IsNullOrEmpty(model.DatabaseConnectionString)) { ModelState.AddModelError("", _installationLocalizationService.GetResource("DatabaseConnectionStringRequired")); } try { new MySqlConnectionStringBuilder(model.DatabaseConnectionString); } catch { ModelState.AddModelError("", _installationLocalizationService.GetResource("DatabaseConnectionStringError")); } } else { if (string.IsNullOrEmpty(model.ServerName)) { ModelState.AddModelError("", _installationLocalizationService.GetResource("ServerNameRequired")); } if (string.IsNullOrEmpty(model.DatabaseName)) { ModelState.AddModelError("", _installationLocalizationService.GetResource("DatabaseNameRequired")); } if (string.IsNullOrEmpty(model.ServerUsername)) { ModelState.AddModelError("", _installationLocalizationService.GetResource("ServerUsernameRequired")); } if (string.IsNullOrEmpty(model.ServerUserPassword)) { ModelState.AddModelError("", _installationLocalizationService.GetResource("ServerUserPasswordRequired")); } } } IWebHelper webHelper = EngineContext.Current.Resolve <IWebHelper>(); if (ModelState.IsValid) { var settingsManager = new DataSettingsManager(); try { string connectionString; if (model.DataProvider.Equals("mysql", StringComparison.InvariantCultureIgnoreCase)) { //mysql if (model.SqlConnectionInfo.Equals("sqlDatabaseInfo", StringComparison.InvariantCultureIgnoreCase)) { connectionString = CreateConnectionString(model.ServerName, model.DatabaseName, model.ServerUsername, model.ServerUserPassword); } else { var sqlConnectionStringBuilder = new MySqlConnectionStringBuilder(model.DatabaseConnectionString); connectionString = sqlConnectionStringBuilder.ToString(); } if (model.NotExistCreateDatabase) { if (!DatabaseExists(connectionString)) { } } else { if (!DatabaseExists(connectionString)) { throw new Exception(_installationLocalizationService.GetResource("DatabaseNotExists")); } } } else { throw new Exception(_installationLocalizationService.GetResource("ProviderNotMysql")); } //save settings var dataProvider = model.DataProvider; var settings = new DataSettings { DataProvider = dataProvider, DataConnectionString = connectionString }; settingsManager.SaveSettings(settings); //初始化数据库 var dataProviderInstance = EngineContext.Current.Resolve <BaseDataProviderManager>().LoadDataProvider(); dataProviderInstance.InitDatabase(); //插入初始化数据 //刷新缓存 DataSettingsHelper.ResetCache(); //重启应用程序 webHelper.RestartAppDomain(); //重定向至首页 return(RedirectToRoute("HomePage")); } catch (Exception exception) { //刷新缓存 DataSettingsHelper.ResetCache(); //清空异常的数据库连接信息 settingsManager.SaveSettings(new DataSettings { DataProvider = null, DataConnectionString = null }); ModelState.AddModelError("", string.Format(_installationLocalizationService.GetResource("SetupFailed"), exception.Message)); } } return(View(model)); }
public ActionResult Index(InstallModel model) { if (DataSettingsHelper.DatabaseIsInstalled()) { return(RedirectToAction("Index", "Home")); } this.Server.ScriptTimeout = 300; if (model.DatabaseConnectionString != null) { model.DatabaseConnectionString = model.DatabaseConnectionstring.Trim(); } if (model.DataProvider.Equals("sqlserver", StringComparison.InvariantCultureIgnoreCase)) { if (model.SqlConnectionInfo.Equals("sqlconnectioninfo_raw", StringComparison.InvariantCultureIgnoreCase)) { if (string.IsNullOrEmpty(model.DatabaseConnectionString)) { ModelState.AddModelError(string.Empty, "A SQL connection string is required"); } try { new SqlConnectionStringBuilder(model.DatabaseConnectionString); } catch { ModelState.AddModelError(string.Empty, "Wrong SQL connection string format"); } } else { if (string.IsNullOrEmpty(model.SqlServerName)) { ModelState.AddModelError(string.Empty, "SQL Server name is required"); } if (string.IsNullOrEmpty(model.SqlDatabaseName)) { ModelState.AddModelError(string.Empty, "Database name is required"); } if (model.SqlAuthenticationType.Equals("sqlauthentication", StringComparison.InvariantCultureIgnoreCase)) { if (string.IsNullOrEmpty(model.SqlServerUsername)) { ModelState.AddModelError(string.Empty, "SQL Username is required"); } if (string.IsNullOrEmpty(model.SqlServerPassword)) { ModelState.AddModelError(string.Empty, "SQL Password is required"); } } } } string rootDir = Server.MapPath("~/"); var dirsToCheck = new List <string>(); dirsToCheck.Add(rootDir); dirsToCheck.Add(rootDir + "App_Data"); dirsToCheck.Add(rootDir + "bin"); dirsToCheck.Add(rootDir + "content"); dirsToCheck.Add(rootDir + "content\\images"); dirsToCheck.Add(rootDir + "content\\images\\thumbs"); dirsToCheck.Add(rootDir + "content\\files\\exportimport"); dirsToCheck.Add(rootDir + "plugins"); dirsToCheck.Add(rootDir + "plugins\\bin"); foreach (string dir in dirsToCheck) { if (!checkPermissions(dir, false, true, true, true)) { ModelState.AddModelError(string.Empty, string.Format("The '{0}' account is not granted with Modify permission on folder '{1}'. Please configure these permissions.", WindowsIdentity.GetCurrent().Name, dir)); } } var filesToCheck = new List <string>(); filesToCheck.Add(rootDir + "Global.asax"); filesToCheck.Add(rootDir + "web.config"); filesToCheck.Add(rootDir + "App_Data\\InstalledPlugins.txt"); filesToCheck.Add(rootDir + "App_Data\\Settings.txt"); foreach (string file in filesToCheck) { if (!checkPermissions(file, false, true, true, true)) { ModelState.AddModelError(string.Empty, string.Format("The '{0}' account is not granted with Modify permission on file '{1}'. Please configure these permissions.", WindowsIdentity.GetCurrent().Name, file)); } } if (ModelState.IsValid) { var settingsManager = new DataSettingsManager(); try { string connectionString = null; if (model.DataProvider.Equals("sqlserver", StringComparison.InvariantCultureIgnoreCase)) { if (model.SqlConnectionInfo.Equals("sqlconnectioninfo_raw", StringComparison.InvariantCultureIgnoreCase)) { connectionString = model.DatabaseConnectionString; } else { connectionString = createConnectionString(model.SqlAuthenticationType == "windowsauthentication", model.SqlServerName, model.SqlDatabaseName, model.SqlServerUsername, model.SqlServerPassword); } if (model.SqlServerCreateDatabase) { if (!sqlServerDatabaseExists(connectionString)) { var errorCreatingDatabase = createDatabase(connectionString); if (!string.IsNullOrEmpty(errorCreatingDatabase)) { throw new Exception(errorCreatingDatabase); } else { Thread.Sleep(3000); } } } else { if (!sqlServerDatabaseExists(connectionString)) { throw new Exception("Database does not exist or you don't have permissions to connect to it"); } } } else { string databaseFileName = "Fara.Db.sdf"; string databasePath = @"|DataDirectory|\" + databaseFileName; connectionString = "Data Source=" + databasePath + ";Persist Security Info=False"; string databaseFullPath = HostingEnvironment.MapPath("~/App_Data/") + databaseFileName; if (System.IO.File.Exists(databaseFullPath)) { System.IO.File.Delete(databaseFullPath); } } var dataProvider = model.DataProvider; var settings = new DataSettings() { DataProvider = dataProvider, DataConnectionString = connectionString }; settingsManager.SaveSettings(settings); var dataProviderInstance = EngineContext.Current.Resolve <BaseDataProviderManager>().LoadDataProvider(); dataProviderInstance.InitDatabase(); var installationService = EngineContext.Current.Resolve <IInstallationService>(); installationService.InstallData(model.AdminEmail, model.AdminPassword, model.InstallSampleData); DataSettingsHelper.ResetCache(); PluginManager.MarkAllPluginsAsUninstalled(); var pluginFinder = EngineContext.Current.Resolve <IPluginFinder>(); var plugins = pluginFinder.GetPlugins <IPlugin>(false) .ToList() .OrderBy(x => x.PluginDescriptor.Group) .ThenBy(x => x.PluginDescriptor.DisplayOrder) .ToList(); foreach (var plugin in plugins) { plugin.Install(); } var permissionProviders = new List <Type>(); permissionProviders.Add(typeof(StandardPermissionProvider)); foreach (var providerType in permissionProviders) { dynamic provider = Activator.CreateInstance(providerType); EngineContext.Current.Resolve <IPermissionService>().InstallPermissions(provider); } var webHelper = EngineContext.Current.Resolve <IWebHelper>(); webHelper.RestartAppDomain(); return(RedirectToAction("Index", "Home")); } catch (Exception exception) { DataSettingsHelper.ResetCache(); settingsManager.SaveSettings(new DataSettings { DataProvider = null, DataConnectionString = null }); ModelState.AddModelError(string.Empty, "Setup failed: " + exception); } } return(View(model)); }
public virtual IActionResult Index(InstallModel model) { if (DataSettingsHelper.DatabaseIsInstalled()) { return(RedirectToRoute("HomePage")); } if (model.DatabaseConnectionString != null) { model.DatabaseConnectionString = model.DatabaseConnectionString.Trim(); } //prepare language list foreach (var lang in _locService.GetAvailableLanguages()) { model.AvailableLanguages.Add(new SelectListItem { Value = Url.Action("ChangeLanguage", "Install", new { language = lang.Code }), Text = lang.Name, Selected = _locService.GetCurrentLanguage().Code == lang.Code, }); } model.DisableSqlCompact = _config.UseFastInstallationService; model.DisableSampleDataOption = _config.DisableSampleDataDuringInstallation; //SQL Server if (model.DataProvider.Equals("sqlserver", StringComparison.InvariantCultureIgnoreCase)) { if (model.SqlConnectionInfo.Equals("sqlconnectioninfo_raw", StringComparison.InvariantCultureIgnoreCase)) { //raw connection string if (string.IsNullOrEmpty(model.DatabaseConnectionString)) { ModelState.AddModelError("", _locService.GetResource("ConnectionStringRequired")); } try { //try to create connection string new SqlConnectionStringBuilder(model.DatabaseConnectionString); } catch { ModelState.AddModelError("", _locService.GetResource("ConnectionStringWrongFormat")); } } else { //values if (string.IsNullOrEmpty(model.SqlServerName)) { ModelState.AddModelError("", _locService.GetResource("SqlServerNameRequired")); } if (string.IsNullOrEmpty(model.SqlDatabaseName)) { ModelState.AddModelError("", _locService.GetResource("DatabaseNameRequired")); } //authentication type if (model.SqlAuthenticationType.Equals("sqlauthentication", StringComparison.InvariantCultureIgnoreCase)) { //SQL authentication if (string.IsNullOrEmpty(model.SqlServerUsername)) { ModelState.AddModelError("", _locService.GetResource("SqlServerUsernameRequired")); } if (string.IsNullOrEmpty(model.SqlServerPassword)) { ModelState.AddModelError("", _locService.GetResource("SqlServerPasswordRequired")); } } } } //Consider granting access rights to the resource to the ASP.NET request identity. //ASP.NET has a base process identity //(typically {MACHINE}\ASPNET on IIS 5 or Network Service on IIS 6 and IIS 7, //and the configured application pool identity on IIS 7.5) that is used if the application is not impersonating. //If the application is impersonating via <identity impersonate="true"/>, //the identity will be the anonymous user (typically IUSR_MACHINENAME) or the authenticated request user. var webHelper = EngineContext.Current.Resolve <IWebHelper>(); if (ModelState.IsValid) { var settingsManager = new DataSettingsManager(); try { string connectionString; if (model.DataProvider.Equals("sqlserver", StringComparison.InvariantCultureIgnoreCase)) { //SQL Server if (model.SqlConnectionInfo.Equals("sqlconnectioninfo_raw", StringComparison.InvariantCultureIgnoreCase)) { //raw connection string //we know that MARS option is required when using Entity Framework //let's ensure that it's specified var sqlCsb = new SqlConnectionStringBuilder(model.DatabaseConnectionString); if (this.UseMars) { sqlCsb.MultipleActiveResultSets = true; } connectionString = sqlCsb.ToString(); } else { //values connectionString = CreateConnectionString(model.SqlAuthenticationType == "windowsauthentication", model.SqlServerName, model.SqlDatabaseName, model.SqlServerUsername, model.SqlServerPassword); } if (model.SqlServerCreateDatabase) { if (!SqlServerDatabaseExists(connectionString)) { //create database var collation = model.UseCustomCollation ? model.Collation : ""; var errorCreatingDatabase = CreateDatabase(connectionString, collation); if (!string.IsNullOrEmpty(errorCreatingDatabase)) { throw new Exception(errorCreatingDatabase); } } } else { //check whether database exists if (!SqlServerDatabaseExists(connectionString)) { throw new Exception(_locService.GetResource("DatabaseNotExists")); } } } else { //SQL CE var databaseFileName = "Game.Db.sdf"; var databasePath = @"|DataDirectory|\" + databaseFileName; connectionString = "Data Source=" + databasePath + ";Persist Security Info=False"; //drop database if exists var databaseFullPath = CommonHelper.MapPath("~/App_Data/") + databaseFileName; if (System.IO.File.Exists(databaseFullPath)) { System.IO.File.Delete(databaseFullPath); } } //save settings var dataProvider = model.DataProvider; var settings = new DataSettings { DataProvider = dataProvider, DataConnectionString = connectionString }; settingsManager.SaveSettings(settings); //now resolve installation service var installationService = EngineContext.Current.Resolve <IInstallationService>(); installationService.InstallData(model.AdminEmail, model.AdminPassword, model.InstallSampleData); //reset cache DataSettingsHelper.ResetCache(); //register default permissions //待处理:是否需要注册默认的授权记录,还是用SQL语句批量授权 //restart application //webHelper.RestartAppDomain(); //Redirect to home page return(RedirectToRoute("HomePage")); } catch (Exception exception) { //reset cache DataSettingsHelper.ResetCache(); var cacheManager = EngineContext.Current.Resolve <IStaticCacheManager>(); cacheManager.Clear(); //clear provider settings if something got wrong settingsManager.SaveSettings(new DataSettings { DataProvider = null, DataConnectionString = null }); ModelState.AddModelError("", string.Format(_locService.GetResource("SetupFailed"), exception.Message)); } } return(View(model)); }
public override IActionResult Index(InstallModel model) { if (DataSettingsManager.DatabaseIsInstalled) { return(RedirectToRoute("HomePage")); } if (model.DatabaseConnectionString != null) { model.DatabaseConnectionString = model.DatabaseConnectionString.Trim(); } //prepare language list foreach (var lang in _locService.GetAvailableLanguages()) { model.AvailableLanguages.Add(new SelectListItem { Value = Url.Action("ChangeLanguage", "Install", new { language = lang.Code }), Text = lang.Name, Selected = _locService.GetCurrentLanguage().Code == lang.Code, }); } model.DisableSampleDataOption = _config.DisableSampleDataDuringInstallation; if (model.DataProvider == DataProviderType.SqlServer) { return(base.Index(model)); } else if (model.DataProvider == DataProviderType.MySQL) { if (model.SqlConnectionInfo.Equals("mysqlconnectioninfo_raw", StringComparison.InvariantCultureIgnoreCase)) { //raw connection string if (string.IsNullOrEmpty(model.DatabaseConnectionString)) { ModelState.AddModelError("", _locService.GetResource("ConnectionStringRequired")); } try { //try to create connection string new MySqlConnectionStringBuilder(model.DatabaseConnectionString); } catch { ModelState.AddModelError("", _locService.GetResource("ConnectionStringWrongFormat")); } } else { //values if (string.IsNullOrEmpty(model.SqlServerName)) { ModelState.AddModelError("", _locService.GetResource("SqlServerNameRequired")); } if (string.IsNullOrEmpty(model.SqlDatabaseName)) { ModelState.AddModelError("", _locService.GetResource("DatabaseNameRequired")); } //authentication type if (model.SqlAuthenticationType.Equals("mysqlauthentication", StringComparison.InvariantCultureIgnoreCase)) { //MySQL authentication if (string.IsNullOrEmpty(model.SqlServerUsername)) { ModelState.AddModelError("", _locService.GetResource("SqlServerUsernameRequired")); } if (string.IsNullOrEmpty(model.SqlServerPassword)) { ModelState.AddModelError("", _locService.GetResource("SqlServerPasswordRequired")); } } } } //Consider granting access rights to the resource to the ASP.NET request identity. //ASP.NET has a base process identity //(typically {MACHINE}\ASPNET on IIS 5 or Network Service on IIS 6 and IIS 7, //and the configured application pool identity on IIS 7.5) that is used if the application is not impersonating. //If the application is impersonating via <identity impersonate="true"/>, //the identity will be the anonymous user (typically IUSR_MACHINENAME) or the authenticated request user. var webHelper = EngineContext.Current.Resolve <IWebHelper>(); if (ModelState.IsValid) { try { string connectionString; if (model.SqlConnectionInfo.Equals("mysqlconnectioninfo_raw", StringComparison.InvariantCultureIgnoreCase)) { //raw connection string //we know that MARS option is required when using Entity Framework //let's ensure that it's specified var sqlCsb = new MySqlConnectionStringBuilder(model.DatabaseConnectionString); connectionString = sqlCsb.ToString(); } else { //values connectionString = CreateMySQLConnectionString(false, model.SqlServerName, model.SqlDatabaseName, model.SqlServerUsername, model.SqlServerPassword); } if (model.SqlServerCreateDatabase) { if (!MySQLDatabaseExists(connectionString)) { //create database var collation = model.UseCustomCollation ? model.Collation : ""; var errorCreatingDatabase = CreateMySQLDatabase(connectionString, collation); if (!string.IsNullOrEmpty(errorCreatingDatabase)) { throw new Exception(errorCreatingDatabase); } } } else { //check whether database exists if (!MySQLDatabaseExists(connectionString)) { throw new Exception(_locService.GetResource("DatabaseNotExists")); } } //save settings DataSettingsManager.SaveSettings(new DataSettings { DataProvider = model.DataProvider, DataConnectionString = connectionString }, _fileProvider); //initialize database EngineContext.Current.Resolve <IDataProvider>().InitializeDatabase(); //now resolve installation service var installationService = EngineContext.Current.Resolve <IInstallationService>(); installationService.InstallData(model.AdminEmail, model.AdminPassword, model.InstallSampleData); //reset cache DataSettingsManager.ResetCache(); //install plugins PluginManager.MarkAllPluginsAsUninstalled(); var pluginFinder = EngineContext.Current.Resolve <IPluginFinder>(); var plugins = pluginFinder.GetPlugins <IPlugin>(LoadPluginsMode.All) .ToList() .OrderBy(x => x.PluginDescriptor.Group) .ThenBy(x => x.PluginDescriptor.DisplayOrder) .ToList(); var pluginsIgnoredDuringInstallation = string.IsNullOrEmpty(_config.PluginsIgnoredDuringInstallation) ? new List <string>() : _config.PluginsIgnoredDuringInstallation .Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries) .Select(x => x.Trim()) .ToList(); foreach (var plugin in plugins) { if (pluginsIgnoredDuringInstallation.Contains(plugin.PluginDescriptor.SystemName)) { continue; } plugin.Install(); } //register default permissions //var permissionProviders = EngineContext.Current.Resolve<ITypeFinder>().FindClassesOfType<IPermissionProvider>(); var permissionProviders = new List <Type> { typeof(StandardPermissionProvider) }; foreach (var providerType in permissionProviders) { var provider = (IPermissionProvider)Activator.CreateInstance(providerType); EngineContext.Current.Resolve <IPermissionService>().InstallPermissions(provider); } //restart application webHelper.RestartAppDomain(); //Redirect to home page return(RedirectToRoute("HomePage")); } catch (Exception exception) { //reset cache DataSettingsManager.ResetCache(); var cacheManager = EngineContext.Current.Resolve <IStaticCacheManager>(); cacheManager.Clear(); //clear provider settings if something got wrong DataSettingsManager.SaveSettings(new DataSettings(), _fileProvider); ModelState.AddModelError("", string.Format(_locService.GetResource("SetupFailed"), exception.Message)); } } return(View("~/Plugins/Data.MySQL/Views/Index.cshtml", model)); }
public ActionResult Index(InstallModel model) { if (DataSettingsHelper.DatabaseIsInstalled()) { return(RedirectToRoute("HomePage")); } //set page timeout to 5 minutes this.Server.ScriptTimeout = 300; if (model.DatabaseConnectionString != null) { model.DatabaseConnectionString = model.DatabaseConnectionString.Trim(); } //prepare language list foreach (var lang in _locService.GetAvailableLanguages()) { model.AvailableLanguages.Add(new SelectListItem { Value = Url.Action("ChangeLanguage", "Install", new { language = lang.Code }), Text = lang.Name, Selected = _locService.GetCurrentLanguage().Code == lang.Code, }); } model.DisableSqlCompact = _config.UseFastInstallationService; model.DisableSampleDataOption = _config.DisableSampleDataDuringInstallation; //SQL Server if (model.DataProvider.Equals("sqlserver", StringComparison.InvariantCultureIgnoreCase)) { if (model.SqlConnectionInfo.Equals("sqlconnectioninfo_raw", StringComparison.InvariantCultureIgnoreCase)) { //raw connection string if (string.IsNullOrEmpty(model.DatabaseConnectionString)) { ModelState.AddModelError("", _locService.GetResource("ConnectionStringRequired")); } try { //try to create connection string new SqlConnectionStringBuilder(model.DatabaseConnectionString); } catch { ModelState.AddModelError("", _locService.GetResource("ConnectionStringWrongFormat")); } } else { //values if (string.IsNullOrEmpty(model.SqlServerName)) { ModelState.AddModelError("", _locService.GetResource("SqlServerNameRequired")); } if (string.IsNullOrEmpty(model.SqlDatabaseName)) { ModelState.AddModelError("", _locService.GetResource("DatabaseNameRequired")); } //authentication type if (model.SqlAuthenticationType.Equals("sqlauthentication", StringComparison.InvariantCultureIgnoreCase)) { //SQL authentication if (string.IsNullOrEmpty(model.SqlServerUsername)) { ModelState.AddModelError("", _locService.GetResource("SqlServerUsernameRequired")); } if (string.IsNullOrEmpty(model.SqlServerPassword)) { ModelState.AddModelError("", _locService.GetResource("SqlServerPasswordRequired")); } } } } else if (model.DataProvider.Equals("mysql", StringComparison.InvariantCultureIgnoreCase)) { if (model.MySqlConnectionInfo.Equals("mysqlconnectioninfo_raw", StringComparison.InvariantCultureIgnoreCase)) { //raw connection string if (string.IsNullOrEmpty(model.MySqlDatabaseConnectionString)) { ModelState.AddModelError(string.Empty, _locService.GetResource("ConnectionStringRequired")); } try { //try to create connection string new MySqlConnectionStringBuilder(model.MySqlDatabaseConnectionString); } catch { ModelState.AddModelError(string.Empty, _locService.GetResource("ConnectionStringWrongFormat")); } } else { //values if (string.IsNullOrEmpty(model.MySqlServerName)) { ModelState.AddModelError("", _locService.GetResource("SqlServerNameRequired")); } if (string.IsNullOrEmpty(model.MySqlDatabaseName)) { ModelState.AddModelError("", _locService.GetResource("DatabaseNameRequired")); } if (string.IsNullOrEmpty(model.MySqlUsername)) { ModelState.AddModelError("", _locService.GetResource("SqlServerUsernameRequired")); } if (string.IsNullOrEmpty(model.MySqlPassword)) { ModelState.AddModelError("", _locService.GetResource("SqlServerPasswordRequired")); } } } //Consider granting access rights to the resource to the ASP.NET request identity. //ASP.NET has a base process identity //(typically {MACHINE}\ASPNET on IIS 5 or Network Service on IIS 6 and IIS 7, //and the configured application pool identity on IIS 7.5) that is used if the application is not impersonating. //If the application is impersonating via <identity impersonate="true"/>, //the identity will be the anonymous user (typically IUSR_MACHINENAME) or the authenticated request user. var webHelper = EngineContext.Current.Resolve <IWebHelper>(); //validate permissions var dirsToCheck = FilePermissionHelper.GetDirectoriesWrite(webHelper); foreach (string dir in dirsToCheck) { if (!FilePermissionHelper.CheckPermissions(dir, false, true, true, false)) { ModelState.AddModelError("", string.Format(_locService.GetResource("ConfigureDirectoryPermissions"), WindowsIdentity.GetCurrent().Name, dir)); } } var filesToCheck = FilePermissionHelper.GetFilesWrite(webHelper); foreach (string file in filesToCheck) { if (!FilePermissionHelper.CheckPermissions(file, false, true, true, true)) { ModelState.AddModelError("", string.Format(_locService.GetResource("ConfigureFilePermissions"), WindowsIdentity.GetCurrent().Name, file)); } } if (ModelState.IsValid) { var settingsManager = new DataSettingsManager(); try { string connectionString; if (model.DataProvider.Equals("sqlserver", StringComparison.InvariantCultureIgnoreCase)) { //SQL Server if (model.SqlConnectionInfo.Equals("sqlconnectioninfo_raw", StringComparison.InvariantCultureIgnoreCase)) { //raw connection string //we know that MARS option is required when using Entity Framework //let's ensure that it's specified var sqlCsb = new SqlConnectionStringBuilder(model.DatabaseConnectionString); if (this.UseMars) { sqlCsb.MultipleActiveResultSets = true; } connectionString = sqlCsb.ToString(); } else { //values connectionString = CreateConnectionString(model.SqlAuthenticationType == "windowsauthentication", model.SqlServerName, model.SqlDatabaseName, model.SqlServerUsername, model.SqlServerPassword); } if (model.SqlServerCreateDatabase) { if (!SqlServerDatabaseExists(connectionString)) { //create database var collation = model.UseCustomCollation ? model.Collation : ""; var errorCreatingDatabase = CreateDatabase(connectionString, collation); if (!String.IsNullOrEmpty(errorCreatingDatabase)) { throw new Exception(errorCreatingDatabase); } //Database cannot be created sometimes. Weird! Seems to be Entity Framework issue //that's just wait 5 seconds (3 seconds is not enough for some reasons) Thread.Sleep(5000); } } else { //check whether database exists if (!SqlServerDatabaseExists(connectionString)) { throw new Exception(_locService.GetResource("DatabaseNotExists")); } } } else if (model.DataProvider.Equals("mysql", StringComparison.InvariantCultureIgnoreCase)) { //MySql if (model.MySqlConnectionInfo.Equals("mysqlconnectioninfo_raw", StringComparison.InvariantCultureIgnoreCase)) { //raw connection string //we know that MARS option is required when using Entity Framework //let's ensure that it's specified var sqlCsb = new MySqlConnectionStringBuilder(model.MySqlDatabaseConnectionString); //sqlCsb.MultipleActiveResultSets = true; connectionString = sqlCsb.ToString(); } else { //values connectionString = createMySqlConnectionString( model.MySqlServerName, model.MySqlDatabaseName, model.MySqlUsername, model.MySqlPassword, 200000000); } if (model.MySqlServerCreateDatabase) { if (!mySqlDatabaseExists(connectionString)) { //create database var collation = string.Empty; var errorCreatingDatabase = createMySqlDatabase(connectionString, collation); if (!String.IsNullOrEmpty(errorCreatingDatabase)) { throw new Exception(errorCreatingDatabase); } else { //Database cannot be created sometimes. Weird! Seems to be Entity Framework issue //that's just wait 3 seconds Thread.Sleep(3000); } } } else { //check whether database exists if (!mySqlDatabaseExists(connectionString)) { throw new Exception(_locService.GetResource("DatabaseNotExists")); } } } else { //SQL CE string databaseFileName = "Nop.Db.sdf"; string databasePath = @"|DataDirectory|\" + databaseFileName; connectionString = "Data Source=" + databasePath + ";Persist Security Info=False"; //drop database if exists string databaseFullPath = HostingEnvironment.MapPath("~/App_Data/") + databaseFileName; if (System.IO.File.Exists(databaseFullPath)) { System.IO.File.Delete(databaseFullPath); } } //save settings var dataProvider = model.DataProvider; var settings = new DataSettings { DataProvider = dataProvider, DataConnectionString = connectionString }; settingsManager.SaveSettings(settings); //init data provider var dataProviderInstance = EngineContext.Current.Resolve <BaseDataProviderManager>().LoadDataProvider(); dataProviderInstance.InitDatabase(); //now resolve installation service var installationService = EngineContext.Current.Resolve <IInstallationService>(); installationService.InstallData(model.AdminEmail, model.AdminPassword, model.InstallSampleData); //reset cache DataSettingsHelper.ResetCache(); //install plugins PluginManager.MarkAllPluginsAsUninstalled(); var pluginFinder = EngineContext.Current.Resolve <IPluginFinder>(); var plugins = pluginFinder.GetPlugins <IPlugin>(LoadPluginsMode.All) .ToList() .OrderBy(x => x.PluginDescriptor.Group) .ThenBy(x => x.PluginDescriptor.DisplayOrder) .ToList(); var pluginsIgnoredDuringInstallation = String.IsNullOrEmpty(_config.PluginsIgnoredDuringInstallation) ? new List <string>(): _config.PluginsIgnoredDuringInstallation .Split(new [] { ',' }, StringSplitOptions.RemoveEmptyEntries) .Select(x => x.Trim()) .ToList(); foreach (var plugin in plugins) { if (pluginsIgnoredDuringInstallation.Contains(plugin.PluginDescriptor.SystemName)) { continue; } plugin.Install(); } //register default permissions //var permissionProviders = EngineContext.Current.Resolve<ITypeFinder>().FindClassesOfType<IPermissionProvider>(); var permissionProviders = new List <Type>(); permissionProviders.Add(typeof(StandardPermissionProvider)); foreach (var providerType in permissionProviders) { dynamic provider = Activator.CreateInstance(providerType); EngineContext.Current.Resolve <IPermissionService>().InstallPermissions(provider); } //restart application webHelper.RestartAppDomain(); //Redirect to home page return(RedirectToRoute("HomePage")); } catch (Exception exception) { //reset cache DataSettingsHelper.ResetCache(); //clear provider settings if something got wrong settingsManager.SaveSettings(new DataSettings { DataProvider = null, DataConnectionString = null }); ModelState.AddModelError("", string.Format(_locService.GetResource("SetupFailed"), exception.Message)); } } return(View(model)); }
public virtual async Task <IActionResult> Index(InstallModel model) { if (DataSettingsManager.DatabaseIsInstalled()) { return(RedirectToRoute("HomePage")); } var locService = _serviceProvider.GetRequiredService <IInstallationLocalizedService>(); if (model.DatabaseConnectionString != null) { model.DatabaseConnectionString = model.DatabaseConnectionString.Trim(); } string connectionString = ""; if (model.ConnectionInfo) { if (String.IsNullOrEmpty(model.DatabaseConnectionString)) { ModelState.AddModelError("", locService.GetResource("ConnectionStringRequired")); } else { connectionString = model.DatabaseConnectionString; } } else { if (String.IsNullOrEmpty(model.MongoDBDatabaseName)) { ModelState.AddModelError("", locService.GetResource("DatabaseNameRequired")); } if (String.IsNullOrEmpty(model.MongoDBServerName)) { ModelState.AddModelError("", locService.GetResource("MongoDBServerNameRequired")); } string userNameandPassword = ""; if (!(String.IsNullOrEmpty(model.MongoDBUsername))) { userNameandPassword = model.MongoDBUsername + ":" + model.MongoDBPassword + "@"; } connectionString = "mongodb://" + userNameandPassword + model.MongoDBServerName + "/" + model.MongoDBDatabaseName; } if (!string.IsNullOrEmpty(connectionString)) { try { var mdb = new MongoDBContext(); if (await mdb.DatabaseExist(connectionString)) { ModelState.AddModelError("", locService.GetResource("AlreadyInstalled")); } } catch (Exception ex) { ModelState.AddModelError("", ex.InnerException != null ? ex.InnerException.Message : ex.Message); } } else { ModelState.AddModelError("", locService.GetResource("ConnectionStringRequired")); } if (ModelState.IsValid) { try { //save settings var settings = new DataSettings { ConnectionString = connectionString, DbProvider = model.DataProvider }; await DataSettingsManager.SaveSettings(settings); var installationService = _serviceProvider.GetRequiredService <IInstallationService>(); await installationService.InstallData(model.AdminEmail, model.AdminPassword, model.Collation, model.InstallSampleData, model.CompanyName, model.CompanyAddress, model.CompanyPhoneNumber, model.CompanyEmail); //reset cache DataSettingsManager.ResetCache(); PluginManager.ClearPlugins(); var pluginsInfo = PluginManager.ReferencedPlugins.ToList(); foreach (var pluginInfo in pluginsInfo) { try { var plugin = pluginInfo.Instance <IPlugin>(_serviceProvider); await plugin.Install(); } catch (Exception ex) { var _logger = _serviceProvider.GetRequiredService <ILogger>(); await _logger.InsertLog(Domain.Logging.LogLevel.Error, "Error during installing plugin " + pluginInfo.SystemName, ex.Message + " " + ex.InnerException?.Message); } } //register default permissions var permissionProviders = new List <Type>(); permissionProviders.Add(typeof(PermissionProvider)); foreach (var providerType in permissionProviders) { var provider = (IPermissionProvider)Activator.CreateInstance(providerType); await _mediator.Send(new InstallPermissionsCommand() { PermissionProvider = provider }); } //restart application await _cacheBase.SetAsync("Installed", true, 120); return(View(new InstallModel() { Installed = true })); } catch (Exception exception) { //reset cache DataSettingsManager.ResetCache(); await _cacheBase.Clear(); System.IO.File.Delete(CommonPath.SettingsPath); ModelState.AddModelError("", string.Format(locService.GetResource("SetupFailed"), exception.Message + " " + exception.InnerException?.Message)); } } //prepare db providers model.AvailableProviders = Enum.GetValues(typeof(DbProvider)).Cast <DbProvider>().Select(v => new SelectListItem { Text = v.ToString(), Value = ((int)v).ToString() }).ToList(); //prepare language list foreach (var lang in locService.GetAvailableLanguages()) { model.AvailableLanguages.Add(new SelectListItem { Value = Url.RouteUrl("InstallChangeLanguage", new { language = lang.Code }), Text = lang.Name, Selected = locService.GetCurrentLanguage().Code == lang.Code, }); } //prepare collation list foreach (var col in locService.GetAvailableCollations()) { model.AvailableCollation.Add(new SelectListItem { Value = col.Value, Text = col.Name, Selected = locService.GetCurrentLanguage().Code == col.Value, }); } return(View(model)); }
public virtual IActionResult Index(InstallModel model) { if (DataSettingsManager.DatabaseIsInstalled) { return(RedirectToRoute("Homepage")); } if (model.DatabaseConnectionString != null) { model.DatabaseConnectionString = model.DatabaseConnectionString.Trim(); } //prepare language list foreach (var lang in _locService.GetAvailableLanguages()) { model.AvailableLanguages.Add(new SelectListItem { Value = Url.Action("ChangeLanguage", "Install", new { language = lang.Code }), Text = lang.Name, Selected = _locService.GetCurrentLanguage().Code == lang.Code }); } model.DisableSampleDataOption = _config.DisableSampleDataDuringInstallation; //SQL Server if (model.DataProvider == DataProviderType.SqlServer) { if (model.SqlConnectionInfo.Equals("sqlconnectioninfo_raw", StringComparison.InvariantCultureIgnoreCase)) { //raw connection string if (string.IsNullOrEmpty(model.DatabaseConnectionString)) { ModelState.AddModelError(string.Empty, _locService.GetResource("ConnectionStringRequired")); } try { //try to create connection string var unused = new SqlConnectionStringBuilder(model.DatabaseConnectionString); } catch { ModelState.AddModelError(string.Empty, _locService.GetResource("ConnectionStringWrongFormat")); } } else { //values if (string.IsNullOrEmpty(model.SqlServerName)) { ModelState.AddModelError(string.Empty, _locService.GetResource("SqlServerNameRequired")); } if (string.IsNullOrEmpty(model.SqlDatabaseName)) { ModelState.AddModelError(string.Empty, _locService.GetResource("DatabaseNameRequired")); } //authentication type if (model.SqlAuthenticationType.Equals("sqlauthentication", StringComparison.InvariantCultureIgnoreCase)) { //SQL authentication if (string.IsNullOrEmpty(model.SqlServerUsername)) { ModelState.AddModelError(string.Empty, _locService.GetResource("SqlServerUsernameRequired")); } if (string.IsNullOrEmpty(model.SqlServerPassword)) { ModelState.AddModelError(string.Empty, _locService.GetResource("SqlServerPasswordRequired")); } } } } //Consider granting access rights to the resource to the ASP.NET request identity. //ASP.NET has a base process identity //(typically {MACHINE}\ASPNET on IIS 5 or Network Service on IIS 6 and IIS 7, //and the configured application pool identity on IIS 7.5) that is used if the application is not impersonating. //If the application is impersonating via <identity impersonate="true"/>, //the identity will be the anonymous user (typically IUSR_MACHINENAME) or the authenticated request user. var webHelper = EngineContext.Current.Resolve <IWebHelper>(); //validate permissions var dirsToCheck = FilePermissionHelper.GetDirectoriesWrite(); foreach (var dir in dirsToCheck) { if (!FilePermissionHelper.CheckPermissions(dir, false, true, true, false)) { ModelState.AddModelError(string.Empty, string.Format(_locService.GetResource("ConfigureDirectoryPermissions"), CurrentOSUser.FullName, dir)); } } var filesToCheck = FilePermissionHelper.GetFilesWrite(); foreach (var file in filesToCheck) { if (!_fileProvider.FileExists(file)) { continue; } if (!FilePermissionHelper.CheckPermissions(file, false, true, true, true)) { ModelState.AddModelError(string.Empty, string.Format(_locService.GetResource("ConfigureFilePermissions"), CurrentOSUser.FullName, file)); } } if (!ModelState.IsValid) { return(View(model)); } try { var connectionString = string.Empty; if (model.DataProvider == DataProviderType.SqlServer) { //SQL Server if (model.SqlConnectionInfo.Equals("sqlconnectioninfo_raw", StringComparison.InvariantCultureIgnoreCase)) { //raw connection string //we know that MARS option is required when using Entity Framework //let's ensure that it's specified var sqlCsb = new SqlConnectionStringBuilder(model.DatabaseConnectionString); if (UseMars) { sqlCsb.MultipleActiveResultSets = true; } connectionString = sqlCsb.ToString(); } else { //values connectionString = CreateConnectionString(model.SqlAuthenticationType == "windowsauthentication", model.SqlServerName, model.SqlDatabaseName, model.SqlServerUsername, model.SqlServerPassword); } if (model.SqlServerCreateDatabase) { if (!SqlServerDatabaseExists(connectionString)) { //create database var collation = model.UseCustomCollation ? model.Collation : string.Empty; var errorCreatingDatabase = CreateDatabase(connectionString, collation); if (!string.IsNullOrEmpty(errorCreatingDatabase)) { throw new Exception(errorCreatingDatabase); } } } else { //check whether database exists if (!SqlServerDatabaseExists(connectionString)) { throw new Exception(_locService.GetResource("DatabaseNotExists")); } } } //save settings DataSettingsManager.SaveSettings(new DataSettings { DataProvider = model.DataProvider, DataConnectionString = connectionString }, _fileProvider); //initialize database EngineContext.Current.Resolve <IDataProvider>().InitializeDatabase(); //now resolve installation service var installationService = EngineContext.Current.Resolve <IInstallationService>(); installationService.InstallRequiredData(model.AdminEmail, model.AdminPassword); if (model.InstallSampleData) { installationService.InstallSampleData(model.AdminEmail); } //reset cache DataSettingsManager.ResetCache(); //prepare plugins to install var pluginService = EngineContext.Current.Resolve <IPluginService>(); pluginService.ClearInstalledPluginsList(); var pluginsIgnoredDuringInstallation = new List <string>(); if (!string.IsNullOrEmpty(_config.PluginsIgnoredDuringInstallation)) { pluginsIgnoredDuringInstallation = _config.PluginsIgnoredDuringInstallation .Split(',', StringSplitOptions.RemoveEmptyEntries).Select(pluginName => pluginName.Trim()).ToList(); } var plugins = pluginService.GetPluginDescriptors <IPlugin>(LoadPluginsMode.All) .Where(pluginDescriptor => !pluginsIgnoredDuringInstallation.Contains(pluginDescriptor.SystemName)) .OrderBy(pluginDescriptor => pluginDescriptor.Group).ThenBy(pluginDescriptor => pluginDescriptor.DisplayOrder) .ToList(); foreach (var plugin in plugins) { pluginService.PreparePluginToInstall(plugin.SystemName, checkDependencies: false); } //register default permissions //var permissionProviders = EngineContext.Current.Resolve<ITypeFinder>().FindClassesOfType<IPermissionProvider>(); var permissionProviders = new List <Type> { typeof(StandardPermissionProvider) }; foreach (var providerType in permissionProviders) { var provider = (IPermissionProvider)Activator.CreateInstance(providerType); EngineContext.Current.Resolve <IPermissionService>().InstallPermissions(provider); } //restart application webHelper.RestartAppDomain(); //Redirect to home page return(RedirectToRoute("Homepage")); } catch (Exception exception) { //reset cache DataSettingsManager.ResetCache(); var cacheManager = EngineContext.Current.Resolve <IStaticCacheManager>(); cacheManager.Clear(); //clear provider settings if something got wrong DataSettingsManager.SaveSettings(new DataSettings(), _fileProvider); ModelState.AddModelError(string.Empty, string.Format(_locService.GetResource("SetupFailed"), exception.Message)); } return(View(model)); }
public void Index() { /* * if (DataSettingsHelper.DatabaseIsInstalled()) * return RedirectToRoute("HomePage"); * * //set page timeout to 5 minutes * this.Server.ScriptTimeout = 300; * * if (model.DatabaseConnectionString != null) * model.DatabaseConnectionString = model.DatabaseConnectionString.Trim(); * * //prepare language list * foreach (var lang in _locService.GetAvailableLanguages()) * { * model.AvailableLanguages.Add(new SelectListItem * { * Value = Url.Action("ChangeLanguage", "Install", new { language = lang.Code }), * Text = lang.Name, * Selected = _locService.GetCurrentLanguage().Code == lang.Code, * }); * } * model.DisableSqlCompact = !String.IsNullOrEmpty(ConfigurationManager.AppSettings["UseFastInstallationService"]) && * Convert.ToBoolean(ConfigurationManager.AppSettings["UseFastInstallationService"]); * model.DisableSampleDataOption = !String.IsNullOrEmpty(ConfigurationManager.AppSettings["DisableSampleDataDuringInstallation"]) && * Convert.ToBoolean(ConfigurationManager.AppSettings["DisableSampleDataDuringInstallation"]); * * //SQL Server * if (model.DataProvider.Equals("sqlserver", StringComparison.InvariantCultureIgnoreCase)) * { * if (model.SqlConnectionInfo.Equals("sqlconnectioninfo_raw", StringComparison.InvariantCultureIgnoreCase)) * { * //raw connection string * if (string.IsNullOrEmpty(model.DatabaseConnectionString)) * ModelState.AddModelError("", _locService.GetResource("ConnectionStringRequired")); * * try * { * //try to create connection string * new SqlConnectionStringBuilder(model.DatabaseConnectionString); * } * catch * { * ModelState.AddModelError("", _locService.GetResource("ConnectionStringWrongFormat")); * } * } * else * { * //values * if (string.IsNullOrEmpty(model.SqlServerName)) * ModelState.AddModelError("", _locService.GetResource("SqlServerNameRequired")); * if (string.IsNullOrEmpty(model.SqlDatabaseName)) * ModelState.AddModelError("", _locService.GetResource("DatabaseNameRequired")); * * //authentication type * if (model.SqlAuthenticationType.Equals("sqlauthentication", StringComparison.InvariantCultureIgnoreCase)) * { * //SQL authentication * if (string.IsNullOrEmpty(model.SqlServerUsername)) * ModelState.AddModelError("", _locService.GetResource("SqlServerUsernameRequired")); * if (string.IsNullOrEmpty(model.SqlServerPassword)) * ModelState.AddModelError("", _locService.GetResource("SqlServerPasswordRequired")); * } * } * } * * * //Consider granting access rights to the resource to the ASP.NET request identity. * //ASP.NET has a base process identity * //(typically {MACHINE}\ASPNET on IIS 5 or Network Service on IIS 6 and IIS 7, * //and the configured application pool identity on IIS 7.5) that is used if the application is not impersonating. * //If the application is impersonating via <identity impersonate="true"/>, * //the identity will be the anonymous user (typically IUSR_MACHINENAME) or the authenticated request user. * var webHelper = EngineContext.Current.Resolve<IWebHelper>(); * //validate permissions * var dirsToCheck = FilePermissionHelper.GetDirectoriesWrite(webHelper); * foreach (string dir in dirsToCheck) * if (!FilePermissionHelper.CheckPermissions(dir, false, true, true, false)) * ModelState.AddModelError("", string.Format(_locService.GetResource("ConfigureDirectoryPermissions"), WindowsIdentity.GetCurrent().Name, dir)); * * var filesToCheck = FilePermissionHelper.GetFilesWrite(webHelper); * foreach (string file in filesToCheck) * if (!FilePermissionHelper.CheckPermissions(file, false, true, true, true)) * ModelState.AddModelError("", string.Format(_locService.GetResource("ConfigureFilePermissions"), WindowsIdentity.GetCurrent().Name, file)); * * if (ModelState.IsValid) * { * var settingsManager = new DataSettingsManager(); * try * { * string connectionString; * if (model.DataProvider.Equals("sqlserver", StringComparison.InvariantCultureIgnoreCase)) * { * //SQL Server * * if (model.SqlConnectionInfo.Equals("sqlconnectioninfo_raw", StringComparison.InvariantCultureIgnoreCase)) * { * //raw connection string * * //we know that MARS option is required when using Entity Framework * //let's ensure that it's specified * var sqlCsb = new SqlConnectionStringBuilder(model.DatabaseConnectionString); * if (this.UseMars) * { * sqlCsb.MultipleActiveResultSets = true; * } * connectionString = sqlCsb.ToString(); * } * else * { * //values * connectionString = CreateConnectionString(model.SqlAuthenticationType == "windowsauthentication", * model.SqlServerName, model.SqlDatabaseName, * model.SqlServerUsername, model.SqlServerPassword); * } * * if (model.SqlServerCreateDatabase) * { * if (!SqlServerDatabaseExists(connectionString)) * { * //create database * var collation = model.UseCustomCollation ? model.Collation : ""; * var errorCreatingDatabase = CreateDatabase(connectionString, collation); * if (!String.IsNullOrEmpty(errorCreatingDatabase)) * throw new Exception(errorCreatingDatabase); * * //Database cannot be created sometimes. Weird! Seems to be Entity Framework issue * //that's just wait 3 seconds * Thread.Sleep(3000); * } * } * else * { * //check whether database exists * if (!SqlServerDatabaseExists(connectionString)) * throw new Exception(_locService.GetResource("DatabaseNotExists")); * } * } * else * { * //SQL CE * string databaseFileName = "Nop.Db.sdf"; * string databasePath = @"|DataDirectory|\" + databaseFileName; * connectionString = "Data Source=" + databasePath + ";Persist Security Info=False"; * * //drop database if exists * string databaseFullPath = HostingEnvironment.MapPath("~/App_Data/") + databaseFileName; * if (System.IO.File.Exists(databaseFullPath)) * { * System.IO.File.Delete(databaseFullPath); * } * } * * //save settings * var dataProvider = model.DataProvider; * var settings = new DataSettings * { * DataProvider = dataProvider, * DataConnectionString = connectionString * }; * settingsManager.SaveSettings(settings); * * //init data provider * var dataProviderInstance = EngineContext.Current.Resolve<BaseDataProviderManager>().LoadDataProvider(); * dataProviderInstance.InitDatabase(); * * * //now resolve installation service * var installationService = EngineContext.Current.Resolve<IInstallationService>(); * installationService.InstallData(model.AdminEmail, model.AdminPassword, model.InstallSampleData); * * //reset cache * DataSettingsHelper.ResetCache(); * * //install plugins * PluginManager.MarkAllPluginsAsUninstalled(); * var pluginFinder = EngineContext.Current.Resolve<IPluginFinder>(); * var plugins = pluginFinder.GetPlugins<IPlugin>(LoadPluginsMode.All) * .ToList() * .OrderBy(x => x.PluginDescriptor.Group) * .ThenBy(x => x.PluginDescriptor.DisplayOrder) * .ToList(); * var pluginsIgnoredDuringInstallation = String.IsNullOrEmpty(ConfigurationManager.AppSettings["PluginsIgnoredDuringInstallation"]) ? * new List<string>(): * ConfigurationManager.AppSettings["PluginsIgnoredDuringInstallation"] * .Split(new [] {','}, StringSplitOptions.RemoveEmptyEntries) * .Select(x => x.Trim()) * .ToList(); * foreach (var plugin in plugins) * { * if (pluginsIgnoredDuringInstallation.Contains(plugin.PluginDescriptor.SystemName)) * continue; * plugin.Install(); * } * * //register default permissions * //var permissionProviders = EngineContext.Current.Resolve<ITypeFinder>().FindClassesOfType<IPermissionProvider>(); * var permissionProviders = new List<Type>(); * permissionProviders.Add(typeof(StandardPermissionProvider)); * foreach (var providerType in permissionProviders) * { * dynamic provider = Activator.CreateInstance(providerType); * EngineContext.Current.Resolve<IPermissionService>().InstallPermissions(provider); * } * * //restart application * webHelper.RestartAppDomain(); * * //Redirect to home page * return RedirectToRoute("HomePage"); * } * catch (Exception exception) * { * //reset cache * DataSettingsHelper.ResetCache(); * * //clear provider settings if something got wrong * settingsManager.SaveSettings(new DataSettings * { * DataProvider = null, * DataConnectionString = null * }); * * ModelState.AddModelError("", string.Format(_locService.GetResource("SetupFailed"), exception.Message)); * } * } * */ // return View(); var settingsManager = new DataSettingsManager(); //save settings var dataProvider = "mysql"; var settings = new DataSettings { DataProvider = dataProvider, DataConnectionString = CreateConnectionString(false, "localhost", "disk", "root", "root") }; settingsManager.SaveSettings(settings); }
private static async Task EnsureMembership(IMembershipService membershipService, IEnumerable <int> tenantIds) { // We only run this method to ensure that the admin user has been setup as part of the installation process. // If there are any users already in the DB... if (await membershipService.GetAllUsersAsQueryable(null).AnyAsync()) { // ... we assume the admin user is one of them. No need for further querying... return; } var dataSettings = EngineContext.Current.Resolve <DataSettings>(); var adminUser = await membershipService.GetUserByEmail(null, dataSettings.AdminEmail); if (adminUser == null) { await membershipService.InsertUser( new KoreUser { TenantId = null, UserName = dataSettings.AdminEmail, Email = dataSettings.AdminEmail }, dataSettings.AdminPassword); adminUser = await membershipService.GetUserByEmail(null, dataSettings.AdminEmail); // TODO: This doesn't work. Gets error like "No owin.Environment item was found in the context." //// Confirm User //string token = await membershipService.GenerateEmailConfirmationToken(adminUser.Id); //await membershipService.ConfirmEmail(adminUser.Id, token); KoreRole administratorsRole = null; if (adminUser != null) { administratorsRole = await membershipService.GetRoleByName(null, KoreWebConstants.Roles.Administrators); if (administratorsRole == null) { await membershipService.InsertRole(new KoreRole { TenantId = null, Name = KoreWebConstants.Roles.Administrators }); administratorsRole = await membershipService.GetRoleByName(null, KoreWebConstants.Roles.Administrators); await membershipService.AssignUserToRoles(null, adminUser.Id, new[] { administratorsRole.Id }); } } if (membershipService.SupportsRolePermissions && administratorsRole != null) { var fullAccessPermission = await membershipService.GetPermissionByName(null, StandardPermissions.FullAccess.Name); await membershipService.AssignPermissionsToRole(administratorsRole.Id, new[] { fullAccessPermission.Id }); } dataSettings.AdminPassword = null; DataSettingsManager.SaveSettings(dataSettings); } if (membershipService.SupportsRolePermissions) { foreach (int tenantId in tenantIds) { await membershipService.EnsureAdminRoleForTenant(tenantId); } } }
public static void Install <TContext>(InstallationModel model) where TContext : DbContext, IKoreDbContext, ISupportSeed, new() { var dataSettings = EngineContext.Current.Resolve <DataSettings>(); string connectionString = string.Empty; if (model.EnterConnectionString) { connectionString = model.ConnectionString; } else { if (model.UseWindowsAuthentication) { connectionString = string.Format( ConnectionStringWAFormat, model.DatabaseServer, model.DatabaseName); } else { connectionString = string.Format( ConnectionStringFormat, model.DatabaseServer, model.DatabaseName, model.DatabaseUsername, model.DatabasePassword); } } dataSettings.ConnectionString = connectionString; // We need to save the Password to settings temporarily in order to setup the login details AFTER restarting the app domain // We then delete the password from the XML file in Kore.Web.Infrastructure.StartupTask. dataSettings.AdminEmail = model.AdminEmail; dataSettings.AdminPassword = model.AdminPassword; dataSettings.CreateSampleData = model.CreateSampleData; dataSettings.DefaultLanguage = model.DefaultLanguage; dataSettings.Theme = model.Theme; DataSettingsManager.SaveSettings(dataSettings); using (var context = new TContext()) { context.Database.Connection.ConnectionString = connectionString; bool dbExists = context.Database.Exists(); if (dbExists) { int numberOfTables = context.Database.SqlQuery <int>( "SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE table_type = 'BASE TABLE'").FirstAsync().Result; if (numberOfTables == 0) { var dbCreationScript = ((IObjectContextAdapter)context).ObjectContext.CreateDatabaseScript(); context.Database.ExecuteSqlCommand(dbCreationScript); } } else { context.Database.Create(); } context.Seed(); } DataSettingsHelper.ResetCache(); var webHelper = EngineContext.Current.Resolve <IWebHelper>(); webHelper.RestartAppDomain(); }