From 96104b9fdfa65f9afb8ffd64e2c1111583cfb795 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Wed, 26 Aug 2020 11:29:21 +0200 Subject: [PATCH] Fixed further failing tests. --- .../ConfigModelConversionsFromLegacy.cs | 31 +++++++--- .../ConfigModelConversionsToLegacy.cs | 30 ++++++++++ .../Builders/GlobalSettingsBuilder.cs | 4 +- .../Configurations/GlobalSettingsTests.cs | 2 - .../Migrations/AdvancedMigrationTests.cs | 1 - .../Migrations/MigrationPlanTests.cs | 2 - .../Routing/UmbracoModuleTests.cs | 5 +- .../BackOfficeOwinUserManagerTests.cs | 5 +- .../Configuration/ConfigModelConversions.cs | 56 ------------------- .../Security/BackOfficeOwinUserManager.cs | 9 ++- src/Umbraco.Web/Umbraco.Web.csproj | 1 - 11 files changed, 64 insertions(+), 82 deletions(-) delete mode 100644 src/Umbraco.Web/Configuration/ConfigModelConversions.cs diff --git a/src/Umbraco.Infrastructure/Configuration/ConfigModelConversionsFromLegacy.cs b/src/Umbraco.Infrastructure/Configuration/ConfigModelConversionsFromLegacy.cs index 529568ca16..6ce73a9f6c 100644 --- a/src/Umbraco.Infrastructure/Configuration/ConfigModelConversionsFromLegacy.cs +++ b/src/Umbraco.Infrastructure/Configuration/ConfigModelConversionsFromLegacy.cs @@ -28,15 +28,15 @@ namespace Umbraco.Infrastructure.Configuration ReservedUrls = globalSettings.ReservedUrls, Smtp = globalSettings.SmtpSettings != null ? new SmtpSettings - { - DeliveryMethod = globalSettings.SmtpSettings.DeliveryMethod, - From = globalSettings.SmtpSettings.From, - Host = globalSettings.SmtpSettings.Host, - Password = globalSettings.SmtpSettings.Password, - PickupDirectoryLocation = globalSettings.SmtpSettings.PickupDirectoryLocation, - Port = globalSettings.SmtpSettings.Port, - Username = globalSettings.SmtpSettings.Username, - } + { + DeliveryMethod = globalSettings.SmtpSettings.DeliveryMethod, + From = globalSettings.SmtpSettings.From, + Host = globalSettings.SmtpSettings.Host, + Password = globalSettings.SmtpSettings.Password, + PickupDirectoryLocation = globalSettings.SmtpSettings.PickupDirectoryLocation, + Port = globalSettings.SmtpSettings.Port, + Username = globalSettings.SmtpSettings.Username, + } : new SmtpSettings(), TimeOutInMinutes = globalSettings.TimeOutInMinutes, UmbracoCssPath = globalSettings.UmbracoCssPath, @@ -55,5 +55,18 @@ namespace Umbraco.Infrastructure.Configuration UmbracoConnectionString = connectionStrings[Constants.System.UmbracoConnectionName].ConnectionString }; } + + public static UserPasswordConfigurationSettings ConvertUserPasswordConfiguration(IUserPasswordConfiguration passwordConfiguration) + { + return new UserPasswordConfigurationSettings + { + HashAlgorithmType = passwordConfiguration.HashAlgorithmType, + RequireDigit = passwordConfiguration.RequireDigit, + RequiredLength = passwordConfiguration.RequiredLength, + RequireLowercase = passwordConfiguration.RequireLowercase, + RequireNonLetterOrDigit = passwordConfiguration.RequireNonLetterOrDigit, + RequireUppercase = passwordConfiguration.RequireUppercase, + }; + } } } diff --git a/src/Umbraco.Infrastructure/Configuration/ConfigModelConversionsToLegacy.cs b/src/Umbraco.Infrastructure/Configuration/ConfigModelConversionsToLegacy.cs index 5b3607992c..5c2d8c090f 100644 --- a/src/Umbraco.Infrastructure/Configuration/ConfigModelConversionsToLegacy.cs +++ b/src/Umbraco.Infrastructure/Configuration/ConfigModelConversionsToLegacy.cs @@ -55,6 +55,19 @@ namespace Umbraco.Infrastructure.Configuration return result; } + public static IUserPasswordConfiguration ConvertUserPasswordConfiguration(UserPasswordConfigurationSettings passwordConfiguration) + { + return new TestUserPasswordConfiguration + { + HashAlgorithmType = passwordConfiguration.HashAlgorithmType, + RequireDigit = passwordConfiguration.RequireDigit, + RequiredLength = passwordConfiguration.RequiredLength, + RequireLowercase = passwordConfiguration.RequireLowercase, + RequireNonLetterOrDigit = passwordConfiguration.RequireNonLetterOrDigit, + RequireUppercase = passwordConfiguration.RequireUppercase, + }; + } + private class TestGlobalSettings : IGlobalSettings { public string ReservedUrls { get; set; } @@ -126,5 +139,22 @@ namespace Umbraco.Infrastructure.Configuration _dictionary.Add(key, new ConfigConnectionString(connectionString, string.Empty, key)); } } + + private class TestUserPasswordConfiguration : IUserPasswordConfiguration + { + public int RequiredLength { get; set; } + + public bool RequireNonLetterOrDigit { get; set; } + + public bool RequireDigit { get; set; } + + public bool RequireLowercase { get; set; } + + public bool RequireUppercase { get; set; } + + public string HashAlgorithmType { get; set; } + + public int MaxFailedAccessAttemptsBeforeLockout { get; set; } + } } } diff --git a/src/Umbraco.Tests.Common/Builders/GlobalSettingsBuilder.cs b/src/Umbraco.Tests.Common/Builders/GlobalSettingsBuilder.cs index ab07331108..735495b8d7 100644 --- a/src/Umbraco.Tests.Common/Builders/GlobalSettingsBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/GlobalSettingsBuilder.cs @@ -162,8 +162,8 @@ namespace Umbraco.Tests.Common.Builders var installEmptyDatabase = _installEmptyDatabase ?? false; var installMissingDatabase = _installMissingDatabase ?? false; var registerType = _registerType ?? null; - var reservedPaths = _reservedPaths ?? "~/app_plugins/,~/install/,~/mini-profiler-resources/,"; - var reservedUrls = _reservedUrls ?? "~/config/splashes/noNodes.aspx,~/.well-known,"; + var reservedPaths = _reservedPaths ?? GlobalSettings.StaticReservedPaths; + var reservedUrls = _reservedUrls ?? GlobalSettings.StaticReservedUrls; var path = _path ?? "~/umbraco"; var useHttps = _useHttps ?? false; var umbracoCssPath = _umbracoCssPath ?? "~/css"; diff --git a/src/Umbraco.Tests/Configurations/GlobalSettingsTests.cs b/src/Umbraco.Tests/Configurations/GlobalSettingsTests.cs index cae2919621..69e20fe063 100644 --- a/src/Umbraco.Tests/Configurations/GlobalSettingsTests.cs +++ b/src/Umbraco.Tests/Configurations/GlobalSettingsTests.cs @@ -1,10 +1,8 @@ using Moq; using NUnit.Framework; using Umbraco.Core.Configuration; -using Umbraco.Core.IO; using Umbraco.Tests.Common.Builders; using Umbraco.Tests.TestHelpers; -using Umbraco.Web.Configuration; using Umbraco.Web.Hosting; namespace Umbraco.Tests.Configurations diff --git a/src/Umbraco.Tests/Migrations/AdvancedMigrationTests.cs b/src/Umbraco.Tests/Migrations/AdvancedMigrationTests.cs index dd5fd32971..bba2649af3 100644 --- a/src/Umbraco.Tests/Migrations/AdvancedMigrationTests.cs +++ b/src/Umbraco.Tests/Migrations/AdvancedMigrationTests.cs @@ -12,7 +12,6 @@ using Umbraco.Core.Services; using Umbraco.Tests.Common.Builders; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.Testing; -using Umbraco.Web.Configuration; namespace Umbraco.Tests.Migrations { diff --git a/src/Umbraco.Tests/Migrations/MigrationPlanTests.cs b/src/Umbraco.Tests/Migrations/MigrationPlanTests.cs index 273255f987..6fc06d0618 100644 --- a/src/Umbraco.Tests/Migrations/MigrationPlanTests.cs +++ b/src/Umbraco.Tests/Migrations/MigrationPlanTests.cs @@ -9,14 +9,12 @@ using Umbraco.Core.Logging; using Umbraco.Core.Migrations; using Umbraco.Core.Migrations.Upgrade; using Umbraco.Core.Persistence; -using Umbraco.Core.Persistence.SqlSyntax; using Umbraco.Core.Scoping; using Umbraco.Core.Services; using Umbraco.Persistance.SqlCe; using Umbraco.Tests.Common.Builders; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.Testing; -using Umbraco.Web.Configuration; namespace Umbraco.Tests.Migrations { diff --git a/src/Umbraco.Tests/Routing/UmbracoModuleTests.cs b/src/Umbraco.Tests/Routing/UmbracoModuleTests.cs index 87d63f3d8f..bc2511fe41 100644 --- a/src/Umbraco.Tests/Routing/UmbracoModuleTests.cs +++ b/src/Umbraco.Tests/Routing/UmbracoModuleTests.cs @@ -3,6 +3,7 @@ using System.Threading; using Moq; using NUnit.Framework; using Umbraco.Core; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Logging; using Umbraco.Infrastructure.Configuration; using Umbraco.Tests.Common.Builders; @@ -24,7 +25,9 @@ namespace Umbraco.Tests.Routing // FIXME: be able to get the UmbracoModule from the container. any reason settings were from testobjects? //create the module var logger = Mock.Of(); - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettingsBuilder() + .WithReservedPaths((GlobalSettings.StaticReservedPaths + "~/umbraco")) + .Build(); var runtime = new RuntimeState(globalSettings, UmbracoVersion); _module = new UmbracoInjectedModule diff --git a/src/Umbraco.Tests/Security/BackOfficeOwinUserManagerTests.cs b/src/Umbraco.Tests/Security/BackOfficeOwinUserManagerTests.cs index b6a8c225e0..ca38f0ce70 100644 --- a/src/Umbraco.Tests/Security/BackOfficeOwinUserManagerTests.cs +++ b/src/Umbraco.Tests/Security/BackOfficeOwinUserManagerTests.cs @@ -10,8 +10,8 @@ using Umbraco.Core; using Umbraco.Core.BackOffice; using Umbraco.Core.Configuration; using Umbraco.Core.Models.Membership; +using Umbraco.Infrastructure.Configuration; using Umbraco.Net; -using Umbraco.Tests.Common.Builders; using Umbraco.Web.Security; namespace Umbraco.Tests.Security @@ -45,8 +45,7 @@ namespace Umbraco.Tests.Security var mockGlobalSettings = new Mock(); mockGlobalSettings.Setup(x => x.DefaultUILanguage).Returns("test"); - var globalSettings = new GlobalSettingsBuilder().Build(); - var user = new BackOfficeIdentityUser(globalSettings, 2, new List()) + var user = new BackOfficeIdentityUser(ConfigModelConversionsFromLegacy.ConvertGlobalSettings(mockGlobalSettings.Object), 2, new List()) { UserName = "alice", Name = "Alice", diff --git a/src/Umbraco.Web/Configuration/ConfigModelConversions.cs b/src/Umbraco.Web/Configuration/ConfigModelConversions.cs deleted file mode 100644 index f3b74734b4..0000000000 --- a/src/Umbraco.Web/Configuration/ConfigModelConversions.cs +++ /dev/null @@ -1,56 +0,0 @@ -using Microsoft.AspNetCore.Identity; -using Microsoft.Extensions.Options; -using Umbraco.Core; -using Umbraco.Core.BackOffice; -using Umbraco.Core.Configuration; -using Umbraco.Core.Configuration.Models; - -namespace Umbraco.Web.Configuration -{ - /// - /// TEMPORARY: this class has been added just to ensure Umbraco.Web functionality continues to compile, by - /// converting between e.g. (used by - /// legacy configuration and (used by Netcore/IOptions configuration). - /// - public static class ConfigModelConversions - { - public static IOptions ConvertToOptionsOfUserPasswordConfigurationSettings(IOptions identityOptions) - { - var passwordOptions = identityOptions.Value.Password; - var lockOutOptions = identityOptions.Value.Lockout; - var passwordConfiguration = new UserPasswordConfigurationSettings - { - MaxFailedAccessAttemptsBeforeLockout = lockOutOptions.MaxFailedAccessAttempts, - HashAlgorithmType = Constants.Security.AspNetCoreV3PasswordHashAlgorithmName, // TODO: not sure where to map this from. - RequireDigit = passwordOptions.RequireDigit, - RequiredLength = passwordOptions.RequiredLength, - RequireLowercase = passwordOptions.RequireLowercase, - RequireNonLetterOrDigit = passwordOptions.RequireNonAlphanumeric, - RequireUppercase = passwordOptions.RequireUppercase, - }; - - return Options.Create(passwordConfiguration); - } - - public static IOptions ConvertToOptionsOfBackOfficeIdentityOptions(IUserPasswordConfiguration passwordConfiguration) - { - var identityOptions = new BackOfficeIdentityOptions - { - Lockout = new LockoutOptions - { - MaxFailedAccessAttempts = passwordConfiguration.MaxFailedAccessAttemptsBeforeLockout, - }, - Password = new PasswordOptions - { - RequireDigit = passwordConfiguration.RequireDigit, - RequiredLength = passwordConfiguration.RequiredLength, - RequireLowercase = passwordConfiguration.RequireLowercase, - RequireNonAlphanumeric = passwordConfiguration.RequireNonLetterOrDigit, - RequireUppercase = passwordConfiguration.RequireUppercase, - } - }; - - return Options.Create(identityOptions); - } - } -} diff --git a/src/Umbraco.Web/Security/BackOfficeOwinUserManager.cs b/src/Umbraco.Web/Security/BackOfficeOwinUserManager.cs index d11edc7bba..13dd242d26 100644 --- a/src/Umbraco.Web/Security/BackOfficeOwinUserManager.cs +++ b/src/Umbraco.Web/Security/BackOfficeOwinUserManager.cs @@ -13,7 +13,6 @@ using Umbraco.Core.Security; using Umbraco.Core.Services; using Umbraco.Infrastructure.Configuration; using Umbraco.Net; -using Umbraco.Web.Configuration; namespace Umbraco.Web.Security { @@ -22,7 +21,7 @@ namespace Umbraco.Web.Security public const string OwinMarkerKey = "Umbraco.Web.Security.Identity.BackOfficeUserManagerMarker"; public BackOfficeOwinUserManager( - IOptions passwordConfiguration, + IUserPasswordConfiguration passwordConfiguration, IIpResolver ipResolver, IUserStore store, IOptions optionsAccessor, @@ -32,9 +31,9 @@ namespace Umbraco.Web.Security BackOfficeIdentityErrorDescriber errors, IDataProtectionProvider dataProtectionProvider, ILogger> logger) - : base(ipResolver, store, optionsAccessor, null, userValidators, passwordValidators, keyNormalizer, errors, null, logger, ConfigModelConversions.ConvertToOptionsOfUserPasswordConfigurationSettings(passwordConfiguration)) + : base(ipResolver, store, optionsAccessor, null, userValidators, passwordValidators, keyNormalizer, errors, null, logger, Microsoft.Extensions.Options.Options.Create(ConfigModelConversionsFromLegacy.ConvertUserPasswordConfiguration(passwordConfiguration))) { - PasswordConfiguration = ConfigModelConversions.ConvertToOptionsOfUserPasswordConfigurationSettings(passwordConfiguration).Value; + PasswordConfiguration = passwordConfiguration; InitUserManager(this, dataProtectionProvider); } @@ -105,7 +104,7 @@ namespace Umbraco.Web.Security options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromDays(30); return new BackOfficeOwinUserManager( - ConfigModelConversions.ConvertToOptionsOfBackOfficeIdentityOptions(passwordConfiguration), + passwordConfiguration, ipResolver, customUserStore, new OptionsWrapper(options), diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index 82af69a21c..64fc7b5886 100644 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -148,7 +148,6 @@ -