Fixed further failing tests.

This commit is contained in:
Andy Butland
2020-08-26 11:29:21 +02:00
parent 25849703cc
commit 96104b9fdf
11 changed files with 64 additions and 82 deletions

View File

@@ -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,
};
}
}
}

View File

@@ -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; }
}
}
}

View File

@@ -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";

View File

@@ -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

View File

@@ -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
{

View File

@@ -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
{

View File

@@ -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<ILogger>();
var globalSettings = new GlobalSettingsBuilder().Build();
var globalSettings = new GlobalSettingsBuilder()
.WithReservedPaths((GlobalSettings.StaticReservedPaths + "~/umbraco"))
.Build();
var runtime = new RuntimeState(globalSettings, UmbracoVersion);
_module = new UmbracoInjectedModule

View File

@@ -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<IGlobalSettings>();
mockGlobalSettings.Setup(x => x.DefaultUILanguage).Returns("test");
var globalSettings = new GlobalSettingsBuilder().Build();
var user = new BackOfficeIdentityUser(globalSettings, 2, new List<IReadOnlyUserGroup>())
var user = new BackOfficeIdentityUser(ConfigModelConversionsFromLegacy.ConvertGlobalSettings(mockGlobalSettings.Object), 2, new List<IReadOnlyUserGroup>())
{
UserName = "alice",
Name = "Alice",

View File

@@ -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
{
/// <summary>
/// TEMPORARY: this class has been added just to ensure Umbraco.Web functionality continues to compile, by
/// converting between e.g. <see cref="BackOfficeIdentityOptions"></see> (used by
/// legacy configuration and <see cref="UserPasswordConfigurationSettings"></see> (used by Netcore/IOptions configuration).
/// </summary>
public static class ConfigModelConversions
{
public static IOptions<UserPasswordConfigurationSettings> ConvertToOptionsOfUserPasswordConfigurationSettings(IOptions<BackOfficeIdentityOptions> 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<BackOfficeIdentityOptions> 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);
}
}
}

View File

@@ -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<BackOfficeIdentityOptions> passwordConfiguration,
IUserPasswordConfiguration passwordConfiguration,
IIpResolver ipResolver,
IUserStore<BackOfficeIdentityUser> store,
IOptions<BackOfficeIdentityOptions> optionsAccessor,
@@ -32,9 +31,9 @@ namespace Umbraco.Web.Security
BackOfficeIdentityErrorDescriber errors,
IDataProtectionProvider dataProtectionProvider,
ILogger<UserManager<BackOfficeIdentityUser>> 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<BackOfficeIdentityOptions>(options),

View File

@@ -148,7 +148,6 @@
<Compile Include="Compose\BackOfficeUserAuditEventsComposer.cs" />
<Compile Include="Compose\NestedContentPropertyComponent.cs" />
<Compile Include="Composing\LightInject\LightInjectContainer.cs" />
<Compile Include="Configuration\ConfigModelConversions.cs" />
<Compile Include="Editors\PasswordChanger.cs" />
<Compile Include="HttpContextExtensions.cs" />
<Compile Include="Macros\MacroRenderer.cs" />