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 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)); }
/// <summary> /// Implements <see cref="IWizard.RunStarted"/> /// </summary> protected void RunStarted(object automationObject, Dictionary <string, string> replacementsDictionary, WizardRunKind runKind, object[] customParams) { IOleServiceProvider oleServiceProvider = automationObject as IOleServiceProvider; ServiceProvider serviceProvider = (oleServiceProvider != null) ? new ServiceProvider(oleServiceProvider) : null; DataConnectionDialogFactory dialogFactory = GetService <DataConnectionDialogFactory>(serviceProvider); Debug.Assert(dialogFactory != null, "Can't get DataConnectionDialogFactory!"); System.Data.IDbConnection dbConn; DataConnectionDialog dialog = dialogFactory.CreateConnectionDialog(); dialog.AddAllSources(); DataConnection dataConn = dialog.ShowDialog(false); if (dataConn != null) { if ((dbConn = dataConn.ConnectionSupport.ProviderObject as System.Data.IDbConnection) == null) { // show error return; } DataProviderManager manager = GetService <DataProviderManager>(serviceProvider); if (manager != null) { DataProvider provider = manager.GetDataProvider(dataConn.Provider); string invariantName = provider.GetProperty("InvariantName") as string; IList <string> schemaList = DcilSchema.GetAvailableSchemaNames(dbConn, invariantName); string selectedSchema = null; switch (schemaList.Count) { case 1: selectedSchema = schemaList[0]; break; default: // Allow this for an empty list selectedSchema = SchemaSelector.SelectSchema(serviceProvider, schemaList); break; } if (!string.IsNullOrEmpty(selectedSchema)) { DcilSchema schema = DcilSchema.FromSchemaName(selectedSchema, dbConn, invariantName); StringBuilder stringBuilder = new StringBuilder(); string replacementString = null; using (MemoryStream ms = new MemoryStream()) { DcilSchema.Serialize(schema, ms); ms.Seek(0, SeekOrigin.Begin); StreamReader sr = new StreamReader(ms); replacementString = sr.ReadToEnd(); } replacementsDictionary.Add("$DcilFile$", replacementString); myAddToProject = true; } } } }
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..]);