diff --git a/src/Umbraco.Configuration/Models/ConnectionStrings.cs b/src/Umbraco.Configuration/Models/ConnectionStrings.cs index 19fa9c6433..167e636bfb 100644 --- a/src/Umbraco.Configuration/Models/ConnectionStrings.cs +++ b/src/Umbraco.Configuration/Models/ConnectionStrings.cs @@ -3,7 +3,6 @@ using Microsoft.Extensions.Configuration; using Umbraco.Core.Configuration; using Umbraco.Core.IO; - namespace Umbraco.Configuration.Models { public class ConnectionStrings : IConnectionStrings diff --git a/src/Umbraco.Configuration/Models/ContentSettings.cs b/src/Umbraco.Configuration/Models/ContentSettings.cs index 176e424be5..b109c2e45e 100644 --- a/src/Umbraco.Configuration/Models/ContentSettings.cs +++ b/src/Umbraco.Configuration/Models/ContentSettings.cs @@ -5,45 +5,67 @@ using Microsoft.Extensions.Configuration; using Umbraco.Core.Configuration.UmbracoSettings; using Umbraco.Core.Macros; - namespace Umbraco.Configuration.Models { internal class ContentSettings : IContentSettings { + private const string DefaultPreviewBadge = + @"
Preview modeClick to end
"; + + private static readonly ImagingAutoFillUploadField[] DefaultImagingAutoFillUploadField = + { + new ImagingAutoFillUploadField + { + Alias = "umbracoFile" + } + }; private readonly IConfiguration _configuration; + public ContentSettings(IConfiguration configuration) { _configuration = configuration; } - private const string DefaultPreviewBadge = @"
Preview modeClick to end
"; + public string NotificationEmailAddress => + _configuration.GetValue("Umbraco:CMS:Content:Notifications:Email"); - private static IEnumerable DefaultImagingAutoFillUploadField = new[] - { - new ImagingAutoFillUploadField() - { - Alias = "umbracoFile" - }, - }; + public bool DisableHtmlEmail => + _configuration.GetValue("Umbraco:CMS:Content:Notifications:DisableHtmlEmail", false); - public string NotificationEmailAddress => _configuration.GetValue("Umbraco:CMS:Content:Notifications:Email") ?? null; - public bool DisableHtmlEmail => _configuration.GetValue("Umbraco:CMS:Content:Notifications:DisableHtmlEmail") ?? false; - public IEnumerable ImageFileTypes => _configuration.GetValue("Umbraco:CMS:Content:Imaging:ImageFileTypes") ?? new[] {"jpeg", "jpg", "gif", "bmp", "png", "tiff", "tif"}; - public IEnumerable ImageAutoFillProperties => _configuration.GetValue("Umbraco:CMS:Core:Content:Imaging:autoFillImageProperties") ?? DefaultImagingAutoFillUploadField; + public IEnumerable ImageFileTypes => _configuration.GetValue( + "Umbraco:CMS:Content:Imaging:ImageFileTypes", new[] { "jpeg", "jpg", "gif", "bmp", "png", "tiff", "tif" }); + + public IEnumerable ImageAutoFillProperties => + _configuration.GetValue("Umbraco:CMS:Core:Content:Imaging:autoFillImageProperties", + DefaultImagingAutoFillUploadField); - public bool ResolveUrlsFromTextString => _configuration.GetValue("Umbraco:CMS:Content:ResolveUrlsFromTextString") ?? false; + public bool ResolveUrlsFromTextString => + _configuration.GetValue("Umbraco:CMS:Content:ResolveUrlsFromTextString", false); + public IEnumerable Error404Collection => _configuration .GetSection("Umbraco:CMS:Content:Errors:Error404") .GetChildren() - .Select(x=> new ContentErrorPage(x)); - public string PreviewBadge => _configuration.GetValue("Umbraco:CMS:Content:PreviewBadge") ?? DefaultPreviewBadge; - public MacroErrorBehaviour MacroErrorBehaviour => _configuration.GetValue("Umbraco:CMS:Content:MacroErrors") ?? MacroErrorBehaviour.Inline; - public IEnumerable DisallowedUploadFiles => _configuration.GetValue("Umbraco:CMS:Content:DisallowedUploadFiles") ?? new[] {"ashx", "aspx", "ascx", "config", "cshtml", "vbhtml", "asmx", "air", "axd"}; - public IEnumerable AllowedUploadFiles => _configuration.GetValue("Umbraco:CMS:Content:AllowedUploadFiles") ?? Array.Empty() ; - public bool ShowDeprecatedPropertyEditors => _configuration.GetValue("Umbraco:CMS:Content:ShowDeprecatedPropertyEditors") ?? false; - public string LoginBackgroundImage => _configuration.GetValue("Umbraco:CMS:Content:LoginBackgroundImage") ?? string.Empty; + .Select(x => new ContentErrorPage(x)); + + public string PreviewBadge => _configuration.GetValue("Umbraco:CMS:Content:PreviewBadge", DefaultPreviewBadge); + + public MacroErrorBehaviour MacroErrorBehaviour => + _configuration.GetValue("Umbraco:CMS:Content:MacroErrors", MacroErrorBehaviour.Inline); + + public IEnumerable DisallowedUploadFiles => _configuration.GetValue( + "Umbraco:CMS:Content:DisallowedUploadFiles", + new[] { "ashx", "aspx", "ascx", "config", "cshtml", "vbhtml", "asmx", "air", "axd" }); + + public IEnumerable AllowedUploadFiles => + _configuration.GetValue("Umbraco:CMS:Content:AllowedUploadFiles", Array.Empty()); + + public bool ShowDeprecatedPropertyEditors => + _configuration.GetValue("Umbraco:CMS:Content:ShowDeprecatedPropertyEditors", false); + + public string LoginBackgroundImage => + _configuration.GetValue("Umbraco:CMS:Content:LoginBackgroundImage", string.Empty); private class ContentErrorPage : IContentErrorPage { @@ -53,12 +75,12 @@ namespace Umbraco.Configuration.Models var value = configurationSection.Value; - if(int.TryParse(value, out var contentId)) + if (int.TryParse(value, out var contentId)) { HasContentId = true; ContentId = contentId; } - else if(Guid.TryParse(value, out var contentKey)) + else if (Guid.TryParse(value, out var contentKey)) { HasContentKey = true; ContentKey = contentKey; @@ -69,11 +91,11 @@ namespace Umbraco.Configuration.Models } } - public int ContentId { get; set; } - public Guid ContentKey { get; set;} - public string ContentXPath { get; set;} - public bool HasContentId { get; set;} - public bool HasContentKey { get; set;} + public int ContentId { get; } + public Guid ContentKey { get; } + public string ContentXPath { get; } + public bool HasContentId { get; } + public bool HasContentKey { get; } public string Culture { get; set; } } diff --git a/src/Umbraco.Configuration/Models/CoreDebugSettings.cs b/src/Umbraco.Configuration/Models/CoreDebugSettings.cs index ad01bcdd74..687bdc17d3 100644 --- a/src/Umbraco.Configuration/Models/CoreDebugSettings.cs +++ b/src/Umbraco.Configuration/Models/CoreDebugSettings.cs @@ -6,11 +6,16 @@ namespace Umbraco.Configuration.Models internal class CoreDebugSettings : ICoreDebugSettings { private readonly IConfiguration _configuration; + public CoreDebugSettings(IConfiguration configuration) { _configuration = configuration; } - public bool LogUncompletedScopes => _configuration.GetValue("Umbraco:CMS:Core:Debug:LogUncompletedScopes") ?? false; - public bool DumpOnTimeoutThreadAbort => _configuration.GetValue("Umbraco:CMS:Core:Debug:DumpOnTimeoutThreadAbort") ?? false; + + public bool LogUncompletedScopes => + _configuration.GetValue("Umbraco:CMS:Core:Debug:LogUncompletedScopes", false); + + public bool DumpOnTimeoutThreadAbort => + _configuration.GetValue("Umbraco:CMS:Core:Debug:DumpOnTimeoutThreadAbort", false); } } diff --git a/src/Umbraco.Configuration/Models/GlobalSettings.cs b/src/Umbraco.Configuration/Models/GlobalSettings.cs index fec9b3ef40..4b0415cd67 100644 --- a/src/Umbraco.Configuration/Models/GlobalSettings.cs +++ b/src/Umbraco.Configuration/Models/GlobalSettings.cs @@ -1,26 +1,24 @@ using System; -using System.Configuration; using System.Linq; -using System.Net.Mail; -using System.Xml.Linq; using Microsoft.Extensions.Configuration; -using Umbraco.Composing; -using Umbraco.Configuration; -using Umbraco.Core; using Umbraco.Core.Configuration; -using Umbraco.Core.IO; namespace Umbraco.Configuration.Models { /// - /// The GlobalSettings Class contains general settings information for the entire Umbraco instance based on information from web.config appsettings + /// The GlobalSettings Class contains general settings information for the entire Umbraco instance based on information + /// from web.config appsettings /// public class GlobalSettings : IGlobalSettings { + internal const string + StaticReservedPaths = "~/app_plugins/,~/install/,~/mini-profiler-resources/,"; //must end with a comma! + + internal const string + StaticReservedUrls = "~/config/splashes/noNodes.aspx,~/.well-known,"; //must end with a comma! + private readonly IConfiguration _configuration; - internal const string StaticReservedPaths = "~/app_plugins/,~/install/,~/mini-profiler-resources/,"; //must end with a comma! - internal const string StaticReservedUrls = "~/config/splashes/noNodes.aspx,~/.well-known,"; //must end with a comma! public GlobalSettings(IConfiguration configuration) { _configuration = configuration; @@ -28,7 +26,9 @@ namespace Umbraco.Configuration.Models public string ReservedUrls => _configuration.GetValue("Umbraco:CMS:Global:ReservedUrls", StaticReservedUrls); public string ReservedPaths => _configuration.GetValue("Umbraco:CMS:Global:ReservedPaths", StaticReservedPaths); - public string Path => _configuration.GetValue("Umbraco:CMS:Global:Path"); + + public string Path => _configuration.GetValue("Umbraco:CMS:Global:Path"); + // TODO: https://github.com/umbraco/Umbraco-CMS/issues/4238 - stop having version in web.config appSettings public string ConfigurationStatus { @@ -38,20 +38,37 @@ namespace Umbraco.Configuration.Models public int TimeOutInMinutes => _configuration.GetValue("Umbraco:CMS:Global:TimeOutInMinutes", 20); public string DefaultUILanguage => _configuration.GetValue("Umbraco:CMS:Global:TimeOutInMinutes", "en-US"); - public bool HideTopLevelNodeFromPath => _configuration.GetValue("Umbraco:CMS:Global:HideTopLevelNodeFromPath", false); + + public bool HideTopLevelNodeFromPath => + _configuration.GetValue("Umbraco:CMS:Global:HideTopLevelNodeFromPath", false); + public bool UseHttps => _configuration.GetValue("Umbraco:CMS:Global:UseHttps", false); public int VersionCheckPeriod => _configuration.GetValue("Umbraco:CMS:Global:VersionCheckPeriod", 7); public string UmbracoPath => _configuration.GetValue("Umbraco:CMS:Global:UmbracoPath", "~/umbraco"); public string UmbracoCssPath => _configuration.GetValue("Umbraco:CMS:Global:UmbracoCssPath", "~/css"); - public string UmbracoScriptsPath => _configuration.GetValue("Umbraco:CMS:Global:UmbracoScriptsPath", "~/scripts"); + + public string UmbracoScriptsPath => + _configuration.GetValue("Umbraco:CMS:Global:UmbracoScriptsPath", "~/scripts"); + public string UmbracoMediaPath => _configuration.GetValue("Umbraco:CMS:Global:UmbracoMediaPath", "~/media"); - public bool InstallMissingDatabase => _configuration.GetValue("Umbraco:CMS:Global:InstallMissingDatabase", false); + + public bool InstallMissingDatabase => + _configuration.GetValue("Umbraco:CMS:Global:InstallMissingDatabase", false); + public bool InstallEmptyDatabase => _configuration.GetValue("Umbraco:CMS:Global:InstallEmptyDatabase", false); - public bool DisableElectionForSingleServer => _configuration.GetValue("Umbraco:CMS:Global:DisableElectionForSingleServer", false); + + public bool DisableElectionForSingleServer => + _configuration.GetValue("Umbraco:CMS:Global:DisableElectionForSingleServer", false); + public string RegisterType => _configuration.GetValue("Umbraco:CMS:Global:RegisterType", string.Empty); - public string DatabaseFactoryServerVersion => _configuration.GetValue("Umbraco:CMS:Global:DatabaseFactoryServerVersion", string.Empty); + + public string DatabaseFactoryServerVersion => + _configuration.GetValue("Umbraco:CMS:Global:DatabaseFactoryServerVersion", string.Empty); + public string MainDomLock => _configuration.GetValue("Umbraco:CMS:Global:MainDomLock", string.Empty); - public string NoNodesViewPath => _configuration.GetValue("Umbraco:CMS:Global:NoNodesViewPath", "~/config/splashes/NoNodes.cshtml"); + + public string NoNodesViewPath => + _configuration.GetValue("Umbraco:CMS:Global:NoNodesViewPath", "~/config/splashes/NoNodes.cshtml"); public bool IsSmtpServerConfigured => _configuration.GetSection("Umbraco:CMS:Smtp")?.GetChildren().Any() ?? false; @@ -68,9 +85,9 @@ namespace Umbraco.Configuration.Models } public string From => _configurationSection.GetValue("From"); - public string Host => _configurationSection.GetValue("Host"); - public int Port => _configurationSection.GetValue("Port"); - public string PickupDirectoryLocation => _configurationSection.GetValue("PickupDirectoryLocation"); + public string Host => _configurationSection.GetValue("Host"); + public int Port => _configurationSection.GetValue("Port"); + public string PickupDirectoryLocation => _configurationSection.GetValue("PickupDirectoryLocation"); } } } diff --git a/src/Umbraco.Configuration/Models/HealthChecksSettingsSettings.cs b/src/Umbraco.Configuration/Models/HealthChecksSettingsSettings.cs index cd52f8af30..d815021109 100644 --- a/src/Umbraco.Configuration/Models/HealthChecksSettingsSettings.cs +++ b/src/Umbraco.Configuration/Models/HealthChecksSettingsSettings.cs @@ -9,25 +9,32 @@ namespace Umbraco.Configuration.Models internal class HealthChecksSettings : IHealthChecksSettings { private readonly IConfiguration _configuration; + public HealthChecksSettings(IConfiguration configuration) { _configuration = configuration; } - public IEnumerable DisabledChecks => _configuration.GetSection("Umbraco:CMS:HealthChecks:DisabledChecks").GetChildren().Select( - x => new DisabledHealthCheck() - { - Id = x.GetValue("Id"), - DisabledOn = x.GetValue("DisabledOn"), - DisabledBy = x.GetValue("DisabledBy"), - }); - public IHealthCheckNotificationSettings NotificationSettings => new HealthCheckNotificationSettings(_configuration.GetSection("Umbraco:CMS:HealthChecks:NotificationSettings")); + public IEnumerable DisabledChecks => _configuration + .GetSection("Umbraco:CMS:HealthChecks:DisabledChecks") + .GetChildren() + .Select( + x => new DisabledHealthCheck + { + Id = x.GetValue("Id"), + DisabledOn = x.GetValue("DisabledOn"), + DisabledBy = x.GetValue("DisabledBy") + }); + + public IHealthCheckNotificationSettings NotificationSettings => + new HealthCheckNotificationSettings( + _configuration.GetSection("Umbraco:CMS:HealthChecks:NotificationSettings")); private class DisabledHealthCheck : IDisabledHealthCheck { public Guid Id { get; set; } - public DateTime DisabledOn { get;set; } - public int DisabledBy { get;set; } + public DateTime DisabledOn { get; set; } + public int DisabledBy { get; set; } } private class HealthCheckNotificationSettings : IHealthCheckNotificationSettings @@ -39,41 +46,46 @@ namespace Umbraco.Configuration.Models _configurationSection = configurationSection; } - public bool Enabled => _configurationSection.GetValue("Enabled", false); + public bool Enabled => _configurationSection.GetValue("Enabled", false); public string FirstRunTime => _configurationSection.GetValue("FirstRunTime"); - public int PeriodInHours => _configurationSection.GetValue("PeriodInHours", 24); + public int PeriodInHours => _configurationSection.GetValue("PeriodInHours", 24); public IReadOnlyDictionary NotificationMethods => _configurationSection .GetSection("NotificationMethods") .GetChildren() - .ToDictionary(x=>x.Key, x=> (INotificationMethod) new NotificationMethod(x.Key, x)); + .ToDictionary(x => x.Key, x => (INotificationMethod) new NotificationMethod(x.Key, x)); - public IEnumerable DisabledChecks => _configurationSection.GetSection("DisabledChecks").GetChildren().Select( - x => new DisabledHealthCheck() - { - Id = x.GetValue("Id"), - DisabledOn = x.GetValue("DisabledOn"), - DisabledBy = x.GetValue("DisabledBy"), - }); + public IEnumerable DisabledChecks => _configurationSection + .GetSection("DisabledChecks").GetChildren().Select( + x => new DisabledHealthCheck + { + Id = x.GetValue("Id"), + DisabledOn = x.GetValue("DisabledOn"), + DisabledBy = x.GetValue("DisabledBy") + }); } private class NotificationMethod : INotificationMethod { private readonly IConfigurationSection _configurationSection; - public NotificationMethod(string alias, IConfigurationSection configurationSection) + public NotificationMethod(string alias, IConfigurationSection configurationSection) { Alias = alias; _configurationSection = configurationSection; } public string Alias { get; } - public bool Enabled => _configurationSection.GetValue("Enabled", false); - public HealthCheckNotificationVerbosity Verbosity => _configurationSection.GetValue("Verbosity", HealthCheckNotificationVerbosity.Summary); - public bool FailureOnly => _configurationSection.GetValue("FailureOnly", true); + public bool Enabled => _configurationSection.GetValue("Enabled", false); + + public HealthCheckNotificationVerbosity Verbosity => + _configurationSection.GetValue("Verbosity", HealthCheckNotificationVerbosity.Summary); + + public bool FailureOnly => _configurationSection.GetValue("FailureOnly", true); public IReadOnlyDictionary Settings => _configurationSection - .GetSection("Settings").GetChildren().ToDictionary(x => x.Key, x => (INotificationMethodSettings)new NotificationMethodSettings(x.Key, x.Value)); + .GetSection("Settings").GetChildren().ToDictionary(x => x.Key, + x => (INotificationMethodSettings) new NotificationMethodSettings(x.Key, x.Value)); } private class NotificationMethodSettings : INotificationMethodSettings diff --git a/src/Umbraco.Configuration/Models/HostingSettings.cs b/src/Umbraco.Configuration/Models/HostingSettings.cs index c5e01b25c6..765cc0fbc6 100644 --- a/src/Umbraco.Configuration/Models/HostingSettings.cs +++ b/src/Umbraco.Configuration/Models/HostingSettings.cs @@ -1,8 +1,5 @@ -using System.Configuration; -using Microsoft.Extensions.Configuration; -using Umbraco.Core; +using Microsoft.Extensions.Configuration; using Umbraco.Core.Configuration; -using ConfigurationSection = System.Configuration.ConfigurationSection; namespace Umbraco.Configuration.Models { @@ -14,14 +11,15 @@ namespace Umbraco.Configuration.Models { _configuration = configuration; } + /// public LocalTempStorage LocalTempStorageLocation => _configuration.GetValue("Umbraco:CMS:Hosting:LocalTempStorage", LocalTempStorage.Default); /// - /// Gets a value indicating whether umbraco is running in [debug mode]. + /// Gets a value indicating whether umbraco is running in [debug mode]. /// /// true if [debug mode]; otherwise, false. - public bool DebugMode => _configuration.GetValue("Umbraco:CMS:Hosting:Debug", false); + public bool DebugMode => _configuration.GetValue("Umbraco:CMS:Hosting:Debug", false); } } diff --git a/src/Umbraco.Configuration/Models/ImagingSettings.cs b/src/Umbraco.Configuration/Models/ImagingSettings.cs index cea8905c56..6ec0924eb6 100644 --- a/src/Umbraco.Configuration/Models/ImagingSettings.cs +++ b/src/Umbraco.Configuration/Models/ImagingSettings.cs @@ -3,7 +3,7 @@ using Umbraco.Core.Configuration; namespace Umbraco.Configuration.Models { - public class ImagingSettings :IImagingSettings + public class ImagingSettings : IImagingSettings { private readonly IConfiguration _configuration; @@ -14,7 +14,7 @@ namespace Umbraco.Configuration.Models public int MaxBrowserCacheDays => _configuration.GetValue("Umbraco:CMS:Imaging:Cache:MaxBrowserCacheDays", 7); public int MaxCacheDays => _configuration.GetValue("Umbraco:CMS:Imaging:Cache:MaxCacheDays", 365); - public uint CachedNameLength => _configuration.GetValue("Umbraco:CMS:Imaging:Cache:CachedNameLength", (uint)8); + public uint CachedNameLength => _configuration.GetValue("Umbraco:CMS:Imaging:Cache:CachedNameLength", (uint) 8); public int MaxResizeWidth => _configuration.GetValue("Umbraco:CMS:Imaging:Resize:MaxWidth", 5000); public int MaxResizeHeight => _configuration.GetValue("Umbraco:CMS:Imaging:Resize:MaxHeight", 5000); public string CacheFolder => _configuration.GetValue("Umbraco:CMS:Imaging:Cache:Folder", "../App_Data/Cache"); diff --git a/src/Umbraco.Configuration/Models/KeepAliveSettings.cs b/src/Umbraco.Configuration/Models/KeepAliveSettings.cs index 4eb7f290a5..e080ecd360 100644 --- a/src/Umbraco.Configuration/Models/KeepAliveSettings.cs +++ b/src/Umbraco.Configuration/Models/KeepAliveSettings.cs @@ -6,11 +6,16 @@ namespace Umbraco.Configuration.Models internal class KeepAliveSettings : IKeepAliveSettings { private readonly IConfiguration _configuration; + public KeepAliveSettings(IConfiguration configuration) { _configuration = configuration; } - public bool DisableKeepAliveTask => _configuration.GetValue("Umbraco:CMS:KeepAlive:DisableKeepAliveTask") ?? false; - public string KeepAlivePingUrl => _configuration.GetValue("Umbraco:CMS:KeepAlive:KeepAlivePingUrl") ?? "{umbracoApplicationUrl}/api/keepalive/ping"; + + public bool DisableKeepAliveTask => + _configuration.GetValue("Umbraco:CMS:KeepAlive:DisableKeepAliveTask", false); + + public string KeepAlivePingUrl => _configuration.GetValue("Umbraco:CMS:KeepAlive:KeepAlivePingUrl", + "{umbracoApplicationUrl}/api/keepalive/ping"); } } diff --git a/src/Umbraco.Configuration/Models/LoggingSettings.cs b/src/Umbraco.Configuration/Models/LoggingSettings.cs index c1f3efc816..60110817d9 100644 --- a/src/Umbraco.Configuration/Models/LoggingSettings.cs +++ b/src/Umbraco.Configuration/Models/LoggingSettings.cs @@ -10,6 +10,6 @@ namespace Umbraco.Configuration.Models { _configuration = configuration; } - public int MaxLogAge => _configuration.GetValue("Umbraco:CMS:Logging:MaxLogAge") ?? -1; + public int MaxLogAge => _configuration.GetValue("Umbraco:CMS:Logging:MaxLogAge", -1); } } diff --git a/src/Umbraco.Configuration/Models/MachineKeyConfig.cs b/src/Umbraco.Configuration/Models/MachineKeyConfig.cs index 46f5dd0d53..a22352dd22 100644 --- a/src/Umbraco.Configuration/Models/MachineKeyConfig.cs +++ b/src/Umbraco.Configuration/Models/MachineKeyConfig.cs @@ -7,6 +7,7 @@ namespace Umbraco.Configuration.Models public class MachineKeyConfig : IMachineKeyConfig { private readonly IConfiguration _configuration; + public MachineKeyConfig(IConfiguration configuration) { _configuration = configuration; @@ -15,6 +16,5 @@ namespace Umbraco.Configuration.Models //TODO all the machineKey stuff should be replaced: https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/compatibility/replacing-machinekey?view=aspnetcore-3.1 public bool HasMachineKey => throw new NotImplementedException("TODO we need to figure out what to do here"); - } } diff --git a/src/Umbraco.Configuration/Models/MemberPasswordConfigurationSettings.cs b/src/Umbraco.Configuration/Models/MemberPasswordConfigurationSettings.cs index 31ceca0062..e97013d3d5 100644 --- a/src/Umbraco.Configuration/Models/MemberPasswordConfigurationSettings.cs +++ b/src/Umbraco.Configuration/Models/MemberPasswordConfigurationSettings.cs @@ -5,20 +5,35 @@ namespace Umbraco.Configuration.Models { internal class MemberPasswordConfigurationSettings : IMemberPasswordConfiguration { - private readonly IConfiguration _configuration; + public MemberPasswordConfigurationSettings(IConfiguration configuration) { _configuration = configuration; } - public int RequiredLength => _configuration.GetValue("Umbraco:CMS:Security:MemberPassword:RequiredLength") ?? 10; - public bool RequireNonLetterOrDigit => _configuration.GetValue("Umbraco:CMS:Security:MemberPassword:RequireNonLetterOrDigit") ?? false; - public bool RequireDigit => _configuration.GetValue("Umbraco:CMS:Security:MemberPassword:RequireDigit") ?? false; - public bool RequireLowercase => _configuration.GetValue("Umbraco:CMS:Security:MemberPassword:RequireLowercase") ?? false; - public bool RequireUppercase => _configuration.GetValue("Umbraco:CMS:Security:MemberPassword:RequireUppercase") ?? false; - public bool UseLegacyEncoding => _configuration.GetValue("Umbraco:CMS:Security:MemberPassword:UseLegacyEncoding") ?? false; - public string HashAlgorithmType => _configuration.GetValue("Umbraco:CMS:Security:MemberPassword:HashAlgorithmType") ?? "HMACSHA256"; - public int MaxFailedAccessAttemptsBeforeLockout => _configuration.GetValue("Umbraco:CMS:Security:MemberPassword:MaxFailedAccessAttemptsBeforeLockout") ?? 5; + public int RequiredLength => + _configuration.GetValue("Umbraco:CMS:Security:MemberPassword:RequiredLength", 10); + + public bool RequireNonLetterOrDigit => + _configuration.GetValue("Umbraco:CMS:Security:MemberPassword:RequireNonLetterOrDigit", false); + + public bool RequireDigit => + _configuration.GetValue("Umbraco:CMS:Security:MemberPassword:RequireDigit", false); + + public bool RequireLowercase => + _configuration.GetValue("Umbraco:CMS:Security:MemberPassword:RequireLowercase", false); + + public bool RequireUppercase => + _configuration.GetValue("Umbraco:CMS:Security:MemberPassword:RequireUppercase", false); + + public bool UseLegacyEncoding => + _configuration.GetValue("Umbraco:CMS:Security:MemberPassword:UseLegacyEncoding", false); + + public string HashAlgorithmType => + _configuration.GetValue("Umbraco:CMS:Security:MemberPassword:HashAlgorithmType", "HMACSHA256"); + + public int MaxFailedAccessAttemptsBeforeLockout => + _configuration.GetValue("Umbraco:CMS:Security:MemberPassword:MaxFailedAccessAttemptsBeforeLockout", 5); } } diff --git a/src/Umbraco.Configuration/Models/ModelsBuilderConfig.cs b/src/Umbraco.Configuration/Models/ModelsBuilderConfig.cs index fbad7f219d..594a317854 100644 --- a/src/Umbraco.Configuration/Models/ModelsBuilderConfig.cs +++ b/src/Umbraco.Configuration/Models/ModelsBuilderConfig.cs @@ -1,33 +1,27 @@ -using System; -using System.Configuration; -using System.IO; -using System.Threading; -using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Configuration; using Umbraco.Core.Configuration; -using Umbraco.Core; -using Umbraco.Core.IO; -using ConfigurationSection = System.Configuration.ConfigurationSection; namespace Umbraco.Configuration.Models { /// - /// Represents the models builder configuration. + /// Represents the models builder configuration. /// internal class ModelsBuilderConfig : IModelsBuilderConfig { private readonly IConfiguration _configuration; - public string DefaultModelsDirectory => "~/App_Data/Models"; /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// public ModelsBuilderConfig(IConfiguration configuration) { _configuration = configuration; } + public string DefaultModelsDirectory => "~/App_Data/Models"; + /// - /// Gets a value indicating whether the whole models experience is enabled. + /// Gets a value indicating whether the whole models experience is enabled. /// /// /// If this is false then absolutely nothing happens. @@ -36,46 +30,53 @@ namespace Umbraco.Configuration.Models public bool Enable => _configuration.GetValue("Umbraco:CMS:ModelsBuilder:Enable", false); /// - /// Gets the models mode. + /// Gets the models mode. /// - public ModelsMode ModelsMode => _configuration.GetValue("Umbraco:CMS:ModelsBuilder:ModelsMode", ModelsMode.Nothing); + public ModelsMode ModelsMode => + _configuration.GetValue("Umbraco:CMS:ModelsBuilder:ModelsMode", ModelsMode.Nothing); /// - /// Gets the models namespace. + /// Gets the models namespace. /// /// That value could be overriden by other (attribute in user's code...). Return default if no value was supplied. public string ModelsNamespace => _configuration.GetValue("Umbraco:CMS:ModelsBuilder:ModelsNamespace"); /// - /// Gets a value indicating whether we should enable the models factory. + /// Gets a value indicating whether we should enable the models factory. /// /// Default value is true because no factory is enabled by default in Umbraco. public bool EnableFactory => _configuration.GetValue("Umbraco:CMS:ModelsBuilder:EnableFactory", true); /// - /// Gets a value indicating whether we should flag out-of-date models. + /// Gets a value indicating whether we should flag out-of-date models. /// - /// Models become out-of-date when data types or content types are updated. When this - /// setting is activated the ~/App_Data/Models/ood.txt file is then created. When models are - /// generated through the dashboard, the files is cleared. Default value is false. - public bool FlagOutOfDateModels => _configuration.GetValue("Umbraco:CMS:ModelsBuilder:FlagOutOfDateModels", false) && !ModelsMode.IsLive(); + /// + /// Models become out-of-date when data types or content types are updated. When this + /// setting is activated the ~/App_Data/Models/ood.txt file is then created. When models are + /// generated through the dashboard, the files is cleared. Default value is false. + /// + public bool FlagOutOfDateModels => + _configuration.GetValue("Umbraco:CMS:ModelsBuilder:FlagOutOfDateModels", false) && !ModelsMode.IsLive(); /// - /// Gets the models directory. + /// Gets the models directory. /// /// Default is ~/App_Data/Models but that can be changed. public string ModelsDirectory => _configuration.GetValue("Umbraco:CMS:ModelsBuilder:ModelsDirectory", "~/App_Data/Models"); /// - /// Gets a value indicating whether to accept an unsafe value for ModelsDirectory. + /// Gets a value indicating whether to accept an unsafe value for ModelsDirectory. /// - /// An unsafe value is an absolute path, or a relative path pointing outside - /// of the website root. - public bool AcceptUnsafeModelsDirectory => _configuration.GetValue("Umbraco:CMS:ModelsBuilder:AcceptUnsafeModelsDirectory", false); + /// + /// An unsafe value is an absolute path, or a relative path pointing outside + /// of the website root. + /// + public bool AcceptUnsafeModelsDirectory => + _configuration.GetValue("Umbraco:CMS:ModelsBuilder:AcceptUnsafeModelsDirectory", false); /// - /// Gets a value indicating the debug log level. + /// Gets a value indicating the debug log level. /// /// 0 means minimal (safe on live site), anything else means more and more details (maybe not safe). public int DebugLevel => _configuration.GetValue("Umbraco:CMS:ModelsBuilder:DebugLevel", 0); diff --git a/src/Umbraco.Configuration/Models/RequestHandlerSettings.cs b/src/Umbraco.Configuration/Models/RequestHandlerSettings.cs index 7c7a2c0a4f..e0804abd0e 100644 --- a/src/Umbraco.Configuration/Models/RequestHandlerSettings.cs +++ b/src/Umbraco.Configuration/Models/RequestHandlerSettings.cs @@ -9,31 +9,37 @@ namespace Umbraco.Configuration.Models internal class RequestHandlerSettings : IRequestHandlerSettings { private readonly IConfiguration _configuration; + public RequestHandlerSettings(IConfiguration configuration) { _configuration = configuration; } - public bool AddTrailingSlash => _configuration.GetValue("Umbraco:CMS:RequestHandler:AddTrailingSlash") ?? true; - public bool ConvertUrlsToAscii => _configuration.GetValue("Umbraco:CMS:RequestHandler:ConvertUrlsToAscii").InvariantEquals("true"); - public bool TryConvertUrlsToAscii => _configuration.GetValue("Umbraco:CMS:RequestHandler:ConvertUrlsToAscii").InvariantEquals("try"); + public bool AddTrailingSlash => + _configuration.GetValue("Umbraco:CMS:RequestHandler:AddTrailingSlash") ?? true; + + public bool ConvertUrlsToAscii => _configuration + .GetValue("Umbraco:CMS:RequestHandler:ConvertUrlsToAscii").InvariantEquals("true"); + + public bool TryConvertUrlsToAscii => _configuration + .GetValue("Umbraco:CMS:RequestHandler:ConvertUrlsToAscii").InvariantEquals("try"); //We need to special handle ":", as this character is special in keys - public IEnumerable CharCollection => _configuration.GetSection("Umbraco:CMS:RequestHandler:CharCollection") + public IEnumerable CharCollection => _configuration + .GetSection("Umbraco:CMS:RequestHandler:CharCollection") .GetChildren() - .Select(kvp => new CharItem() + .Select(kvp => new CharItem { Char = kvp.Key, Replacement = kvp.Value - }).Union(new [] + }).Union(new[] { - new CharItem(){Char = ":", Replacement = string.Empty}, + new CharItem { Char = ":", Replacement = string.Empty } }); private class CharItem : IChar { - public string Char { get; set; } public string Replacement { get; set; } } diff --git a/src/Umbraco.Configuration/Models/SecuritySettings.cs b/src/Umbraco.Configuration/Models/SecuritySettings.cs index 91721fb26a..693a9506c9 100644 --- a/src/Umbraco.Configuration/Models/SecuritySettings.cs +++ b/src/Umbraco.Configuration/Models/SecuritySettings.cs @@ -6,15 +6,26 @@ namespace Umbraco.Configuration.Models internal class SecuritySettings : ISecuritySettings { private readonly IConfiguration _configuration; + public SecuritySettings(IConfiguration configuration) { _configuration = configuration; } - public bool KeepUserLoggedIn => _configuration.GetValue("Umbraco:CMS:Security:KeepUserLoggedIn") ?? true; - public bool HideDisabledUsersInBackoffice => _configuration.GetValue("Umbraco:CMS:Security:HideDisabledUsersInBackoffice") ?? false; - public bool AllowPasswordReset => _configuration.GetValue("Umbraco:CMS:Security:AllowPasswordResetAllowPasswordReset") ?? true; - public string AuthCookieName => _configuration.GetValue("Umbraco:CMS:Security:AuthCookieName") ?? "UMB_UCONTEXT"; - public string AuthCookieDomain => _configuration.GetValue("Umbraco:CMS:Security:AuthCookieDomain") ?? null; - public bool UsernameIsEmail => _configuration.GetValue("Umbraco:CMS:Security:UsernameIsEmail") ?? true; + + public bool KeepUserLoggedIn => _configuration.GetValue("Umbraco:CMS:Security:KeepUserLoggedIn", true); + + public bool HideDisabledUsersInBackoffice => + _configuration.GetValue("Umbraco:CMS:Security:HideDisabledUsersInBackoffice", false); + + public bool AllowPasswordReset => + _configuration.GetValue("Umbraco:CMS:Security:AllowPasswordResetAllowPasswordReset", true); + + public string AuthCookieName => + _configuration.GetValue("Umbraco:CMS:Security:AuthCookieName", "UMB_UCONTEXT"); + + public string AuthCookieDomain => + _configuration.GetValue("Umbraco:CMS:Security:AuthCookieDomain"); + + public bool UsernameIsEmail => _configuration.GetValue("Umbraco:CMS:Security:UsernameIsEmail", true); } } diff --git a/src/Umbraco.Configuration/Models/TourSettings.cs b/src/Umbraco.Configuration/Models/TourSettings.cs index 20358bd320..a859e4a490 100644 --- a/src/Umbraco.Configuration/Models/TourSettings.cs +++ b/src/Umbraco.Configuration/Models/TourSettings.cs @@ -6,13 +6,14 @@ namespace Umbraco.Configuration.Models internal class TourSettings : ITourSettings { private readonly IConfiguration _configuration; + public TourSettings(IConfiguration configuration) { _configuration = configuration; } - public bool EnableTours => _configuration.GetValue("Umbraco:CMS:Tours:EnableTours") ?? true; - public string Type { get; set; } + + public bool EnableTours => _configuration.GetValue("Umbraco:CMS:Tours:EnableTours", true); } } diff --git a/src/Umbraco.Configuration/Models/TypeFinderSettings.cs b/src/Umbraco.Configuration/Models/TypeFinderSettings.cs index 114f028b13..0e2aacced2 100644 --- a/src/Umbraco.Configuration/Models/TypeFinderSettings.cs +++ b/src/Umbraco.Configuration/Models/TypeFinderSettings.cs @@ -15,5 +15,4 @@ namespace Umbraco.Configuration.Models public string AssembliesAcceptingLoadExceptions => _configuration.GetValue("Umbraco:CMS:TypeFinder:AssembliesAcceptingLoadExceptions"); } - } diff --git a/src/Umbraco.Configuration/Models/UserPasswordConfigurationSettings.cs b/src/Umbraco.Configuration/Models/UserPasswordConfigurationSettings.cs index 2b5e01fcd9..d30ab0c1ea 100644 --- a/src/Umbraco.Configuration/Models/UserPasswordConfigurationSettings.cs +++ b/src/Umbraco.Configuration/Models/UserPasswordConfigurationSettings.cs @@ -6,18 +6,32 @@ namespace Umbraco.Configuration.Models internal class UserPasswordConfigurationSettings : IUserPasswordConfiguration { private readonly IConfiguration _configuration; + public UserPasswordConfigurationSettings(IConfiguration configuration) { _configuration = configuration; } - public int RequiredLength => _configuration.GetValue("Umbraco:CMS:Security:UserPassword:RequiredLength") ?? 10; - public bool RequireNonLetterOrDigit => _configuration.GetValue("Umbraco:CMS:Security:UserPassword:RequireNonLetterOrDigit") ?? false; - public bool RequireDigit => _configuration.GetValue("Umbraco:CMS:Security:UserPassword:RequireDigit") ?? false; - public bool RequireLowercase => _configuration.GetValue("Umbraco:CMS:Security:UserPassword:RequireLowercase") ?? false; - public bool RequireUppercase => _configuration.GetValue("Umbraco:CMS:Security:UserPassword:RequireUppercase") ?? false; - public bool UseLegacyEncoding => _configuration.GetValue("Umbraco:CMS:Security:UserPassword:UseLegacyEncoding") ?? false; - public string HashAlgorithmType => _configuration.GetValue("Umbraco:CMS:Security:UserPassword:HashAlgorithmType") ?? "HMACSHA256"; - public int MaxFailedAccessAttemptsBeforeLockout => _configuration.GetValue("Umbraco:CMS:Security:UserPassword:MaxFailedAccessAttemptsBeforeLockout") ?? 5; + public int RequiredLength => _configuration.GetValue("Umbraco:CMS:Security:UserPassword:RequiredLength", 10); + + public bool RequireNonLetterOrDigit => + _configuration.GetValue("Umbraco:CMS:Security:UserPassword:RequireNonLetterOrDigit", false); + + public bool RequireDigit => _configuration.GetValue("Umbraco:CMS:Security:UserPassword:RequireDigit", false); + + public bool RequireLowercase => + _configuration.GetValue("Umbraco:CMS:Security:UserPassword:RequireLowercase", false); + + public bool RequireUppercase => + _configuration.GetValue("Umbraco:CMS:Security:UserPassword:RequireUppercase", false); + + public bool UseLegacyEncoding => + _configuration.GetValue("Umbraco:CMS:Security:UserPassword:UseLegacyEncoding", false); + + public string HashAlgorithmType => + _configuration.GetValue("Umbraco:CMS:Security:UserPassword:HashAlgorithmType", "HMACSHA256"); + + public int MaxFailedAccessAttemptsBeforeLockout => + _configuration.GetValue("Umbraco:CMS:Security:UserPassword:MaxFailedAccessAttemptsBeforeLockout", 5); } } diff --git a/src/Umbraco.Configuration/Models/WebRoutingSettings.cs b/src/Umbraco.Configuration/Models/WebRoutingSettings.cs index cb78373b74..c2670de511 100644 --- a/src/Umbraco.Configuration/Models/WebRoutingSettings.cs +++ b/src/Umbraco.Configuration/Models/WebRoutingSettings.cs @@ -4,21 +4,37 @@ using Umbraco.Core.Models.PublishedContent; namespace Umbraco.Configuration.Models { - internal class WebRoutingSettings : IWebRoutingSettings + internal class WebRoutingSettings : IWebRoutingSettings { private readonly IConfiguration _configuration; + public WebRoutingSettings(IConfiguration configuration) { _configuration = configuration; } - public bool TrySkipIisCustomErrors => _configuration.GetValue("Umbraco:CMS:WebRouting:TrySkipIisCustomErrors") ?? false; - public bool InternalRedirectPreservesTemplate => _configuration.GetValue("Umbraco:CMS:WebRouting:InternalRedirectPreservesTemplate") ?? false; - public bool DisableAlternativeTemplates => _configuration.GetValue("Umbraco:CMS:WebRouting:DisableAlternativeTemplates") ?? false; - public bool ValidateAlternativeTemplates => _configuration.GetValue("Umbraco:CMS:WebRouting:ValidateAlternativeTemplates") ?? false; - public bool DisableFindContentByIdPath => _configuration.GetValue("Umbraco:CMS:WebRouting:DisableFindContentByIdPath") ?? false; - public bool DisableRedirectUrlTracking => _configuration.GetValue("Umbraco:CMS:WebRouting:DisableRedirectUrlTracking") ?? false; - public string UrlProviderMode => _configuration.GetValue("Umbraco:CMS:WebRouting:UrlProviderMode") ?? UrlMode.Auto.ToString(); - public string UmbracoApplicationUrl => _configuration.GetValue("Umbraco:CMS:WebRouting:UmbracoApplicationUrl") ?? null; + public bool TrySkipIisCustomErrors => + _configuration.GetValue("Umbraco:CMS:WebRouting:TrySkipIisCustomErrors", false); + + public bool InternalRedirectPreservesTemplate => + _configuration.GetValue("Umbraco:CMS:WebRouting:InternalRedirectPreservesTemplate", false); + + public bool DisableAlternativeTemplates => + _configuration.GetValue("Umbraco:CMS:WebRouting:DisableAlternativeTemplates", false); + + public bool ValidateAlternativeTemplates => + _configuration.GetValue("Umbraco:CMS:WebRouting:ValidateAlternativeTemplates", false); + + public bool DisableFindContentByIdPath => + _configuration.GetValue("Umbraco:CMS:WebRouting:DisableFindContentByIdPath", false); + + public bool DisableRedirectUrlTracking => + _configuration.GetValue("Umbraco:CMS:WebRouting:DisableRedirectUrlTracking", false); + + public string UrlProviderMode => + _configuration.GetValue("Umbraco:CMS:WebRouting:UrlProviderMode", UrlMode.Auto.ToString()); + + public string UmbracoApplicationUrl => + _configuration.GetValue("Umbraco:CMS:WebRouting:UmbracoApplicationUrl"); } }