From 0f6e18023faecb7e7837a9074f7feef1db47ffc1 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Thu, 20 Aug 2020 08:24:23 +0100 Subject: [PATCH] Amended most configuration settings classes to public POCOs without interfaces, and loaded into services collection via loading the configuration section. --- .../AspNetCoreConfigsFactory.cs | 36 ++++---- .../Models/ActiveDirectorySettings.cs | 17 +--- .../Models/ContentImagingSettings.cs | 36 ++++++++ .../Models/ContentNotificationSettings.cs | 9 ++ .../Models/ContentSettings.cs | 79 +++++----------- .../Models/CoreDebugSettings.cs | 22 +---- .../Models/ExceptionFilterSettings.cs | 18 +--- .../Models/GlobalSettings.cs | 89 ++++++------------- .../Models/HostingSettings.cs | 24 +++-- .../Models/ImagingCacheSettings.cs | 16 ++++ .../Models/ImagingResizeSettings.cs | 13 +++ .../Models/ImagingSettings.cs | 25 +----- .../Models/IndexCreatorSettings.cs | 19 +--- .../Models/KeepAliveSettings.cs | 20 +---- .../Models/LoggingSettings.cs | 18 +--- .../MemberPasswordConfigurationSettings.cs | 35 ++------ .../Models/ModelsBuilderConfig.cs | 50 +++++------ .../Models/NuCacheSettings.cs | 18 +--- .../Models/RuntimeSettings.cs | 18 +--- .../Models/SecuritySettings.cs | 32 ++----- .../Models/SmtpSettings.cs | 21 +++++ .../Models/TypeFinderSettings.cs | 19 +--- .../UserPasswordConfigurationSettings.cs | 32 ++----- .../Models/WebRoutingSettings.cs | 39 +++----- .../UmbracoCoreServiceCollectionExtensions.cs | 25 ++++-- 25 files changed, 284 insertions(+), 446 deletions(-) create mode 100644 src/Umbraco.Configuration/Models/ContentImagingSettings.cs create mode 100644 src/Umbraco.Configuration/Models/ContentNotificationSettings.cs create mode 100644 src/Umbraco.Configuration/Models/ImagingCacheSettings.cs create mode 100644 src/Umbraco.Configuration/Models/ImagingResizeSettings.cs create mode 100644 src/Umbraco.Configuration/Models/SmtpSettings.cs diff --git a/src/Umbraco.Configuration/AspNetCoreConfigsFactory.cs b/src/Umbraco.Configuration/AspNetCoreConfigsFactory.cs index 02e9303c9a..b388579687 100644 --- a/src/Umbraco.Configuration/AspNetCoreConfigsFactory.cs +++ b/src/Umbraco.Configuration/AspNetCoreConfigsFactory.cs @@ -22,27 +22,27 @@ namespace Umbraco.Configuration var configs = new Configs(); //configs.Add(() => new TourSettings(_configuration)); - configs.Add(() => new CoreDebugSettings(_configuration)); + //configs.Add(() => new CoreDebugSettings(_configuration)); configs.Add(() => new RequestHandlerSettings(_configuration)); - configs.Add(() => new SecuritySettings(_configuration)); - configs.Add(() => new UserPasswordConfigurationSettings(_configuration)); - configs.Add(() => new MemberPasswordConfigurationSettings(_configuration)); - configs.Add(() => new KeepAliveSettings(_configuration)); - configs.Add(() => new ContentSettings(_configuration)); + //configs.Add(() => new SecuritySettings(_configuration)); + //configs.Add(() => new UserPasswordConfigurationSettings(_configuration)); + //configs.Add(() => new MemberPasswordConfigurationSettings(_configuration)); + //configs.Add(() => new KeepAliveSettings(_configuration)); + //configs.Add(() => new ContentSettings(_configuration)); configs.Add(() => new HealthChecksSettings(_configuration)); - configs.Add(() => new LoggingSettings(_configuration)); - configs.Add(() => new ExceptionFilterSettings(_configuration)); - configs.Add(() => new ActiveDirectorySettings(_configuration)); - configs.Add(() => new RuntimeSettings(_configuration)); - configs.Add(() => new TypeFinderSettings(_configuration)); - configs.Add(() => new NuCacheSettings(_configuration)); - configs.Add(() => new WebRoutingSettings(_configuration)); - configs.Add(() => new IndexCreatorSettings(_configuration)); - configs.Add(() => new ModelsBuilderConfig(_configuration)); - configs.Add(() => new HostingSettings(_configuration)); - configs.Add(() => new GlobalSettings(_configuration)); + //configs.Add(() => new LoggingSettings(_configuration)); + //configs.Add(() => new ExceptionFilterSettings(_configuration)); + //configs.Add(() => new ActiveDirectorySettings(_configuration)); + //configs.Add(() => new RuntimeSettings(_configuration)); + //configs.Add(() => new TypeFinderSettings(_configuration)); + //configs.Add(() => new NuCacheSettings(_configuration)); + //configs.Add(() => new WebRoutingSettings(_configuration)); + //configs.Add(() => new IndexCreatorSettings(_configuration)); + //configs.Add(() => new ModelsBuilderConfig(_configuration)); + //configs.Add(() => new HostingSettings(_configuration)); + //configs.Add(() => new GlobalSettings(_configuration)); configs.Add(() => new ConnectionStrings(_configuration)); - configs.Add(() => new ImagingSettings(_configuration)); + //configs.Add(() => new ImagingSettings(_configuration)); return configs; } diff --git a/src/Umbraco.Configuration/Models/ActiveDirectorySettings.cs b/src/Umbraco.Configuration/Models/ActiveDirectorySettings.cs index 015fb17a8e..d7d2de1490 100644 --- a/src/Umbraco.Configuration/Models/ActiveDirectorySettings.cs +++ b/src/Umbraco.Configuration/Models/ActiveDirectorySettings.cs @@ -1,19 +1,10 @@ -using Microsoft.Extensions.Configuration; -using Umbraco.Core; -using Umbraco.Core.Configuration; +using System.Text.Json.Serialization; namespace Umbraco.Configuration.Models { - internal class ActiveDirectorySettings : IActiveDirectorySettings + public class ActiveDirectorySettings { - private const string Prefix = Constants.Configuration.ConfigPrefix + "ActiveDirectory:"; - private readonly IConfiguration _configuration; - - public ActiveDirectorySettings(IConfiguration configuration) - { - _configuration = configuration; - } - - public string ActiveDirectoryDomain => _configuration.GetValue(Prefix+"Domain"); + [JsonPropertyName("Domain")] + public string ActiveDirectoryDomain { get; set; } } } diff --git a/src/Umbraco.Configuration/Models/ContentImagingSettings.cs b/src/Umbraco.Configuration/Models/ContentImagingSettings.cs new file mode 100644 index 0000000000..f38e4194e8 --- /dev/null +++ b/src/Umbraco.Configuration/Models/ContentImagingSettings.cs @@ -0,0 +1,36 @@ +using System.Collections.Generic; +using System.Text.Json.Serialization; +using Umbraco.Core; +using Umbraco.Core.Configuration.UmbracoSettings; + +namespace Umbraco.Configuration.Models +{ + public class ContentImagingSettings + { + private static readonly ImagingAutoFillUploadField[] DefaultImagingAutoFillUploadField = +{ + new ImagingAutoFillUploadField + { + Alias = Constants.Conventions.Media.File, + WidthFieldAlias = Constants.Conventions.Media.Width, + HeightFieldAlias = Constants.Conventions.Media.Height, + ExtensionFieldAlias = Constants.Conventions.Media.Extension, + LengthFieldAlias = Constants.Conventions.Media.Bytes, + } + }; + + public IEnumerable ImageFileTypes { get; set; } = new[] { "jpeg", "jpg", "gif", "bmp", "png", "tiff", "tif" }; + + [JsonPropertyName("AutoFillImageProperties")] + public IEnumerable ImageAutoFillProperties { get; set; } = DefaultImagingAutoFillUploadField; + + private class ImagingAutoFillUploadField : IImagingAutoFillUploadField + { + public string Alias { get; set; } + public string WidthFieldAlias { get; set; } + public string HeightFieldAlias { get; set; } + public string LengthFieldAlias { get; set; } + public string ExtensionFieldAlias { get; set; } + } + } +} diff --git a/src/Umbraco.Configuration/Models/ContentNotificationSettings.cs b/src/Umbraco.Configuration/Models/ContentNotificationSettings.cs new file mode 100644 index 0000000000..96f6baddff --- /dev/null +++ b/src/Umbraco.Configuration/Models/ContentNotificationSettings.cs @@ -0,0 +1,9 @@ +namespace Umbraco.Configuration.Models +{ + public class ContentNotificationSettings + { + public string NotificationEmailAddress { get; set; } + + public bool DisableHtmlEmail { get; set; } = false; + } +} diff --git a/src/Umbraco.Configuration/Models/ContentSettings.cs b/src/Umbraco.Configuration/Models/ContentSettings.cs index 6c9b986dd1..945dc14728 100644 --- a/src/Umbraco.Configuration/Models/ContentSettings.cs +++ b/src/Umbraco.Configuration/Models/ContentSettings.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Text.Json.Serialization; using Microsoft.Extensions.Configuration; using Umbraco.Core; using Umbraco.Core.Configuration.UmbracoSettings; @@ -8,7 +9,7 @@ using Umbraco.Core.Macros; namespace Umbraco.Configuration.Models { - internal class ContentSettings : IContentSettings + public class ContentSettings { private const string Prefix = Constants.Configuration.ConfigPrefix + "Content:"; private const string NotificationsPrefix = Prefix + "Notifications:"; @@ -16,64 +17,35 @@ namespace Umbraco.Configuration.Models private const string DefaultPreviewBadge = @"
Preview modeClick to end
"; - private static readonly ImagingAutoFillUploadField[] DefaultImagingAutoFillUploadField = - { - new ImagingAutoFillUploadField - { - Alias = Constants.Conventions.Media.File, - WidthFieldAlias = Constants.Conventions.Media.Width, - HeightFieldAlias =Constants.Conventions.Media.Height, - ExtensionFieldAlias =Constants.Conventions.Media.Extension, - LengthFieldAlias =Constants.Conventions.Media.Bytes, - } - }; + public ContentNotificationSettings Notifications { get; set; } - private readonly IConfiguration _configuration; + public ContentImagingSettings Imaging { get; set; } - public ContentSettings(IConfiguration configuration) - { - _configuration = configuration; - } + public bool ResolveUrlsFromTextString { get; set; } = false; - public string NotificationEmailAddress => - _configuration.GetValue(NotificationsPrefix+"Email"); + // TODO: to retain previous configuration structure, this should come from a nested collection, + // "Errors:Error404". Although we can use JsonPropertyName to map when the JSON field name differs + // from the one in this class, not sure how we'd "flatten" a collection like this. + [JsonPropertyName("Error404")] + public IEnumerable Error404Collection { get; set; } - public bool DisableHtmlEmail => - _configuration.GetValue(NotificationsPrefix+"DisableHtmlEmail", false); + // public IEnumerable Error404Collection => _configuration + // .GetSection(Prefix + "Errors:Error404") + // .GetChildren() + // .Select(x => new ContentErrorPage(x)); - public IEnumerable ImageFileTypes => _configuration.GetValue( - ImagingPrefix+"ImageFileTypes", new[] { "jpeg", "jpg", "gif", "bmp", "png", "tiff", "tif" }); + public string PreviewBadge { get; set; } = DefaultPreviewBadge; - public IEnumerable ImageAutoFillProperties => - _configuration.GetValue(ImagingPrefix+"AutoFillImageProperties", - DefaultImagingAutoFillUploadField); + [JsonPropertyName("MacroErrors")] + public MacroErrorBehaviour MacroErrorBehaviour { get; set; } = MacroErrorBehaviour.Inline; + public IEnumerable DisallowedUploadFiles { get; set; } = new[] { "ashx", "aspx", "ascx", "config", "cshtml", "vbhtml", "asmx", "air", "axd" }; - public bool ResolveUrlsFromTextString => - _configuration.GetValue(Prefix+"ResolveUrlsFromTextString", false); + public IEnumerable AllowedUploadFiles { get; set; } = Array.Empty(); - public IEnumerable Error404Collection => _configuration - .GetSection(Prefix+"Errors:Error404") - .GetChildren() - .Select(x => new ContentErrorPage(x)); + public bool ShowDeprecatedPropertyEditors { get; set; } = false; - public string PreviewBadge => _configuration.GetValue(Prefix+"PreviewBadge", DefaultPreviewBadge); - - public MacroErrorBehaviour MacroErrorBehaviour => - _configuration.GetValue(Prefix+"MacroErrors", MacroErrorBehaviour.Inline); - - public IEnumerable DisallowedUploadFiles => _configuration.GetValue( - Prefix+"DisallowedUploadFiles", - new[] { "ashx", "aspx", "ascx", "config", "cshtml", "vbhtml", "asmx", "air", "axd" }); - - public IEnumerable AllowedUploadFiles => - _configuration.GetValue(Prefix+"AllowedUploadFiles", Array.Empty()); - - public bool ShowDeprecatedPropertyEditors => - _configuration.GetValue(Prefix+"ShowDeprecatedPropertyEditors", false); - - public string LoginBackgroundImage => - _configuration.GetValue(Prefix+"LoginBackgroundImage", "assets/img/login.jpg"); + public string LoginBackgroundImage { get; set; } = "assets/img/login.jpg"; private class ContentErrorPage : IContentErrorPage { @@ -106,14 +78,5 @@ namespace Umbraco.Configuration.Models public bool HasContentKey { get; } public string Culture { get; set; } } - - private class ImagingAutoFillUploadField : IImagingAutoFillUploadField - { - public string Alias { get; set; } - public string WidthFieldAlias { get; set; } - public string HeightFieldAlias { get; set; } - public string LengthFieldAlias { get; set; } - public string ExtensionFieldAlias { get; set; } - } } } diff --git a/src/Umbraco.Configuration/Models/CoreDebugSettings.cs b/src/Umbraco.Configuration/Models/CoreDebugSettings.cs index 6d6c0eaf0d..e95a432dd4 100644 --- a/src/Umbraco.Configuration/Models/CoreDebugSettings.cs +++ b/src/Umbraco.Configuration/Models/CoreDebugSettings.cs @@ -1,23 +1,9 @@ -using Microsoft.Extensions.Configuration; -using Umbraco.Core; -using Umbraco.Core.Configuration; - -namespace Umbraco.Configuration.Models +namespace Umbraco.Configuration.Models { - internal class CoreDebugSettings : ICoreDebugSettings + public class CoreDebugSettings { - private const string Prefix = Constants.Configuration.ConfigPrefix + "Core:Debug:"; - private readonly IConfiguration _configuration; + public bool LogUncompletedScopes { get; set; } = false; - public CoreDebugSettings(IConfiguration configuration) - { - _configuration = configuration; - } - - public bool LogUncompletedScopes => - _configuration.GetValue(Prefix+"LogUncompletedScopes", false); - - public bool DumpOnTimeoutThreadAbort => - _configuration.GetValue(Prefix+"DumpOnTimeoutThreadAbort", false); + public bool DumpOnTimeoutThreadAbort { get; set; } = false; } } diff --git a/src/Umbraco.Configuration/Models/ExceptionFilterSettings.cs b/src/Umbraco.Configuration/Models/ExceptionFilterSettings.cs index 581daf9f40..d5fe64abce 100644 --- a/src/Umbraco.Configuration/Models/ExceptionFilterSettings.cs +++ b/src/Umbraco.Configuration/Models/ExceptionFilterSettings.cs @@ -1,19 +1,7 @@ -using Microsoft.Extensions.Configuration; -using Umbraco.Core; -using Umbraco.Core.Configuration; - -namespace Umbraco.Configuration.Models +namespace Umbraco.Configuration.Models { - internal class ExceptionFilterSettings : IExceptionFilterSettings + public class ExceptionFilterSettings { - private const string Prefix = Constants.Configuration.ConfigPrefix + "ExceptionFilter:"; - private readonly IConfiguration _configuration; - - public ExceptionFilterSettings(IConfiguration configuration) - { - _configuration = configuration; - } - - public bool Disabled => _configuration.GetValue(Prefix+"Disabled", false); + public bool Disabled { get; set; } = false; } } diff --git a/src/Umbraco.Configuration/Models/GlobalSettings.cs b/src/Umbraco.Configuration/Models/GlobalSettings.cs index 908ba71590..fcedd504c9 100644 --- a/src/Umbraco.Configuration/Models/GlobalSettings.cs +++ b/src/Umbraco.Configuration/Models/GlobalSettings.cs @@ -1,9 +1,4 @@ -using System; -using System.Linq; -using System.Net.Mail; -using Microsoft.Extensions.Configuration; -using Umbraco.Core; -using Umbraco.Core.Configuration; +using System.Text.Json.Serialization; namespace Umbraco.Configuration.Models { @@ -11,91 +6,57 @@ namespace Umbraco.Configuration.Models /// The GlobalSettings Class contains general settings information for the entire Umbraco instance based on information /// from web.config appsettings /// - internal class GlobalSettings : IGlobalSettings + public class GlobalSettings { - private const string Prefix = Constants.Configuration.ConfigGlobalPrefix; - 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; + public string ReservedUrls { get; set; } = StaticReservedUrls; - public GlobalSettings(IConfiguration configuration) - { - _configuration = configuration; - } - - public string ReservedUrls => _configuration.GetValue(Prefix + "ReservedUrls", StaticReservedUrls); - public string ReservedPaths => _configuration.GetValue(Prefix + "ReservedPaths", StaticReservedPaths); + public string ReservedPaths { get; set; } = StaticReservedPaths; // TODO: https://github.com/umbraco/Umbraco-CMS/issues/4238 - stop having version in web.config appSettings - public string ConfigurationStatus - { - get => _configuration.GetValue(Prefix + "ConfigurationStatus"); - set => throw new NotImplementedException("We should remove this and only use the value from database"); - } + // TODO: previously this would throw on set, but presumably we can't do that if we do still want this in config. + public string ConfigurationStatus { get; set; } - public int TimeOutInMinutes => _configuration.GetValue(Prefix + "TimeOutInMinutes", 20); - public string DefaultUILanguage => _configuration.GetValue(Prefix + "DefaultUILanguage", "en-US"); + public int TimeOutInMinutes { get; set; } = 20; - public bool HideTopLevelNodeFromPath => - _configuration.GetValue(Prefix + "HideTopLevelNodeFromPath", false); + public string DefaultUILanguage { get; set; } = "en-US"; - public bool UseHttps => _configuration.GetValue(Prefix + "UseHttps", false); - public int VersionCheckPeriod => _configuration.GetValue(Prefix + "VersionCheckPeriod", 7); - public string UmbracoPath => _configuration.GetValue(Prefix + "UmbracoPath", "~/umbraco"); - public string UmbracoCssPath => _configuration.GetValue(Prefix + "UmbracoCssPath", "~/css"); + public bool HideTopLevelNodeFromPath { get; set; } = false; - public string UmbracoScriptsPath => - _configuration.GetValue(Prefix + "UmbracoScriptsPath", "~/scripts"); + public bool UseHttps { get; set; } = false; - public string UmbracoMediaPath => _configuration.GetValue(Prefix + "UmbracoMediaPath", "~/media"); + public int VersionCheckPeriod { get; set; } = 7; - public bool InstallMissingDatabase => - _configuration.GetValue(Prefix + "InstallMissingDatabase", false); + public string UmbracoPath { get; set; } = "~/umbraco"; - public bool InstallEmptyDatabase => _configuration.GetValue(Prefix + "InstallEmptyDatabase", false); + public string UmbracoCssPath { get; set; } = "~/css"; - public bool DisableElectionForSingleServer => - _configuration.GetValue(Prefix + "DisableElectionForSingleServer", false); + public string UmbracoScriptsPath { get; set; } = "~/scripts"; - public string RegisterType => _configuration.GetValue(Prefix + "RegisterType", string.Empty); + public string UmbracoMediaPath { get; set; } = "~/media"; - public string DatabaseFactoryServerVersion => - _configuration.GetValue(Prefix + "DatabaseFactoryServerVersion", string.Empty); + public bool InstallMissingDatabase { get; set; } = false; - public string MainDomLock => _configuration.GetValue(Prefix + "MainDomLock", string.Empty); + public bool InstallEmptyDatabase { get; set; } = false; - public string NoNodesViewPath => - _configuration.GetValue(Prefix + "NoNodesViewPath", "~/config/splashes/NoNodes.cshtml"); + public bool DisableElectionForSingleServer { get; set; } = false; - public bool IsSmtpServerConfigured => - _configuration.GetSection(Constants.Configuration.ConfigGlobalPrefix + "Smtp")?.GetChildren().Any() ?? false; + public string RegisterType { get; set; } = string.Empty; - public ISmtpSettings SmtpSettings => - new SmtpSettingsImpl(_configuration.GetSection(Constants.Configuration.ConfigGlobalPrefix + "Smtp")); + public string DatabaseFactoryServerVersion { get; set; } = string.Empty; - private class SmtpSettingsImpl : ISmtpSettings - { - private readonly IConfigurationSection _configurationSection; + public string MainDomLock { get; set; } = string.Empty; - public SmtpSettingsImpl(IConfigurationSection configurationSection) - { - _configurationSection = configurationSection; - } + public string NoNodesViewPath { get; set; } = "~/config/splashes/NoNodes.cshtml"; - 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 SmtpDeliveryMethod DeliveryMethod => _configurationSection.GetValue("DeliveryMethod"); + public bool IsSmtpServerConfigured => !string.IsNullOrWhiteSpace(SmtpSettings?.Host); - public string Username => _configurationSection.GetValue("Username"); - - public string Password => _configurationSection.GetValue("Password"); - } + [JsonPropertyName("Smtp")] + public SmtpSettings SmtpSettings { get; set; } } } diff --git a/src/Umbraco.Configuration/Models/HostingSettings.cs b/src/Umbraco.Configuration/Models/HostingSettings.cs index f0fbcf4cab..e096a207da 100644 --- a/src/Umbraco.Configuration/Models/HostingSettings.cs +++ b/src/Umbraco.Configuration/Models/HostingSettings.cs @@ -1,22 +1,17 @@ -using Microsoft.Extensions.Configuration; +using System.Text.Json.Serialization; +using Microsoft.Extensions.Configuration; using Umbraco.Core; using Umbraco.Core.Configuration; namespace Umbraco.Configuration.Models { - internal class HostingSettings : IHostingSettings + public class HostingSettings { - private const string Prefix = Constants.Configuration.ConfigPrefix + "Hosting:"; - private readonly IConfiguration _configuration; - - public HostingSettings(IConfiguration configuration) - { - _configuration = configuration; - } - - /// - public LocalTempStorage LocalTempStorageLocation => - _configuration.GetValue(Prefix+"LocalTempStorage", LocalTempStorage.Default); + /// + /// Gets the configuration for the location of temporary files. + /// + [JsonPropertyName("LocalTempStorage")] + public LocalTempStorage LocalTempStorageLocation { get; set; } = LocalTempStorage.Default; public string ApplicationVirtualPath => null; @@ -24,6 +19,7 @@ namespace Umbraco.Configuration.Models /// Gets a value indicating whether umbraco is running in [debug mode]. /// /// true if [debug mode]; otherwise, false. - public bool DebugMode => _configuration.GetValue(Prefix+"Debug", false); + [JsonPropertyName("Debug")] + public bool DebugMode { get; set; } = false; } } diff --git a/src/Umbraco.Configuration/Models/ImagingCacheSettings.cs b/src/Umbraco.Configuration/Models/ImagingCacheSettings.cs new file mode 100644 index 0000000000..05e3cb4677 --- /dev/null +++ b/src/Umbraco.Configuration/Models/ImagingCacheSettings.cs @@ -0,0 +1,16 @@ +using System.Text.Json.Serialization; + +namespace Umbraco.Configuration.Models +{ + public class ImagingCacheSettings + { + public int MaxBrowserCacheDays { get; set; } = 7; + + public int MaxCacheDays { get; set; } = 365; + + public uint CachedNameLength { get; set; } = 7; + + [JsonPropertyName("Folder")] + public string CacheFolder { get; set; } = "../App_Data/Cache"; + } +} diff --git a/src/Umbraco.Configuration/Models/ImagingResizeSettings.cs b/src/Umbraco.Configuration/Models/ImagingResizeSettings.cs new file mode 100644 index 0000000000..1d7424c4f2 --- /dev/null +++ b/src/Umbraco.Configuration/Models/ImagingResizeSettings.cs @@ -0,0 +1,13 @@ +using System.Text.Json.Serialization; + +namespace Umbraco.Configuration.Models +{ + public class ImagingResizeSettings + { + [JsonPropertyName("MaxWidth")] + public int MaxResizeWidth { get; set; } = 5000; + + [JsonPropertyName("MaxHeight")] + public int MaxResizeHeight { get; set; } = 5000; + } +} diff --git a/src/Umbraco.Configuration/Models/ImagingSettings.cs b/src/Umbraco.Configuration/Models/ImagingSettings.cs index 4a9501b2ba..36a63d7766 100644 --- a/src/Umbraco.Configuration/Models/ImagingSettings.cs +++ b/src/Umbraco.Configuration/Models/ImagingSettings.cs @@ -1,26 +1,9 @@ -using Microsoft.Extensions.Configuration; -using Umbraco.Core; -using Umbraco.Core.Configuration; - -namespace Umbraco.Configuration.Models +namespace Umbraco.Configuration.Models { - internal class ImagingSettings : IImagingSettings + public class ImagingSettings { - private const string Prefix = Constants.Configuration.ConfigPrefix + "Imaging:"; - private const string CachePrefix = Prefix + "Cache:"; - private const string ResizePrefix = Prefix + "Resize:"; - private readonly IConfiguration _configuration; + public ImagingCacheSettings Cache { get; set; } - public ImagingSettings(IConfiguration configuration) - { - _configuration = configuration; - } - - public int MaxBrowserCacheDays => _configuration.GetValue(CachePrefix + "MaxBrowserCacheDays", 7); - public int MaxCacheDays => _configuration.GetValue(CachePrefix + "MaxCacheDays", 365); - public uint CachedNameLength => _configuration.GetValue(CachePrefix + "CachedNameLength", (uint) 8); - public string CacheFolder => _configuration.GetValue(CachePrefix + "Folder", "../App_Data/Cache"); - public int MaxResizeWidth => _configuration.GetValue(ResizePrefix + "MaxWidth", 5000); - public int MaxResizeHeight => _configuration.GetValue(ResizePrefix + "MaxHeight", 5000); + public ImagingResizeSettings Resize { get; set; } } } diff --git a/src/Umbraco.Configuration/Models/IndexCreatorSettings.cs b/src/Umbraco.Configuration/Models/IndexCreatorSettings.cs index b4bb000552..7738527ed7 100644 --- a/src/Umbraco.Configuration/Models/IndexCreatorSettings.cs +++ b/src/Umbraco.Configuration/Models/IndexCreatorSettings.cs @@ -1,20 +1,7 @@ -using Microsoft.Extensions.Configuration; -using Umbraco.Core; -using Umbraco.Core.Configuration; - -namespace Umbraco.Configuration.Models +namespace Umbraco.Configuration.Models { - internal class IndexCreatorSettings : IIndexCreatorSettings + public class IndexCreatorSettings { - private const string Prefix = Constants.Configuration.ConfigPrefix + "Examine:"; - private readonly IConfiguration _configuration; - - public IndexCreatorSettings(IConfiguration configuration) - { - _configuration = configuration; - } - - public string LuceneDirectoryFactory => - _configuration.GetValue(Prefix + "LuceneDirectoryFactory"); + public string LuceneDirectoryFactory { get; set; } } } diff --git a/src/Umbraco.Configuration/Models/KeepAliveSettings.cs b/src/Umbraco.Configuration/Models/KeepAliveSettings.cs index 04194e1a3c..c6f0b9a98c 100644 --- a/src/Umbraco.Configuration/Models/KeepAliveSettings.cs +++ b/src/Umbraco.Configuration/Models/KeepAliveSettings.cs @@ -1,23 +1,11 @@ -using Microsoft.Extensions.Configuration; -using Umbraco.Core; -using Umbraco.Core.Configuration.UmbracoSettings; +using Umbraco.Core.Configuration.UmbracoSettings; namespace Umbraco.Configuration.Models { - internal class KeepAliveSettings : IKeepAliveSettings + public class KeepAliveSettings : IKeepAliveSettings { - private const string Prefix = Constants.Configuration.ConfigPrefix + "KeepAlive:"; - private readonly IConfiguration _configuration; + public bool DisableKeepAliveTask { get; set; } = false; - public KeepAliveSettings(IConfiguration configuration) - { - _configuration = configuration; - } - - public bool DisableKeepAliveTask => - _configuration.GetValue(Prefix + "DisableKeepAliveTask", false); - - public string KeepAlivePingUrl => _configuration.GetValue(Prefix + "KeepAlivePingUrl", - "{umbracoApplicationUrl}/api/keepalive/ping"); + public string KeepAlivePingUrl { get; set; } = "{umbracoApplicationUrl}/api/keepalive/ping"; } } diff --git a/src/Umbraco.Configuration/Models/LoggingSettings.cs b/src/Umbraco.Configuration/Models/LoggingSettings.cs index b05fe03875..9cc0a084d2 100644 --- a/src/Umbraco.Configuration/Models/LoggingSettings.cs +++ b/src/Umbraco.Configuration/Models/LoggingSettings.cs @@ -1,19 +1,7 @@ -using Microsoft.Extensions.Configuration; -using Umbraco.Core; -using Umbraco.Core.Configuration.UmbracoSettings; - -namespace Umbraco.Configuration.Models +namespace Umbraco.Configuration.Models { - internal class LoggingSettings : ILoggingSettings + public class LoggingSettings { - private const string Prefix = Constants.Configuration.ConfigPrefix + "Logging:"; - private readonly IConfiguration _configuration; - - public LoggingSettings(IConfiguration configuration) - { - _configuration = configuration; - } - - public int MaxLogAge => _configuration.GetValue(Prefix + "MaxLogAge", -1); + public int MaxLogAge { get; set; } = -1; } } diff --git a/src/Umbraco.Configuration/Models/MemberPasswordConfigurationSettings.cs b/src/Umbraco.Configuration/Models/MemberPasswordConfigurationSettings.cs index 5a8313a351..32bed610fb 100644 --- a/src/Umbraco.Configuration/Models/MemberPasswordConfigurationSettings.cs +++ b/src/Umbraco.Configuration/Models/MemberPasswordConfigurationSettings.cs @@ -1,38 +1,21 @@ -using Microsoft.Extensions.Configuration; -using Umbraco.Core; -using Umbraco.Core.Configuration; +using Umbraco.Core; namespace Umbraco.Configuration.Models { - internal class MemberPasswordConfigurationSettings : IMemberPasswordConfiguration + public class MemberPasswordConfigurationSettings { - private const string Prefix = Constants.Configuration.ConfigSecurityPrefix + "MemberPassword:"; - private readonly IConfiguration _configuration; + public int RequiredLength { get; set; } = 10; - public MemberPasswordConfigurationSettings(IConfiguration configuration) - { - _configuration = configuration; - } + public bool RequireNonLetterOrDigit { get; set; } = false; - public int RequiredLength => - _configuration.GetValue(Prefix + "RequiredLength", 10); + public bool RequireDigit { get; set; } = false; - public bool RequireNonLetterOrDigit => - _configuration.GetValue(Prefix + "RequireNonLetterOrDigit", false); + public bool RequireLowercase { get; set; } = false; - public bool RequireDigit => - _configuration.GetValue(Prefix + "RequireDigit", false); + public bool RequireUppercase { get; set; } = false; - public bool RequireLowercase => - _configuration.GetValue(Prefix + "RequireLowercase", false); + public string HashAlgorithmType { get; set; } = Constants.Security.AspNetUmbraco8PasswordHashAlgorithmName; - public bool RequireUppercase => - _configuration.GetValue(Prefix + "RequireUppercase", false); - - public string HashAlgorithmType => - _configuration.GetValue(Prefix + "HashAlgorithmType", Constants.Security.AspNetUmbraco8PasswordHashAlgorithmName); // TODO: Need to change to current format when we do members - - public int MaxFailedAccessAttemptsBeforeLockout => - _configuration.GetValue(Prefix + "MaxFailedAccessAttemptsBeforeLockout", 5); + public int MaxFailedAccessAttemptsBeforeLockout { get; set; } = 5; } } diff --git a/src/Umbraco.Configuration/Models/ModelsBuilderConfig.cs b/src/Umbraco.Configuration/Models/ModelsBuilderConfig.cs index d111dbba70..d580ba1b7c 100644 --- a/src/Umbraco.Configuration/Models/ModelsBuilderConfig.cs +++ b/src/Umbraco.Configuration/Models/ModelsBuilderConfig.cs @@ -7,20 +7,9 @@ namespace Umbraco.Configuration.Models /// /// Represents the models builder configuration. /// - internal class ModelsBuilderConfig : IModelsBuilderConfig + public class ModelsBuilderConfig { - private const string Prefix = Constants.Configuration.ConfigModelsBuilderPrefix; - private readonly IConfiguration _configuration; - - /// - /// Initializes a new instance of the class. - /// - public ModelsBuilderConfig(IConfiguration configuration) - { - _configuration = configuration; - } - - public string DefaultModelsDirectory => "~/App_Data/Models"; + public static string DefaultModelsDirectory => "~/App_Data/Models"; /// /// Gets a value indicating whether the whole models experience is enabled. @@ -29,25 +18,26 @@ namespace Umbraco.Configuration.Models /// If this is false then absolutely nothing happens. /// Default value is false which means that unless we have this setting, nothing happens. /// - public bool Enable => _configuration.GetValue(Prefix+"Enable", false); + public bool Enable { get; set; } = false; /// /// Gets the models mode. /// - public ModelsMode ModelsMode => - _configuration.GetValue(Prefix+"ModelsMode", ModelsMode.Nothing); + public ModelsMode ModelsMode { get; set; } = ModelsMode.Nothing; /// /// 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(Prefix+"ModelsNamespace"); + public string ModelsNamespace { get; set; } /// /// 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(Prefix+"EnableFactory", true); + public bool EnableFactory { get; set; } = true; + + private bool _flagOutOfDateModels; /// /// Gets a value indicating whether we should flag out-of-date models. @@ -57,15 +47,26 @@ namespace Umbraco.Configuration.Models /// 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(Prefix+"FlagOutOfDateModels", false) && !ModelsMode.IsLive(); + public bool FlagOutOfDateModels + { + get => _flagOutOfDateModels; + + set + { + if (!ModelsMode.IsLive()) + { + _flagOutOfDateModels = false; + } + + _flagOutOfDateModels = value; + } + } /// /// Gets the models directory. /// /// Default is ~/App_Data/Models but that can be changed. - public string ModelsDirectory => - _configuration.GetValue(Prefix+"ModelsDirectory", "~/App_Data/Models"); + public string ModelsDirectory { get; set; } = DefaultModelsDirectory; /// /// Gets a value indicating whether to accept an unsafe value for ModelsDirectory. @@ -74,13 +75,12 @@ namespace Umbraco.Configuration.Models /// An unsafe value is an absolute path, or a relative path pointing outside /// of the website root. /// - public bool AcceptUnsafeModelsDirectory => - _configuration.GetValue(Prefix+"AcceptUnsafeModelsDirectory", false); + public bool AcceptUnsafeModelsDirectory { get; set; } = false; /// /// 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(Prefix+"DebugLevel", 0); + public int DebugLevel { get; set; } = 0; } } diff --git a/src/Umbraco.Configuration/Models/NuCacheSettings.cs b/src/Umbraco.Configuration/Models/NuCacheSettings.cs index 51b8b1fe08..0077146620 100644 --- a/src/Umbraco.Configuration/Models/NuCacheSettings.cs +++ b/src/Umbraco.Configuration/Models/NuCacheSettings.cs @@ -1,19 +1,7 @@ -using Microsoft.Extensions.Configuration; -using Umbraco.Core; -using Umbraco.Core.Configuration; - -namespace Umbraco.Configuration.Models +namespace Umbraco.Configuration.Models { - internal class NuCacheSettings : INuCacheSettings + public class NuCacheSettings { - private const string Prefix = Constants.Configuration.ConfigPrefix + "NuCache:"; - private readonly IConfiguration _configuration; - - public NuCacheSettings(IConfiguration configuration) - { - _configuration = configuration; - } - - public string BTreeBlockSize => _configuration.GetValue(Prefix+"BTreeBlockSize"); + public string BTreeBlockSize { get; set; } } } diff --git a/src/Umbraco.Configuration/Models/RuntimeSettings.cs b/src/Umbraco.Configuration/Models/RuntimeSettings.cs index ef129030b6..367a6c53a3 100644 --- a/src/Umbraco.Configuration/Models/RuntimeSettings.cs +++ b/src/Umbraco.Configuration/Models/RuntimeSettings.cs @@ -1,19 +1,9 @@ -using Microsoft.Extensions.Configuration; -using Umbraco.Core; -using Umbraco.Core.Configuration; - -namespace Umbraco.Configuration.Models +namespace Umbraco.Configuration.Models { - internal class RuntimeSettings : IRuntimeSettings + public class RuntimeSettings { - private const string Prefix = Constants.Configuration.ConfigPrefix + "Runtime:"; - private readonly IConfiguration _configuration; - public RuntimeSettings(IConfiguration configuration) - { - _configuration = configuration; - } + public int? MaxQueryStringLength { get; set; } - public int? MaxQueryStringLength => _configuration.GetValue(Prefix+"MaxRequestLength"); - public int? MaxRequestLength => _configuration.GetValue(Prefix+"MaxRequestLength"); + public int? MaxRequestLength { get; set; } } } diff --git a/src/Umbraco.Configuration/Models/SecuritySettings.cs b/src/Umbraco.Configuration/Models/SecuritySettings.cs index 297c95b1af..12ea6b7c17 100644 --- a/src/Umbraco.Configuration/Models/SecuritySettings.cs +++ b/src/Umbraco.Configuration/Models/SecuritySettings.cs @@ -1,33 +1,17 @@ -using Microsoft.Extensions.Configuration; -using Umbraco.Core; -using Umbraco.Core.Configuration.UmbracoSettings; - -namespace Umbraco.Configuration.Models +namespace Umbraco.Configuration.Models { - internal class SecuritySettings : ISecuritySettings + public class SecuritySettings { - private const string Prefix = Constants.Configuration.ConfigSecurityPrefix; - private readonly IConfiguration _configuration; + public bool KeepUserLoggedIn { get; set; } = false; - public SecuritySettings(IConfiguration configuration) - { - _configuration = configuration; - } + public bool HideDisabledUsersInBackoffice { get; set; } = false; - public bool KeepUserLoggedIn => _configuration.GetValue(Prefix + "KeepUserLoggedIn", false); + public bool AllowPasswordReset { get; set; } = true; - public bool HideDisabledUsersInBackoffice => - _configuration.GetValue(Prefix + "HideDisabledUsersInBackoffice", false); + public string AuthCookieName { get; set; } = "UMB_UCONTEXT"; - public bool AllowPasswordReset => - _configuration.GetValue(Prefix + "AllowPasswordResetAllowPasswordReset", true); + public string AuthCookieDomain { get; set; } - public string AuthCookieName => - _configuration.GetValue(Prefix + "AuthCookieName", "UMB_UCONTEXT"); - - public string AuthCookieDomain => - _configuration.GetValue(Prefix + "AuthCookieDomain"); - - public bool UsernameIsEmail => _configuration.GetValue(Prefix + "UsernameIsEmail", true); + public bool UsernameIsEmail { get; set; } = true; } } diff --git a/src/Umbraco.Configuration/Models/SmtpSettings.cs b/src/Umbraco.Configuration/Models/SmtpSettings.cs new file mode 100644 index 0000000000..c4a874c5ae --- /dev/null +++ b/src/Umbraco.Configuration/Models/SmtpSettings.cs @@ -0,0 +1,21 @@ +using System.Net.Mail; + +namespace Umbraco.Configuration.Models +{ + public class SmtpSettings + { + public string From { get; set; } + + public string Host { get; set; } + + public int Port { get; set; } + + public string PickupDirectoryLocation { get; set; } + + public SmtpDeliveryMethod DeliveryMethod { get; set; } + + public string Username { get; set; } + + public string Password { get; set; } + } +} diff --git a/src/Umbraco.Configuration/Models/TypeFinderSettings.cs b/src/Umbraco.Configuration/Models/TypeFinderSettings.cs index 8a1f7ac9e0..65690f9668 100644 --- a/src/Umbraco.Configuration/Models/TypeFinderSettings.cs +++ b/src/Umbraco.Configuration/Models/TypeFinderSettings.cs @@ -1,20 +1,7 @@ -using Microsoft.Extensions.Configuration; -using Umbraco.Core; -using Umbraco.Core.Configuration; - -namespace Umbraco.Configuration.Models +namespace Umbraco.Configuration.Models { - internal class TypeFinderSettings : ITypeFinderSettings + public class TypeFinderSettings { - private const string Prefix = Constants.Configuration.ConfigPrefix + "TypeFinder:"; - private readonly IConfiguration _configuration; - - public TypeFinderSettings(IConfiguration configuration) - { - _configuration = configuration; - } - - public string AssembliesAcceptingLoadExceptions => - _configuration.GetValue(Prefix+"AssembliesAcceptingLoadExceptions"); + public string AssembliesAcceptingLoadExceptions { get; set; } } } diff --git a/src/Umbraco.Configuration/Models/UserPasswordConfigurationSettings.cs b/src/Umbraco.Configuration/Models/UserPasswordConfigurationSettings.cs index 25ce3e3d9a..81724f9259 100644 --- a/src/Umbraco.Configuration/Models/UserPasswordConfigurationSettings.cs +++ b/src/Umbraco.Configuration/Models/UserPasswordConfigurationSettings.cs @@ -1,36 +1,22 @@ -using Microsoft.Extensions.Configuration; -using Umbraco.Core; +using Umbraco.Core; using Umbraco.Core.Configuration; namespace Umbraco.Configuration.Models { - internal class UserPasswordConfigurationSettings : IUserPasswordConfiguration + public class UserPasswordConfigurationSettings { - private const string Prefix = Constants.Configuration.ConfigSecurityPrefix + "UserPassword:"; - private readonly IConfiguration _configuration; + public int RequiredLength { get; set; } = 10; - public UserPasswordConfigurationSettings(IConfiguration configuration) - { - _configuration = configuration; - } + public bool RequireNonLetterOrDigit { get; set; } = false; - public int RequiredLength => _configuration.GetValue(Prefix + "RequiredLength", 10); + public bool RequireDigit { get; set; } = false; - public bool RequireNonLetterOrDigit => - _configuration.GetValue(Prefix + "RequireNonLetterOrDigit", false); + public bool RequireLowercase { get; set; } = false; - public bool RequireDigit => _configuration.GetValue(Prefix + "RequireDigit", false); + public bool RequireUppercase { get; set; } = false; - public bool RequireLowercase => - _configuration.GetValue(Prefix + "RequireLowercase", false); + public string HashAlgorithmType { get; set; } = Constants.Security.AspNetCoreV3PasswordHashAlgorithmName; - public bool RequireUppercase => - _configuration.GetValue(Prefix + "RequireUppercase", false); - - public string HashAlgorithmType => - _configuration.GetValue(Prefix + "HashAlgorithmType", Constants.Security.AspNetCoreV3PasswordHashAlgorithmName); - - public int MaxFailedAccessAttemptsBeforeLockout => - _configuration.GetValue(Prefix + "MaxFailedAccessAttemptsBeforeLockout", 5); + public int MaxFailedAccessAttemptsBeforeLockout { get; set; } = 5; } } diff --git a/src/Umbraco.Configuration/Models/WebRoutingSettings.cs b/src/Umbraco.Configuration/Models/WebRoutingSettings.cs index 9ac856ca9f..d0e36b4241 100644 --- a/src/Umbraco.Configuration/Models/WebRoutingSettings.cs +++ b/src/Umbraco.Configuration/Models/WebRoutingSettings.cs @@ -1,42 +1,23 @@ -using Microsoft.Extensions.Configuration; -using Umbraco.Core; -using Umbraco.Core.Configuration.UmbracoSettings; -using Umbraco.Core.Models.PublishedContent; +using Umbraco.Core.Models.PublishedContent; namespace Umbraco.Configuration.Models { - internal class WebRoutingSettings : IWebRoutingSettings + public class WebRoutingSettings { - private const string Prefix = Constants.Configuration.ConfigPrefix + "WebRouting:"; - private readonly IConfiguration _configuration; + public bool TrySkipIisCustomErrors { get; set; } = false; - public WebRoutingSettings(IConfiguration configuration) - { - _configuration = configuration; - } + public bool InternalRedirectPreservesTemplate { get; set; } = false; - public bool TrySkipIisCustomErrors => - _configuration.GetValue(Prefix + "TrySkipIisCustomErrors", false); + public bool DisableAlternativeTemplates { get; set; } = false; - public bool InternalRedirectPreservesTemplate => - _configuration.GetValue(Prefix + "InternalRedirectPreservesTemplate", false); + public bool ValidateAlternativeTemplates { get; set; } = false; - public bool DisableAlternativeTemplates => - _configuration.GetValue(Prefix + "DisableAlternativeTemplates", false); + public bool DisableFindContentByIdPath { get; set; } = false; - public bool ValidateAlternativeTemplates => - _configuration.GetValue(Prefix + "ValidateAlternativeTemplates", false); + public bool DisableRedirectUrlTracking { get; set; } = false; - public bool DisableFindContentByIdPath => - _configuration.GetValue(Prefix + "DisableFindContentByIdPath", false); + public string UrlProviderMode { get; set; } = UrlMode.Auto.ToString(); - public bool DisableRedirectUrlTracking => - _configuration.GetValue(Prefix + "DisableRedirectUrlTracking", false); - - public string UrlProviderMode => - _configuration.GetValue(Prefix + "UrlProviderMode", UrlMode.Auto.ToString()); - - public string UmbracoApplicationUrl => - _configuration.GetValue(Prefix + "UmbracoApplicationUrl"); + public string UmbracoApplicationUrl { get; set; } } } diff --git a/src/Umbraco.Web.Common/Extensions/UmbracoCoreServiceCollectionExtensions.cs b/src/Umbraco.Web.Common/Extensions/UmbracoCoreServiceCollectionExtensions.cs index 94e9062902..cbc374f93b 100644 --- a/src/Umbraco.Web.Common/Extensions/UmbracoCoreServiceCollectionExtensions.cs +++ b/src/Umbraco.Web.Common/Extensions/UmbracoCoreServiceCollectionExtensions.cs @@ -1,12 +1,9 @@ using System; using System.Data.Common; using System.Data.SqlClient; -using System.Globalization; using System.IO; -using System.Linq; using System.Reflection; using System.Runtime.InteropServices; -using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Configuration; @@ -28,13 +25,11 @@ using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.SqlSyntax; using Umbraco.Core.Runtime; using Umbraco.Web.Common.AspNetCore; -using Umbraco.Web.Common.Extensions; using Umbraco.Web.Common.Profiler; +using CoreDebugSettings = Umbraco.Configuration.Models.CoreDebugSettings; namespace Umbraco.Extensions { - - public static class UmbracoCoreServiceCollectionExtensions { /// @@ -107,6 +102,24 @@ namespace Umbraco.Extensions if (configuration == null) throw new ArgumentNullException(nameof(configuration)); services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Tours")); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Core:Debug")); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigSecurityPrefix)); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigSecurityPrefix + "UserPassword:")); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigSecurityPrefix + "MemberPassword:")); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "KeepAlive:")); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Content:")); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Logging:")); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "ExceptionFilter:")); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "ActiveDirectory:")); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Runtime:")); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "TypeFinder:")); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "NuCache:")); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "WebRouting:")); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Examine:")); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigModelsBuilderPrefix)); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Hosting:")); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigGlobalPrefix)); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Imaging:")); var configsFactory = new AspNetCoreConfigsFactory(configuration); var configs = configsFactory.Create();