From 9cedf5da4c987e50a254e762967024b62001dc8d Mon Sep 17 00:00:00 2001 From: Stephan Date: Fri, 8 Feb 2013 08:08:36 -0100 Subject: [PATCH] U4-1441 - make trySkipIisCustomError value a setting --- .../Configuration/UmbracoSettings.cs | 166 ++++++++---------- .../config/umbracoSettings.Release.config | 9 + .../config/umbracoSettings.config | 9 + .../Routing/PublishedContentRequest.cs | 4 +- 4 files changed, 93 insertions(+), 95 deletions(-) diff --git a/src/Umbraco.Core/Configuration/UmbracoSettings.cs b/src/Umbraco.Core/Configuration/UmbracoSettings.cs index beab6537b3..a3bba29984 100644 --- a/src/Umbraco.Core/Configuration/UmbracoSettings.cs +++ b/src/Umbraco.Core/Configuration/UmbracoSettings.cs @@ -25,7 +25,37 @@ namespace Umbraco.Core.Configuration /// internal class UmbracoSettings { - /// + private static bool GetKeyWithOverride(string key, bool defaultValue, bool? overrideValue) + { + if (overrideValue.HasValue) + return overrideValue.Value; + + bool value; + string stringValue = GetKey(key); + + if (string.IsNullOrWhiteSpace(stringValue)) + return defaultValue; + if (bool.TryParse(stringValue, out value)) + return value; + return defaultValue; + } + + private static int GetKeyWithOverride(string key, int defaultValue, int? overrideValue) + { + if (overrideValue.HasValue) + return overrideValue.Value; + + int value; + string stringValue = GetKey(key); + + if (string.IsNullOrWhiteSpace(stringValue)) + return defaultValue; + if (int.TryParse(stringValue, out value)) + return value; + return defaultValue; + } + + /// /// Used in unit testing to reset all config items that were set with property setters (i.e. did not come from config) /// internal static void ResetSetters() @@ -35,6 +65,7 @@ namespace Umbraco.Core.Configuration _useLegacySchema = null; _useDomainPrefixes = null; _umbracoLibraryCacheDuration = null; + _trySkipIisCustomErrors = null; } internal const string TempFriendlyXmlChildContainerNodename = ""; // "children"; @@ -202,6 +233,7 @@ namespace Umbraco.Core.Configuration return value != null ? value.Attributes["assembly"].Value : ""; } } + /// /// Gets the type of an external logger that can be used to store log items in 3rd party systems /// @@ -350,24 +382,13 @@ namespace Umbraco.Core.Configuration { get { - try - { - if (_useDomainPrefixes.HasValue) - return _useDomainPrefixes.Value; - bool result; - if (bool.TryParse(GetKey("/settings/requestHandler/useDomainPrefixes"), out result)) - return result; - return false; - } - catch - { - return false; - } + // default: false + return GetKeyWithOverride("/settings/requestHandler/useDomainPrefixes", false, _useDomainPrefixes); } - // for unit tests only internal set { - _useDomainPrefixes = value; + // for unit tests only + _useDomainPrefixes = value; } } @@ -381,31 +402,14 @@ namespace Umbraco.Core.Configuration { get { - try - { - if (GlobalSettings.UseDirectoryUrls) - { - if (_addTrailingSlash.HasValue) - return _addTrailingSlash.Value; - bool result; - if (bool.TryParse(GetKey("/settings/requestHandler/addTrailingSlash"), out result)) - return result; - return false; - } - else - { - return false; - } - } - catch - { - return false; - } + // default: false + return GlobalSettings.UseDirectoryUrls + && GetKeyWithOverride("/settings/requestHandler/addTrailingSlash", false, _addTrailingSlash); } - // for unit tests only internal set { - _addTrailingSlash = value; + // for unit tests only + _addTrailingSlash = value; } } @@ -622,31 +626,34 @@ namespace Umbraco.Core.Configuration { get { - if (_forceSafeAliases.HasValue) - return _forceSafeAliases.Value; - - string forceSafeAlias = GetKey("/settings/content/ForceSafeAliases"); - if (String.IsNullOrEmpty(forceSafeAlias)) - return true; - else - { - try - { - return bool.Parse(forceSafeAlias); - } - catch - { - return true; - } - } + // default: true + return GetKeyWithOverride("/settings/content/ForceSafeAliases", true, _forceSafeAliases); } internal set { - //used for unit testing + // used for unit testing _forceSafeAliases = value; } } + private static bool? _trySkipIisCustomErrors; + + /// + /// Gets or sets a value indicating where to try to skip IIS custom errors. + /// + public static bool TrySkipIisCustomErrors + { + get + { + // default: false + return GetKeyWithOverride("/settings/TrySkipIisCustomErrors", false, _trySkipIisCustomErrors); + } + internal set + { + // used for unit testing + _trySkipIisCustomErrors = value; + } + } /// /// Gets the allowed image file types. @@ -676,26 +683,14 @@ namespace Umbraco.Core.Configuration { get { - if (_umbracoLibraryCacheDuration.HasValue) - return _umbracoLibraryCacheDuration.Value; - - string libraryCacheDuration = GetKey("/settings/content/UmbracoLibraryCacheDuration"); - if (String.IsNullOrEmpty(libraryCacheDuration)) - return 1800; - else - { - try - { - return int.Parse(libraryCacheDuration); - } - catch - { - return 1800; - } - } - + // default: 1800 + return GetKeyWithOverride("/settings/content/UmbracoLibraryCacheDuration", 1800, _umbracoLibraryCacheDuration); } - internal set { _umbracoLibraryCacheDuration = value; } + internal set + { + // for unit tests only + _umbracoLibraryCacheDuration = value; + } } /// @@ -1051,27 +1046,12 @@ namespace Umbraco.Core.Configuration { get { - try - { - if (_useLegacySchema.HasValue) - return _useLegacySchema.Value; - - string value = GetKey("/settings/content/UseLegacyXmlSchema"); - bool result; - if (!string.IsNullOrEmpty(value) && bool.TryParse(value, out result)) - return result; - return true; - } - catch (Exception) - { - //default. TODO: When we change this to a real config section we won't have to worry about parse errors - // and should handle defaults with unit tests properly. - return false; - } + // default: true + return GetKeyWithOverride("/settings/content/UseLegacyXmlSchema", true, _useLegacySchema); } internal set { - //used for unit testing + // used for unit testing _useLegacySchema = value; } } diff --git a/src/Umbraco.Web.UI/config/umbracoSettings.Release.config b/src/Umbraco.Web.UI/config/umbracoSettings.Release.config index d70b455d11..9c0978693b 100644 --- a/src/Umbraco.Web.UI/config/umbracoSettings.Release.config +++ b/src/Umbraco.Web.UI/config/umbracoSettings.Release.config @@ -236,4 +236,13 @@ + + false + diff --git a/src/Umbraco.Web.UI/config/umbracoSettings.config b/src/Umbraco.Web.UI/config/umbracoSettings.config index 372777126a..10764d0526 100644 --- a/src/Umbraco.Web.UI/config/umbracoSettings.config +++ b/src/Umbraco.Web.UI/config/umbracoSettings.config @@ -192,4 +192,13 @@ + + false + \ No newline at end of file diff --git a/src/Umbraco.Web/Routing/PublishedContentRequest.cs b/src/Umbraco.Web/Routing/PublishedContentRequest.cs index 62bc7d8f9b..32ea063fe9 100644 --- a/src/Umbraco.Web/Routing/PublishedContentRequest.cs +++ b/src/Umbraco.Web/Routing/PublishedContentRequest.cs @@ -77,7 +77,7 @@ namespace Umbraco.Web.Routing if (this.Is404) { httpContext.Response.StatusCode = 404; - httpContext.Response.TrySkipIisCustomErrors = true; + httpContext.Response.TrySkipIisCustomErrors = Umbraco.Core.Configuration.UmbracoSettings.TrySkipIisCustomErrors; if (!this.HasNode) { @@ -136,7 +136,7 @@ namespace Umbraco.Web.Routing // here .Is404 _has_ to be true httpContext.Response.StatusCode = 404; - httpContext.Response.TrySkipIisCustomErrors = true; + httpContext.Response.TrySkipIisCustomErrors = Umbraco.Core.Configuration.UmbracoSettings.TrySkipIisCustomErrors; if (!this.HasNode) {