From 9b054eaa477a1271d86bde851803e3b03e46caf6 Mon Sep 17 00:00:00 2001 From: Shannon Date: Mon, 26 Oct 2015 14:51:19 +0100 Subject: [PATCH] Adds native ability to be able to fallback to default password checking if specifying a custom IBackOfficeUserPasswordChecker --- src/Umbraco.Core/Security/BackOfficeUserManager.cs | 13 +++++++++---- .../Security/BackOfficeUserPasswordCheckerResult.cs | 12 ++++++++++++ .../Security/IBackOfficeUserPasswordChecker.cs | 2 +- src/Umbraco.Core/Umbraco.Core.csproj | 1 + 4 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 src/Umbraco.Core/Security/BackOfficeUserPasswordCheckerResult.cs diff --git a/src/Umbraco.Core/Security/BackOfficeUserManager.cs b/src/Umbraco.Core/Security/BackOfficeUserManager.cs index cf6e9a737b..dfe59e1783 100644 --- a/src/Umbraco.Core/Security/BackOfficeUserManager.cs +++ b/src/Umbraco.Core/Security/BackOfficeUserManager.cs @@ -201,12 +201,17 @@ namespace Umbraco.Core.Security /// public async override Task CheckPasswordAsync(T user, string password) { - if (BackOfficeUserPasswordChecker == null) + if (BackOfficeUserPasswordChecker != null) { - //use the default behavior - return await base.CheckPasswordAsync(user, password); + var result = await BackOfficeUserPasswordChecker.CheckPasswordAsync(user, password); + //if the result indicates to not fallback to the default, then return true if the credentials are valid + if (result != BackOfficeUserPasswordCheckerResult.FallbackToDefaultChecker) + { + return result == BackOfficeUserPasswordCheckerResult.ValidCredentials; + } } - return await BackOfficeUserPasswordChecker.CheckPasswordAsync(user, password); + //use the default behavior + return await base.CheckPasswordAsync(user, password); } /// diff --git a/src/Umbraco.Core/Security/BackOfficeUserPasswordCheckerResult.cs b/src/Umbraco.Core/Security/BackOfficeUserPasswordCheckerResult.cs new file mode 100644 index 0000000000..8ce843856a --- /dev/null +++ b/src/Umbraco.Core/Security/BackOfficeUserPasswordCheckerResult.cs @@ -0,0 +1,12 @@ +namespace Umbraco.Core.Security +{ + /// + /// The result returned from the IBackOfficeUserPasswordChecker + /// + public enum BackOfficeUserPasswordCheckerResult + { + ValidCredentials, + InvalidCredentials, + FallbackToDefaultChecker + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Security/IBackOfficeUserPasswordChecker.cs b/src/Umbraco.Core/Security/IBackOfficeUserPasswordChecker.cs index bd9abcdee2..6ee65e0fef 100644 --- a/src/Umbraco.Core/Security/IBackOfficeUserPasswordChecker.cs +++ b/src/Umbraco.Core/Security/IBackOfficeUserPasswordChecker.cs @@ -9,6 +9,6 @@ namespace Umbraco.Core.Security /// public interface IBackOfficeUserPasswordChecker { - Task CheckPasswordAsync(BackOfficeIdentityUser user, string password); + Task CheckPasswordAsync(BackOfficeIdentityUser user, string password); } } \ No newline at end of file diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index 54c7c44ff5..2f52df5629 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -462,6 +462,7 @@ +