private HealthCheckStatus CheckFolderPermissions() { // Create lists of paths to check along with a flag indicating if modify rights are required // in ALL circumstances or just some var pathsToCheck = new Dictionary <string, PermissionCheckRequirement> { { SystemDirectories.AppCode, PermissionCheckRequirement.Optional }, { SystemDirectories.Data, PermissionCheckRequirement.Required }, { SystemDirectories.Packages, PermissionCheckRequirement.Required }, { SystemDirectories.Preview, PermissionCheckRequirement.Required }, { SystemDirectories.AppPlugins, PermissionCheckRequirement.Required }, { SystemDirectories.Bin, PermissionCheckRequirement.Optional }, { SystemDirectories.Config, PermissionCheckRequirement.Optional }, { SystemDirectories.Css, PermissionCheckRequirement.Optional }, { SystemDirectories.Masterpages, PermissionCheckRequirement.Optional }, { SystemDirectories.Media, PermissionCheckRequirement.Optional }, { SystemDirectories.Scripts, PermissionCheckRequirement.Optional }, { SystemDirectories.Umbraco, PermissionCheckRequirement.Optional }, { SystemDirectories.UmbracoClient, PermissionCheckRequirement.Optional }, { SystemDirectories.UserControls, PermissionCheckRequirement.Optional }, { SystemDirectories.MvcViews, PermissionCheckRequirement.Optional }, { SystemDirectories.Xslt, PermissionCheckRequirement.Optional }, }; // Run checks for required and optional paths for modify permission List <string> requiredFailedPaths; List <string> optionalFailedPaths; var requiredPathCheckResult = FilePermissionHelper.TestDirectories(GetPathsToCheck(pathsToCheck, PermissionCheckRequirement.Required), out requiredFailedPaths); var optionalPathCheckResult = FilePermissionHelper.TestDirectories(GetPathsToCheck(pathsToCheck, PermissionCheckRequirement.Optional), out optionalFailedPaths); return(GetStatus(requiredPathCheckResult, requiredFailedPaths, optionalPathCheckResult, optionalFailedPaths, PermissionCheckFor.Folder)); }
/// <summary> /// Prepare file permissions warning model /// </summary> /// <param name="models">List of system warning models</param> /// <returns>A task that represents the asynchronous operation</returns> protected virtual async Task PrepareFilePermissionsWarningModelAsync(IList<SystemWarningModel> models) { if (models == null) throw new ArgumentNullException(nameof(models)); var dirPermissionsOk = true; var dirsToCheck = FilePermissionHelper.GetDirectoriesWrite(); foreach (var dir in dirsToCheck) { if (FilePermissionHelper.CheckPermissions(dir, false, true, true, false)) continue; models.Add(new SystemWarningModel { Level = SystemWarningLevel.Warning, Text = string.Format(await _localizationService.GetResourceAsync("Admin.System.Warnings.DirectoryPermission.Wrong"), CurrentOSUser.FullName, dir) }); dirPermissionsOk = false; } if (dirPermissionsOk) { models.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = await _localizationService.GetResourceAsync("Admin.System.Warnings.DirectoryPermission.OK") }); } var filePermissionsOk = true; var filesToCheck = FilePermissionHelper.GetFilesWrite(); foreach (var file in filesToCheck) { if (FilePermissionHelper.CheckPermissions(file, false, true, true, true)) continue; models.Add(new SystemWarningModel { Level = SystemWarningLevel.Warning, Text = string.Format(await _localizationService.GetResourceAsync("Admin.System.Warnings.FilePermission.Wrong"), CurrentOSUser.FullName, file) }); filePermissionsOk = false; } if (filePermissionsOk) { models.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = await _localizationService.GetResourceAsync("Admin.System.Warnings.FilePermission.OK") }); } }
public override InstallSetupResult Execute(object model) { // validate file permissions Dictionary <string, IEnumerable <string> > report; var permissionsOk = FilePermissionHelper.RunFilePermissionTestSuite(out report); if (permissionsOk == false) { throw new InstallException("Permission check failed", "permissionsreport", new { errors = report }); } return(null); }
private HealthCheckStatus CheckFolderPermissions() { // Create lists of paths to check along with a flag indicating if modify rights are required // in ALL circumstances or just some var pathsToCheck = new Dictionary <string, PermissionCheckRequirement> { { SystemDirectories.Data, PermissionCheckRequirement.Required }, { SystemDirectories.Packages, PermissionCheckRequirement.Required }, { SystemDirectories.Preview, PermissionCheckRequirement.Required }, { SystemDirectories.AppPlugins, PermissionCheckRequirement.Required }, { SystemDirectories.Config, PermissionCheckRequirement.Optional }, { SystemDirectories.Css, PermissionCheckRequirement.Optional }, { SystemDirectories.Masterpages, PermissionCheckRequirement.Optional }, { SystemDirectories.Media, PermissionCheckRequirement.Optional }, { SystemDirectories.Scripts, PermissionCheckRequirement.Optional }, { SystemDirectories.Umbraco, PermissionCheckRequirement.Optional }, { SystemDirectories.UmbracoClient, PermissionCheckRequirement.Optional }, { SystemDirectories.UserControls, PermissionCheckRequirement.Optional }, { SystemDirectories.MvcViews, PermissionCheckRequirement.Optional }, { SystemDirectories.Xslt, PermissionCheckRequirement.Optional }, }; //These are special paths to check that will restart an app domain if a file is written to them, //so these need to be tested differently var pathsToCheckWithRestarts = new Dictionary <string, PermissionCheckRequirement> { { SystemDirectories.AppCode, PermissionCheckRequirement.Optional }, { SystemDirectories.Bin, PermissionCheckRequirement.Optional } }; // Run checks for required and optional paths for modify permission List <string> requiredFailedPaths; List <string> optionalFailedPaths; var requiredPathCheckResult = FilePermissionHelper.TestDirectories(GetPathsToCheck(pathsToCheck, PermissionCheckRequirement.Required), out requiredFailedPaths); var optionalPathCheckResult = FilePermissionHelper.TestDirectories(GetPathsToCheck(pathsToCheck, PermissionCheckRequirement.Optional), out optionalFailedPaths); //now check the special folders List <string> requiredFailedPaths2; List <string> optionalFailedPaths2; var requiredPathCheckResult2 = FilePermissionHelper.TestDirectories(GetPathsToCheck(pathsToCheckWithRestarts, PermissionCheckRequirement.Required), out requiredFailedPaths2, writeCausesRestart: true); var optionalPathCheckResult2 = FilePermissionHelper.TestDirectories(GetPathsToCheck(pathsToCheckWithRestarts, PermissionCheckRequirement.Optional), out optionalFailedPaths2, writeCausesRestart: true); requiredPathCheckResult = requiredPathCheckResult && requiredPathCheckResult2; optionalPathCheckResult = optionalPathCheckResult && optionalPathCheckResult2; //combine the paths requiredFailedPaths = requiredFailedPaths.Concat(requiredFailedPaths2).ToList(); optionalFailedPaths = requiredFailedPaths.Concat(optionalFailedPaths2).ToList(); return(GetStatus(requiredPathCheckResult, requiredFailedPaths, optionalPathCheckResult, optionalFailedPaths, PermissionCheckFor.Folder)); }
public override InstallSetupResult Execute(object model) { //first validate file permissions var permissionsOk = true; Dictionary <string, List <string> > reportParts; permissionsOk = FilePermissionHelper.RunFilePermissionTestSuite(out reportParts); if (permissionsOk == false) { throw new InstallException("Permission check failed", "permissionsreport", new { errors = reportParts }); } return(null); }
private HealthCheckStatus CheckFilePermissions() { // Create lists of paths to check along with a flag indicating if modify rights are required // in ALL circumstances or just some var pathsToCheck = new Dictionary <string, PermissionCheckRequirement> { { "~/Web.config", PermissionCheckRequirement.Optional }, }; // Run checks for required and optional paths for modify permission IEnumerable <string> requiredFailedPaths; IEnumerable <string> optionalFailedPaths; var requiredPathCheckResult = FilePermissionHelper.EnsureFiles(GetPathsToCheck(pathsToCheck, PermissionCheckRequirement.Required), out requiredFailedPaths); var optionalPathCheckResult = FilePermissionHelper.EnsureFiles(GetPathsToCheck(pathsToCheck, PermissionCheckRequirement.Optional), out optionalFailedPaths); return(GetStatus(requiredPathCheckResult, requiredFailedPaths, optionalPathCheckResult, optionalFailedPaths, PermissionCheckFor.File)); }
protected virtual InstallationResult InstallCore(ILifetimeScope scope, InstallModel model) { UpdateResult(x => { x.ProgressMessage = _locService.GetResource("Progress.CheckingRequirements"); x.Completed = false; Logger.Info(x.ProgressMessage); }); if (DataSettings.DatabaseIsInstalled()) { return(UpdateResult(x => { x.Success = true; x.RedirectUrl = Url.Action("Index", "Home"); Logger.Info("Application already installed"); })); } // 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)) { UpdateResult(x => { x.Errors.Add(_locService.GetResource("ConnectionStringRequired")); Logger.Error(x.Errors.Last()); }); } try { // try to create connection string new SqlConnectionStringBuilder(model.DatabaseConnectionString); } catch (Exception ex) { UpdateResult(x => { x.Errors.Add(_locService.GetResource("ConnectionStringWrongFormat")); Logger.Error(ex, x.Errors.Last()); }); } } else { // values if (string.IsNullOrEmpty(model.SqlServerName)) { UpdateResult(x => { x.Errors.Add(_locService.GetResource("SqlServerNameRequired")); Logger.Error(x.Errors.Last()); }); } if (string.IsNullOrEmpty(model.SqlDatabaseName)) { UpdateResult(x => { x.Errors.Add(_locService.GetResource("DatabaseNameRequired")); Logger.Error(x.Errors.Last()); }); } // authentication type if (model.SqlAuthenticationType.Equals("sqlauthentication", StringComparison.InvariantCultureIgnoreCase)) { // SQL authentication if (string.IsNullOrEmpty(model.SqlServerUsername)) { UpdateResult(x => { x.Errors.Add(_locService.GetResource("SqlServerUsernameRequired")); Logger.Error(x.Errors.Last()); }); } if (string.IsNullOrEmpty(model.SqlServerPassword)) { UpdateResult(x => { x.Errors.Add(_locService.GetResource("SqlServerPasswordRequired")); Logger.Error(x.Errors.Last()); }); } } } } // 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 = scope.Resolve <IWebHelper>(); // validate permissions var dirsToCheck = FilePermissionHelper.GetDirectoriesWrite(webHelper); foreach (string dir in dirsToCheck) { if (!FilePermissionHelper.CheckPermissions(dir, false, true, true, false)) { UpdateResult(x => { x.Errors.Add(string.Format(_locService.GetResource("ConfigureDirectoryPermissions"), WindowsIdentity.GetCurrent().Name, dir)); Logger.Error(x.Errors.Last()); }); } } var filesToCheck = FilePermissionHelper.GetFilesWrite(webHelper); foreach (string file in filesToCheck) { if (!FilePermissionHelper.CheckPermissions(file, false, true, true, true)) { UpdateResult(x => { x.Errors.Add(string.Format(_locService.GetResource("ConfigureFilePermissions"), WindowsIdentity.GetCurrent().Name, file)); Logger.Error(x.Errors.Last()); }); } } if (GetInstallResult().HasErrors) { return(UpdateResult(x => { x.Completed = true; x.Success = false; x.RedirectUrl = null; Logger.Error("Aborting installation."); })); } else { SmartObjectContext dbContext = null; var shouldDeleteDbOnFailure = false; try { string connectionString = null; 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); 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 (errorCreatingDatabase.HasValue()) { return(UpdateResult(x => { x.Errors.Add(errorCreatingDatabase); x.Completed = true; x.Success = false; x.RedirectUrl = null; Logger.Error(errorCreatingDatabase); })); } else { // Database cannot be created sometimes. Weird! Seems to be Entity Framework issue // that's just wait 3 seconds Thread.Sleep(3000); shouldDeleteDbOnFailure = true; } } } else { // check whether database exists if (!SqlServerDatabaseExists(connectionString)) { return(UpdateResult(x => { x.Errors.Add(_locService.GetResource("DatabaseNotExists")); x.Completed = true; x.Success = false; x.RedirectUrl = null; Logger.Error(x.Errors.Last()); })); } } } else { // SQL CE string databaseFileName = "SmartStore.Db.sdf"; string databasePath = @"|DataDirectory|\Tenants\{0}\{1}".FormatInvariant(DataSettings.Current.TenantName, databaseFileName); connectionString = "Data Source=" + databasePath + "; Persist Security Info=False"; // drop database if exists string databaseFullPath = HostingEnvironment.MapPath(DataSettings.Current.TenantPath.EnsureEndsWith("/")) + databaseFileName; if (System.IO.File.Exists(databaseFullPath)) { System.IO.File.Delete(databaseFullPath); } shouldDeleteDbOnFailure = true; } // save settings var dataProvider = model.DataProvider; var settings = DataSettings.Current; settings.AppVersion = SmartStoreVersion.Version; settings.DataProvider = dataProvider; settings.DataConnectionString = connectionString; settings.Save(); // init data provider var dataProviderInstance = scope.Resolve <IEfDataProvider>(); // Although obsolete we have no other chance than using this here. // Delegating this to DbConfiguration is not possible during installation. #pragma warning disable 618 Database.DefaultConnectionFactory = dataProviderInstance.GetConnectionFactory(); #pragma warning restore 618 // resolve SeedData instance from primary language var lazyLanguage = _locService.GetAppLanguage(model.PrimaryLanguage); if (lazyLanguage == null) { return(UpdateResult(x => { x.Errors.Add(_locService.GetResource("Install.LanguageNotRegistered").FormatInvariant(model.PrimaryLanguage)); x.Completed = true; x.Success = false; x.RedirectUrl = null; Logger.Error(x.Errors.Last()); })); } // create the DataContext dbContext = new SmartObjectContext(); // AuditableHook must run during install dbContext.DbHookHandler = new DefaultDbHookHandler(new[] { new Lazy <IDbHook, HookMetadata>(() => new AuditableHook(), HookMetadata.Create <AuditableHook>(typeof(IAuditable), true), false) }); // IMPORTANT: Migration would run way too early otherwise Database.SetInitializer <SmartObjectContext>(null); // create Language domain object from lazyLanguage var languages = dbContext.Set <Language>(); var primaryLanguage = languages.Create(); // create a proxied type, resources cannot be saved otherwise primaryLanguage.Name = lazyLanguage.Metadata.Name; primaryLanguage.LanguageCulture = lazyLanguage.Metadata.Culture; primaryLanguage.UniqueSeoCode = lazyLanguage.Metadata.UniqueSeoCode; primaryLanguage.FlagImageFileName = lazyLanguage.Metadata.FlagImageFileName; // Build the seed configuration model var seedConfiguration = new SeedDataConfiguration { DefaultUserName = model.AdminEmail, DefaultUserPassword = model.AdminPassword, SeedSampleData = model.InstallSampleData, Data = lazyLanguage.Value, Language = primaryLanguage, StoreMediaInDB = model.MediaStorage == "db", ProgressMessageCallback = msg => UpdateResult(x => x.ProgressMessage = _locService.GetResource(msg)) }; var seeder = new InstallDataSeeder(seedConfiguration, Logger); Database.SetInitializer(new InstallDatabaseInitializer() { DataSeeders = new[] { seeder } }); UpdateResult(x => { x.ProgressMessage = _locService.GetResource("Progress.BuildingDatabase"); Logger.Info(x.ProgressMessage); }); // ===>>> actually performs the installation by calling "InstallDataSeeder.Seed()" internally. dbContext.Database.Initialize(true); // Install plugins. PluginManager.MarkAllPluginsAsUninstalled(); var pluginFinder = scope.Resolve <IPluginFinder>(); var plugins = pluginFinder.GetPlugins <IPlugin>(false) //.ToList() .OrderBy(x => x.PluginDescriptor.Group) .ThenBy(x => x.PluginDescriptor.DisplayOrder) .ToList(); var ignoredPluginsSetting = CommonHelper.GetAppSetting <string>("sm:PluginsIgnoredDuringInstallation"); var pluginsIgnoredDuringInstallation = String.IsNullOrEmpty(ignoredPluginsSetting) ? new List <string>() : ignoredPluginsSetting .Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries) .Select(x => x.Trim()) .ToList(); if (pluginsIgnoredDuringInstallation.Count > 0) { plugins = plugins.Where(x => !pluginsIgnoredDuringInstallation.Contains(x.PluginDescriptor.SystemName, StringComparer.OrdinalIgnoreCase)).ToList(); } var pluginsCount = plugins.Count; var idx = 0; using (var dbScope = new DbContextScope(autoDetectChanges: false, hooksEnabled: false)) { foreach (var plugin in plugins) { try { idx++; UpdateResult(x => { x.ProgressMessage = _locService.GetResource("Progress.InstallingPlugins").FormatInvariant(idx, pluginsCount); Logger.InfoFormat("Installing plugin '{0}'.", plugin.PluginDescriptor.FriendlyName ?? plugin.PluginDescriptor.SystemName); }); plugin.Install(); dbScope.Commit(); } catch (Exception ex) { Logger.Error(ex); if (plugin.PluginDescriptor.Installed) { PluginManager.MarkPluginAsUninstalled(plugin.PluginDescriptor.SystemName); } } } } // Detect media file tracks (must come after plugins installation) UpdateResult(x => { x.ProgressMessage = _locService.GetResource("Progress.ProcessingMedia"); Logger.Info(x.ProgressMessage); }); var mediaTracker = scope.Resolve <IMediaTracker>(); foreach (var album in scope.Resolve <IAlbumRegistry>().GetAlbumNames(true)) { mediaTracker.DetectAllTracks(album, false); } UpdateResult(x => { x.ProgressMessage = _locService.GetResource("Progress.Finalizing"); Logger.Info(x.ProgressMessage); }); // Do not ignore settings migrated by data seeder (e.g. default media storage provider). scope.Resolve <ISettingService>().ClearCache(); // SUCCESS: Redirect to home page return(UpdateResult(x => { x.Completed = true; x.Success = true; x.RedirectUrl = Url.Action("Index", "Home"); Logger.Info("Installation completed successfully"); })); } catch (Exception ex) { Logger.Error(ex); // Clear provider settings if something got wrong DataSettings.Delete(); // Delete Db if it was auto generated if (dbContext != null && shouldDeleteDbOnFailure) { try { Logger.Debug("Deleting database"); dbContext.Database.Delete(); } catch { } } var msg = ex.Message; var realException = ex; while (realException.InnerException != null) { realException = realException.InnerException; } if (!Object.Equals(ex, realException)) { msg += " (" + realException.Message + ")"; } return(UpdateResult(x => { x.Errors.Add(string.Format(_locService.GetResource("SetupFailed"), msg)); x.Success = false; x.Completed = true; x.RedirectUrl = null; })); } finally { if (dbContext != null) { dbContext.Dispose(); } } } }
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 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 async Task <IActionResult> Warnings() { var model = new List <SystemWarningModel>(); //store URL var currentStoreUrl = _storeContext.CurrentStore.Url; if (!String.IsNullOrEmpty(currentStoreUrl) && (currentStoreUrl.Equals(_webHelper.GetStoreLocation(false), StringComparison.OrdinalIgnoreCase) || currentStoreUrl.Equals(_webHelper.GetStoreLocation(true), StringComparison.OrdinalIgnoreCase) )) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = _localizationService.GetResource("Admin.System.Warnings.URL.Match") }); } else { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Warning, Text = string.Format(_localizationService.GetResource("Admin.System.Warnings.URL.NoMatch"), currentStoreUrl, _webHelper.GetStoreLocation(false)) }); } //primary exchange rate currency var perCurrency = await _currencyService.GetCurrencyById(_currencySettings.PrimaryExchangeRateCurrencyId); if (perCurrency != null) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = _localizationService.GetResource("Admin.System.Warnings.ExchangeCurrency.Set"), }); if (perCurrency.Rate != 1) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Fail, Text = _localizationService.GetResource("Admin.System.Warnings.ExchangeCurrency.Rate1") }); } } else { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Fail, Text = _localizationService.GetResource("Admin.System.Warnings.ExchangeCurrency.NotSet") }); } //primary store currency var pscCurrency = await _currencyService.GetCurrencyById(_currencySettings.PrimaryStoreCurrencyId); if (pscCurrency != null) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = _localizationService.GetResource("Admin.System.Warnings.PrimaryCurrency.Set"), }); } else { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Fail, Text = _localizationService.GetResource("Admin.System.Warnings.PrimaryCurrency.NotSet") }); } //base measure weight var bWeight = await _measureService.GetMeasureWeightById(_measureSettings.BaseWeightId); if (bWeight != null) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = _localizationService.GetResource("Admin.System.Warnings.DefaultWeight.Set"), }); if (bWeight.Ratio != 1) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Fail, Text = _localizationService.GetResource("Admin.System.Warnings.DefaultWeight.Ratio1") }); } } else { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Fail, Text = _localizationService.GetResource("Admin.System.Warnings.DefaultWeight.NotSet") }); } //base dimension weight var bDimension = await _measureService.GetMeasureDimensionById(_measureSettings.BaseDimensionId); if (bDimension != null) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = _localizationService.GetResource("Admin.System.Warnings.DefaultDimension.Set"), }); if (bDimension.Ratio != 1) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Fail, Text = _localizationService.GetResource("Admin.System.Warnings.DefaultDimension.Ratio1") }); } } else { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Fail, Text = _localizationService.GetResource("Admin.System.Warnings.DefaultDimension.NotSet") }); } //shipping rate coputation methods var srcMethods = await _shippingService.LoadActiveShippingRateComputationMethods(); if (srcMethods.Count == 0) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Fail, Text = _localizationService.GetResource("Admin.System.Warnings.Shipping.NoComputationMethods") }); } if (srcMethods.Count(x => x.ShippingRateComputationMethodType == ShippingRateComputationMethodType.Offline) > 1) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Warning, Text = _localizationService.GetResource("Admin.System.Warnings.Shipping.OnlyOneOffline") }); } //payment methods if ((await _paymentService.LoadActivePaymentMethods()).Any()) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = _localizationService.GetResource("Admin.System.Warnings.PaymentMethods.OK") }); } else { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Fail, Text = _localizationService.GetResource("Admin.System.Warnings.PaymentMethods.NoActive") }); } //incompatible plugins if (PluginManager.IncompatiblePlugins != null) { foreach (var pluginName in PluginManager.IncompatiblePlugins) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Warning, Text = string.Format(_localizationService.GetResource("Admin.System.Warnings.IncompatiblePlugin"), pluginName) }); } } //performance settings if (!_catalogSettings.IgnoreStoreLimitations && (await _storeService.GetAllStores()).Count == 1) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Warning, Text = _localizationService.GetResource("Admin.System.Warnings.Performance.IgnoreStoreLimitations") }); } if (!_catalogSettings.IgnoreAcl) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Warning, Text = _localizationService.GetResource("Admin.System.Warnings.Performance.IgnoreAcl") }); } //validate write permissions (the same procedure like during installation) var dirPermissionsOk = true; var dirsToCheck = FilePermissionHelper.GetDirectoriesWrite(); foreach (string dir in dirsToCheck) { if (!FilePermissionHelper.CheckPermissions(dir, false, true, true, false)) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Warning, Text = string.Format(_localizationService.GetResource("Admin.System.Warnings.DirectoryPermission.Wrong"), WindowsIdentity.GetCurrent().Name, dir) }); dirPermissionsOk = false; } } if (dirPermissionsOk) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = _localizationService.GetResource("Admin.System.Warnings.DirectoryPermission.OK") }); } var filePermissionsOk = true; var filesToCheck = FilePermissionHelper.GetFilesWrite(); foreach (string file in filesToCheck) { if (!FilePermissionHelper.CheckPermissions(file, false, true, true, true)) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Warning, Text = string.Format(_localizationService.GetResource("Admin.System.Warnings.FilePermission.Wrong"), WindowsIdentity.GetCurrent().Name, file) }); filePermissionsOk = false; } } if (filePermissionsOk) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = _localizationService.GetResource("Admin.System.Warnings.FilePermission.OK") }); } 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 ActionResult Warnings() { if (!_permissionService.Authorize(StandardPermissionProvider.ManageMaintenance)) { return(AccessDeniedView()); } var model = new List <SystemWarningModel>(); //store URL var currentStoreUrl = _storeContext.CurrentStore.Url; if (!String.IsNullOrEmpty(currentStoreUrl) && (currentStoreUrl.Equals(_webHelper.GetStoreLocation(false), StringComparison.InvariantCultureIgnoreCase) || currentStoreUrl.Equals(_webHelper.GetStoreLocation(true), StringComparison.InvariantCultureIgnoreCase) )) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = _localizationService.GetResource("Admin.System.Warnings.URL.Match") }); } else { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Warning, Text = string.Format(_localizationService.GetResource("Admin.System.Warnings.URL.NoMatch"), currentStoreUrl, _webHelper.GetStoreLocation(false)) }); } //incompatible plugins if (PluginManager.IncompatiblePlugins != null) { foreach (var pluginName in PluginManager.IncompatiblePlugins) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Warning, Text = string.Format(_localizationService.GetResource("Admin.System.Warnings.IncompatiblePlugin"), pluginName) }); } } //performance settings if (!_catalogSettings.IgnoreStoreLimitations && _storeService.GetAllStores().Count == 1) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Warning, Text = _localizationService.GetResource("Admin.System.Warnings.Performance.IgnoreStoreLimitations") }); } if (!_catalogSettings.IgnoreAcl) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Warning, Text = _localizationService.GetResource("Admin.System.Warnings.Performance.IgnoreAcl") }); } //validate write permissions (the same procedure like during installation) var dirPermissionsOk = true; var dirsToCheck = FilePermissionHelper.GetDirectoriesWrite(); foreach (string dir in dirsToCheck) { if (!FilePermissionHelper.CheckPermissions(dir, false, true, true, false)) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Warning, Text = string.Format(_localizationService.GetResource("Admin.System.Warnings.DirectoryPermission.Wrong"), WindowsIdentity.GetCurrent().Name, dir) }); dirPermissionsOk = false; } } if (dirPermissionsOk) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = _localizationService.GetResource("Admin.System.Warnings.DirectoryPermission.OK") }); } var filePermissionsOk = true; var filesToCheck = FilePermissionHelper.GetFilesWrite(); foreach (string file in filesToCheck) { if (!FilePermissionHelper.CheckPermissions(file, false, true, true, true)) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Warning, Text = string.Format(_localizationService.GetResource("Admin.System.Warnings.FilePermission.Wrong"), WindowsIdentity.GetCurrent().Name, file) }); filePermissionsOk = false; } } if (filePermissionsOk) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = _localizationService.GetResource("Admin.System.Warnings.FilePermission.OK") }); } //machine key try { var machineKeySection = ConfigurationManager.GetSection("system.web/machineKey") as MachineKeySection; var machineKeySpecified = machineKeySection != null && !String.IsNullOrEmpty(machineKeySection.DecryptionKey) && !machineKeySection.DecryptionKey.StartsWith("AutoGenerate", StringComparison.InvariantCultureIgnoreCase); if (!machineKeySpecified) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Warning, Text = _localizationService.GetResource("Admin.System.Warnings.MachineKey.NotSpecified") }); } else { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = _localizationService.GetResource("Admin.System.Warnings.MachineKey.Specified") }); } } catch (Exception exc) { LogException(exc); } return(View(model)); }
public virtual async Task <IActionResult> Index(InstallModel model) { if (await DataSettingsManager.IsDatabaseInstalledAsync()) { return(RedirectToRoute("Homepage")); } model.DisableSampleDataOption = _appSettings.InstallationConfig.DisableSampleData; model.InstallRegionalResources = _appSettings.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. 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")); } await DataSettingsManager.SaveSettingsAsync(new DataSettings { DataProvider = model.DataProvider, ConnectionString = connectionString }, _fileProvider); await DataSettingsManager.LoadSettingsAsync(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 (!await dataProvider.DatabaseExistsAsync()) { throw new Exception(_locService.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..]);
protected Task PrepareFilePermissionsWarningModel(IList <SystemWarningModel> models) { if (models == null) { throw new ArgumentNullException(nameof(models)); } var dirPermissionsOk = true; var dirsToCheck = FilePermissionHelper.GetDirectoriesWrite(); foreach (var dir in dirsToCheck) { if (FilePermissionHelper.CheckPermissions(dir, false, true, true, false)) { continue; } models.Add(new SystemWarningModel { Level = SystemWarningLevel.Warning, Text = $"The '{WindowsIdentity.GetCurrent().Name}' account is not granted with Modify permission on folder '{dir}'. Please configure these permissions." }); dirPermissionsOk = false; } if (dirPermissionsOk) { models.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = "All directory permissions are OK" }); } var filePermissionsOk = true; var filesToCheck = FilePermissionHelper.GetFilesWrite(); foreach (var file in filesToCheck) { if (FilePermissionHelper.CheckPermissions(file, false, true, true, true)) { continue; } models.Add(new SystemWarningModel { Level = SystemWarningLevel.Warning, Text = $"The '{WindowsIdentity.GetCurrent().Name}' account is not granted with Modify permission on file '{file}'. Please configure these permissions." }); filePermissionsOk = false; } if (filePermissionsOk) { models.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = "All file permissions are OK" }); } return(Task.CompletedTask); }
public static List <SystemWarningModel> GetWarnings() { var catalogSettings = EngineContext.Current.Resolve <CatalogSettings>(); var currencySettings = EngineContext.Current.Resolve <CurrencySettings>(); var measureSettings = EngineContext.Current.Resolve <MeasureSettings>(); var currencyService = EngineContext.Current.Resolve <ICurrencyService>(); var localizationService = EngineContext.Current.Resolve <ILocalizationService>(); var measureService = EngineContext.Current.Resolve <IMeasureService>(); var paymentService = EngineContext.Current.Resolve <IPaymentService>(); //var storeContext = EngineContext.Current.Resolve<IStoreContext>(); var storeService = EngineContext.Current.Resolve <IStoreService>(); var webHelper = EngineContext.Current.Resolve <IWebHelper>(); var model = new List <SystemWarningModel>(); //store URL var currentStoreUrl = ""; if (!string.IsNullOrEmpty(currentStoreUrl) && (currentStoreUrl.Equals(webHelper.GetStoreLocation(false), StringComparison.InvariantCultureIgnoreCase) || currentStoreUrl.Equals(webHelper.GetStoreLocation(true), StringComparison.InvariantCultureIgnoreCase) )) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = localizationService.GetResource("Admin.System.Warnings.URL.Match") }); } else { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Fail, Text = string.Format(localizationService.GetResource("Admin.System.Warnings.URL.NoMatch"), currentStoreUrl, webHelper.GetStoreLocation(false)) }); } //primary exchange rate currency var perCurrency = currencyService.GetCurrencyById(currencySettings.PrimaryExchangeRateCurrencyId); if (perCurrency != null) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = localizationService.GetResource("Admin.System.Warnings.ExchangeCurrency.Set"), }); if (perCurrency.Rate != 1) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Fail, Text = localizationService.GetResource("Admin.System.Warnings.ExchangeCurrency.Rate1") }); } } else { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Fail, Text = localizationService.GetResource("Admin.System.Warnings.ExchangeCurrency.NotSet") }); } //primary store currency var pscCurrency = currencyService.GetCurrencyById(currencySettings.PrimaryStoreCurrencyId); if (pscCurrency != null) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = localizationService.GetResource("Admin.System.Warnings.PrimaryCurrency.Set"), }); } else { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Fail, Text = localizationService.GetResource("Admin.System.Warnings.PrimaryCurrency.NotSet") }); } //base measure weight var bWeight = measureService.GetMeasureWeightById(measureSettings.BaseWeightId); if (bWeight != null) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = localizationService.GetResource("Admin.System.Warnings.DefaultWeight.Set"), }); if (bWeight.Ratio != 1) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Fail, Text = localizationService.GetResource("Admin.System.Warnings.DefaultWeight.Ratio1") }); } } else { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Fail, Text = localizationService.GetResource("Admin.System.Warnings.DefaultWeight.NotSet") }); } //base dimension weight var bDimension = measureService.GetMeasureDimensionById(measureSettings.BaseDimensionId); if (bDimension != null) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = localizationService.GetResource("Admin.System.Warnings.DefaultDimension.Set"), }); if (bDimension.Ratio != 1) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Fail, Text = localizationService.GetResource("Admin.System.Warnings.DefaultDimension.Ratio1") }); } } else { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Fail, Text = localizationService.GetResource("Admin.System.Warnings.DefaultDimension.NotSet") }); } //payment methods if (paymentService.LoadActivePaymentMethods().Any()) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = localizationService.GetResource("Admin.System.Warnings.PaymentMethods.OK") }); } else { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Fail, Text = localizationService.GetResource("Admin.System.Warnings.PaymentMethods.NoActive") }); } //incompatible plugins if (PluginManager.IncompatiblePlugins != null) { foreach (var pluginName in PluginManager.IncompatiblePlugins) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Warning, Text = string.Format(localizationService.GetResource("Admin.System.Warnings.PluginNotLoaded"), pluginName) }); } } //performance settings if (!catalogSettings.IgnoreStoreLimitations && storeService.GetAllStores().Count == 1) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Warning, Text = localizationService.GetResource("Admin.System.Warnings.Performance.IgnoreStoreLimitations") }); } if (!catalogSettings.IgnoreAcl) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Warning, Text = localizationService.GetResource("Admin.System.Warnings.Performance.IgnoreAcl") }); } //validate write permissions (the same procedure like during installation) var dirPermissionsOk = true; var dirsToCheck = FilePermissionHelper.GetDirectoriesWrite(); foreach (var dir in dirsToCheck) { if (!FilePermissionHelper.CheckPermissions(dir, false, true, true, false)) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Warning, Text = string.Format(localizationService.GetResource("Admin.System.Warnings.DirectoryPermission.Wrong"), WindowsIdentity.GetCurrent().Name, dir) }); dirPermissionsOk = false; } } if (dirPermissionsOk) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = localizationService.GetResource("Admin.System.Warnings.DirectoryPermission.OK") }); } var filePermissionsOk = true; var filesToCheck = FilePermissionHelper.GetFilesWrite(); foreach (var file in filesToCheck) { if (!FilePermissionHelper.CheckPermissions(file, false, true, true, true)) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Warning, Text = string.Format(localizationService.GetResource("Admin.System.Warnings.FilePermission.Wrong"), WindowsIdentity.GetCurrent().Name, file) }); filePermissionsOk = false; } } if (filePermissionsOk) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = localizationService.GetResource("Admin.System.Warnings.FilePermission.OK") }); } return(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 ActionResult Warnings() { var model = new List <SystemWarningModel>(); //store URL var currentStoreUrl = _storeContext.CurrentStore.Url.EnsureEndsWith("/"); if (currentStoreUrl.HasValue() && (currentStoreUrl.IsCaseInsensitiveEqual(_webHelper.GetStoreLocation(false)) || currentStoreUrl.IsCaseInsensitiveEqual(_webHelper.GetStoreLocation(true)))) { model.Add(new SystemWarningModel() { Level = SystemWarningLevel.Pass, Text = _localizationService.GetResource("Admin.System.Warnings.URL.Match") }); } else { model.Add(new SystemWarningModel() { Level = SystemWarningLevel.Warning, Text = string.Format(_localizationService.GetResource("Admin.System.Warnings.URL.NoMatch"), currentStoreUrl, _webHelper.GetStoreLocation(false)) }); } //primary exchange rate currency var perCurrency = _currencyService.GetCurrencyById(_currencySettings.PrimaryExchangeRateCurrencyId); if (perCurrency != null) { model.Add(new SystemWarningModel() { Level = SystemWarningLevel.Pass, Text = _localizationService.GetResource("Admin.System.Warnings.ExchangeCurrency.Set"), }); if (perCurrency.Rate != 1) { model.Add(new SystemWarningModel() { Level = SystemWarningLevel.Fail, Text = _localizationService.GetResource("Admin.System.Warnings.ExchangeCurrency.Rate1") }); } } else { model.Add(new SystemWarningModel() { Level = SystemWarningLevel.Fail, Text = _localizationService.GetResource("Admin.System.Warnings.ExchangeCurrency.NotSet") }); } //primary store currency var pscCurrency = _currencyService.GetCurrencyById(_currencySettings.PrimaryStoreCurrencyId); if (pscCurrency != null) { model.Add(new SystemWarningModel() { Level = SystemWarningLevel.Pass, Text = _localizationService.GetResource("Admin.System.Warnings.PrimaryCurrency.Set"), }); } else { model.Add(new SystemWarningModel() { Level = SystemWarningLevel.Fail, Text = _localizationService.GetResource("Admin.System.Warnings.PrimaryCurrency.NotSet") }); } //base measure weight var bWeight = _measureService.GetMeasureWeightById(_measureSettings.BaseWeightId); if (bWeight != null) { model.Add(new SystemWarningModel() { Level = SystemWarningLevel.Pass, Text = _localizationService.GetResource("Admin.System.Warnings.DefaultWeight.Set"), }); if (bWeight.Ratio != 1) { model.Add(new SystemWarningModel() { Level = SystemWarningLevel.Fail, Text = _localizationService.GetResource("Admin.System.Warnings.DefaultWeight.Ratio1") }); } } else { model.Add(new SystemWarningModel() { Level = SystemWarningLevel.Fail, Text = _localizationService.GetResource("Admin.System.Warnings.DefaultWeight.NotSet") }); } //base dimension weight var bDimension = _measureService.GetMeasureDimensionById(_measureSettings.BaseDimensionId); if (bDimension != null) { model.Add(new SystemWarningModel() { Level = SystemWarningLevel.Pass, Text = _localizationService.GetResource("Admin.System.Warnings.DefaultDimension.Set"), }); if (bDimension.Ratio != 1) { model.Add(new SystemWarningModel() { Level = SystemWarningLevel.Fail, Text = _localizationService.GetResource("Admin.System.Warnings.DefaultDimension.Ratio1") }); } } else { model.Add(new SystemWarningModel() { Level = SystemWarningLevel.Fail, Text = _localizationService.GetResource("Admin.System.Warnings.DefaultDimension.NotSet") }); } //shipping rate coputation methods if (_shippingService.LoadActiveShippingRateComputationMethods() .Where(x => x.ShippingRateComputationMethodType == ShippingRateComputationMethodType.Offline) .Count() > 1) { model.Add(new SystemWarningModel() { Level = SystemWarningLevel.Warning, Text = _localizationService.GetResource("Admin.System.Warnings.Shipping.OnlyOneOffline") }); } //payment methods if (_paymentService.LoadActivePaymentMethods() .Count() > 0) { model.Add(new SystemWarningModel() { Level = SystemWarningLevel.Pass, Text = _localizationService.GetResource("Admin.System.Warnings.PaymentMethods.OK") }); } else { model.Add(new SystemWarningModel() { Level = SystemWarningLevel.Fail, Text = _localizationService.GetResource("Admin.System.Warnings.PaymentMethods.NoActive") }); } //incompatible plugins if (PluginManager.IncompatiblePlugins != null) { foreach (var pluginName in PluginManager.IncompatiblePlugins) { model.Add(new SystemWarningModel() { Level = SystemWarningLevel.Warning, Text = string.Format(_localizationService.GetResource("Admin.System.Warnings.IncompatiblePlugin"), pluginName) }); } } //validate write permissions (the same procedure like during installation) var dirPermissionsOk = true; var dirsToCheck = FilePermissionHelper.GetDirectoriesWrite(_webHelper); foreach (string dir in dirsToCheck) { if (!FilePermissionHelper.CheckPermissions(dir, false, true, true, false)) { model.Add(new SystemWarningModel() { Level = SystemWarningLevel.Warning, Text = string.Format(_localizationService.GetResource("Admin.System.Warnings.DirectoryPermission.Wrong"), WindowsIdentity.GetCurrent().Name, dir) }); dirPermissionsOk = false; } } if (dirPermissionsOk) { model.Add(new SystemWarningModel() { Level = SystemWarningLevel.Pass, Text = _localizationService.GetResource("Admin.System.Warnings.DirectoryPermission.OK") }); } var filePermissionsOk = true; var filesToCheck = FilePermissionHelper.GetFilesWrite(_webHelper); foreach (string file in filesToCheck) { if (!FilePermissionHelper.CheckPermissions(file, false, true, true, true)) { model.Add(new SystemWarningModel() { Level = SystemWarningLevel.Warning, Text = string.Format(_localizationService.GetResource("Admin.System.Warnings.FilePermission.Wrong"), WindowsIdentity.GetCurrent().Name, file) }); filePermissionsOk = false; } } if (filePermissionsOk) { model.Add(new SystemWarningModel() { Level = SystemWarningLevel.Pass, Text = _localizationService.GetResource("Admin.System.Warnings.FilePermission.OK") }); } 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 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 override bool Completed() { return(FilePermissionHelper.RunFilePermissionTestSuite()); }
public virtual ActionResult Warnings() { if (!_permissionService.Authorize(StandardPermissionProvider.ManageMaintenance)) { return(AccessDeniedView()); } var model = new List <SystemWarningModel>(); //store URL var currentStoreUrl = _storeContext.CurrentStore.Url; if (!String.IsNullOrEmpty(currentStoreUrl) && (currentStoreUrl.Equals(_webHelper.GetStoreLocation(false), StringComparison.InvariantCultureIgnoreCase) || currentStoreUrl.Equals(_webHelper.GetStoreLocation(true), StringComparison.InvariantCultureIgnoreCase) )) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = _localizationService.GetResource("Admin.System.Warnings.URL.Match") }); } else { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Warning, Text = string.Format(_localizationService.GetResource("Admin.System.Warnings.URL.NoMatch"), currentStoreUrl, _webHelper.GetStoreLocation(false)) }); } //primary exchange rate currency var perCurrency = _currencyService.GetCurrencyById(_currencySettings.PrimaryExchangeRateCurrencyId); if (perCurrency != null) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = _localizationService.GetResource("Admin.System.Warnings.ExchangeCurrency.Set"), }); if (perCurrency.Rate != 1) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Fail, Text = _localizationService.GetResource("Admin.System.Warnings.ExchangeCurrency.Rate1") }); } } else { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Fail, Text = _localizationService.GetResource("Admin.System.Warnings.ExchangeCurrency.NotSet") }); } //primary store currency var pscCurrency = _currencyService.GetCurrencyById(_currencySettings.PrimaryStoreCurrencyId); if (pscCurrency != null) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = _localizationService.GetResource("Admin.System.Warnings.PrimaryCurrency.Set"), }); } else { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Fail, Text = _localizationService.GetResource("Admin.System.Warnings.PrimaryCurrency.NotSet") }); } //base measure weight var bWeight = _measureService.GetMeasureWeightById(_measureSettings.BaseWeightId); if (bWeight != null) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = _localizationService.GetResource("Admin.System.Warnings.DefaultWeight.Set"), }); if (bWeight.Ratio != 1) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Fail, Text = _localizationService.GetResource("Admin.System.Warnings.DefaultWeight.Ratio1") }); } } else { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Fail, Text = _localizationService.GetResource("Admin.System.Warnings.DefaultWeight.NotSet") }); } //base dimension weight var bDimension = _measureService.GetMeasureDimensionById(_measureSettings.BaseDimensionId); if (bDimension != null) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = _localizationService.GetResource("Admin.System.Warnings.DefaultDimension.Set"), }); if (bDimension.Ratio != 1) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Fail, Text = _localizationService.GetResource("Admin.System.Warnings.DefaultDimension.Ratio1") }); } } else { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Fail, Text = _localizationService.GetResource("Admin.System.Warnings.DefaultDimension.NotSet") }); } //shipping rate coputation methods var srcMethods = _shippingService.LoadActiveShippingRateComputationMethods(); if (!srcMethods.Any()) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Fail, Text = _localizationService.GetResource("Admin.System.Warnings.Shipping.NoComputationMethods") }); } if (srcMethods.Count(x => x.ShippingRateComputationMethodType == ShippingRateComputationMethodType.Offline) > 1) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Warning, Text = _localizationService.GetResource("Admin.System.Warnings.Shipping.OnlyOneOffline") }); } //payment methods if (_paymentService.LoadActivePaymentMethods().Any()) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = _localizationService.GetResource("Admin.System.Warnings.PaymentMethods.OK") }); } else { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Fail, Text = _localizationService.GetResource("Admin.System.Warnings.PaymentMethods.NoActive") }); } //incompatible plugins if (PluginManager.IncompatiblePlugins != null) { foreach (var pluginName in PluginManager.IncompatiblePlugins) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Warning, Text = string.Format(_localizationService.GetResource("Admin.System.Warnings.IncompatiblePlugin"), pluginName) }); } } //performance settings if (!_catalogSettings.IgnoreStoreLimitations && _storeService.GetAllStores().Count == 1) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Warning, Text = _localizationService.GetResource("Admin.System.Warnings.Performance.IgnoreStoreLimitations") }); } if (!_catalogSettings.IgnoreAcl) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Warning, Text = _localizationService.GetResource("Admin.System.Warnings.Performance.IgnoreAcl") }); } //validate write permissions (the same procedure like during installation) var dirPermissionsOk = true; var dirsToCheck = FilePermissionHelper.GetDirectoriesWrite(); foreach (string dir in dirsToCheck) { if (!FilePermissionHelper.CheckPermissions(dir, false, true, true, false)) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Warning, Text = string.Format(_localizationService.GetResource("Admin.System.Warnings.DirectoryPermission.Wrong"), WindowsIdentity.GetCurrent().Name, dir) }); dirPermissionsOk = false; } } if (dirPermissionsOk) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = _localizationService.GetResource("Admin.System.Warnings.DirectoryPermission.OK") }); } var filePermissionsOk = true; var filesToCheck = FilePermissionHelper.GetFilesWrite(); foreach (string file in filesToCheck) { if (!FilePermissionHelper.CheckPermissions(file, false, true, true, true)) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Warning, Text = string.Format(_localizationService.GetResource("Admin.System.Warnings.FilePermission.Wrong"), WindowsIdentity.GetCurrent().Name, file) }); filePermissionsOk = false; } } if (filePermissionsOk) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = _localizationService.GetResource("Admin.System.Warnings.FilePermission.OK") }); } //machine key try { var machineKeySection = ConfigurationManager.GetSection("system.web/machineKey") as MachineKeySection; var machineKeySpecified = machineKeySection != null && !String.IsNullOrEmpty(machineKeySection.DecryptionKey) && !machineKeySection.DecryptionKey.StartsWith("AutoGenerate", StringComparison.InvariantCultureIgnoreCase); if (!machineKeySpecified) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Warning, Text = _localizationService.GetResource("Admin.System.Warnings.MachineKey.NotSpecified") }); } else { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = _localizationService.GetResource("Admin.System.Warnings.MachineKey.Specified") }); } } catch (Exception exc) { LogException(exc); } return(View(model)); }
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 Warnings() { var model = new List <SystemWarningModel>(); var store = _services.StoreContext.CurrentStore; //store URL var storeUrl = store.Url.EnsureEndsWith("/"); if (storeUrl.HasValue() && (storeUrl.IsCaseInsensitiveEqual(_services.WebHelper.GetStoreLocation(false)) || storeUrl.IsCaseInsensitiveEqual(_services.WebHelper.GetStoreLocation(true)))) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = _localizationService.GetResource("Admin.System.Warnings.URL.Match") }); } else { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Warning, Text = string.Format(_localizationService.GetResource("Admin.System.Warnings.URL.NoMatch"), storeUrl, _services.WebHelper.GetStoreLocation(false)) }); } // sitemap reachability string sitemapUrl = null; try { sitemapUrl = Url.RouteUrl("SitemapSEO", (object)null, _securitySettings.Value.ForceSslForAllPages ? "https" : "http"); var request = (HttpWebRequest)WebRequest.Create(sitemapUrl); request.Method = "HEAD"; request.Timeout = 15000; using (var response = (HttpWebResponse)request.GetResponse()) { var status = response.StatusCode; var warningModel = new SystemWarningModel(); warningModel.Level = (status == HttpStatusCode.OK ? SystemWarningLevel.Pass : SystemWarningLevel.Warning); switch (status) { case HttpStatusCode.OK: warningModel.Text = T("Admin.System.Warnings.SitemapReachable.OK"); break; default: if (status == HttpStatusCode.MethodNotAllowed) { warningModel.Text = T("Admin.System.Warnings.SitemapReachable.MethodNotAllowed"); } else { warningModel.Text = T("Admin.System.Warnings.SitemapReachable.Wrong"); } warningModel.Text = string.Concat(warningModel.Text, " ", T("Admin.Common.HttpStatus", (int)status, status.ToString())); break; } model.Add(warningModel); } } catch (WebException exception) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Warning, Text = T("Admin.System.Warnings.SitemapReachable.Wrong") }); Logger.Warning(sitemapUrl.IsEmpty() ? "SitemapSEO" : sitemapUrl, exception); } //primary exchange rate currency var perCurrency = store.PrimaryExchangeRateCurrency; if (perCurrency != null) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = _localizationService.GetResource("Admin.System.Warnings.ExchangeCurrency.Set"), }); if (perCurrency.Rate != 1) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Fail, Text = _localizationService.GetResource("Admin.System.Warnings.ExchangeCurrency.Rate1") }); } } else { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Fail, Text = _localizationService.GetResource("Admin.System.Warnings.ExchangeCurrency.NotSet") }); } //primary store currency var pscCurrency = store.PrimaryStoreCurrency; if (pscCurrency != null) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = _localizationService.GetResource("Admin.System.Warnings.PrimaryCurrency.Set"), }); } else { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Fail, Text = _localizationService.GetResource("Admin.System.Warnings.PrimaryCurrency.NotSet") }); } //base measure weight var bWeight = _measureService.Value.GetMeasureWeightById(_measureSettings.Value.BaseWeightId); if (bWeight != null) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = _localizationService.GetResource("Admin.System.Warnings.DefaultWeight.Set"), }); if (bWeight.Ratio != 1) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Fail, Text = _localizationService.GetResource("Admin.System.Warnings.DefaultWeight.Ratio1") }); } } else { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Fail, Text = _localizationService.GetResource("Admin.System.Warnings.DefaultWeight.NotSet") }); } //base dimension weight var bDimension = _measureService.Value.GetMeasureDimensionById(_measureSettings.Value.BaseDimensionId); if (bDimension != null) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = _localizationService.GetResource("Admin.System.Warnings.DefaultDimension.Set"), }); if (bDimension.Ratio != 1) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Fail, Text = _localizationService.GetResource("Admin.System.Warnings.DefaultDimension.Ratio1") }); } } else { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Fail, Text = _localizationService.GetResource("Admin.System.Warnings.DefaultDimension.NotSet") }); } // shipping rate coputation methods int activeShippingMethodCount = 0; try { activeShippingMethodCount = _shippingService.Value.LoadActiveShippingRateComputationMethods() .Where(x => x.Value.ShippingRateComputationMethodType == ShippingRateComputationMethodType.Offline) .Count(); } catch { } if (activeShippingMethodCount > 1) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Warning, Text = _localizationService.GetResource("Admin.System.Warnings.Shipping.OnlyOneOffline") }); } //payment methods int activePaymentMethodCount = 0; try { activePaymentMethodCount = _paymentService.Value.LoadActivePaymentMethods().Count(); } catch { } if (activePaymentMethodCount > 0) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = _localizationService.GetResource("Admin.System.Warnings.PaymentMethods.OK") }); } else { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Fail, Text = _localizationService.GetResource("Admin.System.Warnings.PaymentMethods.NoActive") }); } //incompatible plugins if (PluginManager.IncompatiblePlugins != null) { foreach (var pluginName in PluginManager.IncompatiblePlugins) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Warning, Text = string.Format(_localizationService.GetResource("Admin.System.Warnings.IncompatiblePlugin"), pluginName) }); } } //validate write permissions (the same procedure like during installation) var dirPermissionsOk = true; var dirsToCheck = FilePermissionHelper.GetDirectoriesWrite(_services.WebHelper); foreach (string dir in dirsToCheck) { if (!FilePermissionHelper.CheckPermissions(dir, false, true, true, false)) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Warning, Text = string.Format(_localizationService.GetResource("Admin.System.Warnings.DirectoryPermission.Wrong"), WindowsIdentity.GetCurrent().Name, dir) }); dirPermissionsOk = false; } } if (dirPermissionsOk) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = _localizationService.GetResource("Admin.System.Warnings.DirectoryPermission.OK") }); } var filePermissionsOk = true; var filesToCheck = FilePermissionHelper.GetFilesWrite(_services.WebHelper); foreach (string file in filesToCheck) { if (!FilePermissionHelper.CheckPermissions(file, false, true, true, true)) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Warning, Text = string.Format(_localizationService.GetResource("Admin.System.Warnings.FilePermission.Wrong"), WindowsIdentity.GetCurrent().Name, file) }); filePermissionsOk = false; } } if (filePermissionsOk) { model.Add(new SystemWarningModel { Level = SystemWarningLevel.Pass, Text = _localizationService.GetResource("Admin.System.Warnings.FilePermission.OK") }); } return(View(model)); }
public static List <string> TestPermission() { var directoriesToTest = new[] { "/Resource/", "/Resources", "/Tenants", "/Backups" }; return(FilePermissionHelper.TestPermission(directoriesToTest)); }