From ce51262197fa67c1e57880c22c209fdf6f5df033 Mon Sep 17 00:00:00 2001 From: Ben Date: Thu, 24 Oct 2024 20:04:18 +0800 Subject: [PATCH] update the code to use simple validation. --- Oqtane.Client/Installer/Installer.razor | 2 +- .../Resources/Installer/Installer.resx | 5 +- Oqtane.Server/Managers/InstallUserManager.cs | 41 ------------ Oqtane.Server/Managers/UserManager.cs | 63 +++---------------- 4 files changed, 14 insertions(+), 97 deletions(-) delete mode 100644 Oqtane.Server/Managers/InstallUserManager.cs diff --git a/Oqtane.Client/Installer/Installer.razor b/Oqtane.Client/Installer/Installer.razor index 20d4742e..9fb1aa55 100644 --- a/Oqtane.Client/Installer/Installer.razor +++ b/Oqtane.Client/Installer/Installer.razor @@ -279,7 +279,7 @@ } else { - _message = string.Join("
", result.Errors.Select(i => i.Value)); + _message = string.Join("
", result.Errors.Select(i => !string.IsNullOrEmpty(i.Value) ? i.Value : Localizer[i.Key])); } } else diff --git a/Oqtane.Client/Resources/Installer/Installer.resx b/Oqtane.Client/Resources/Installer/Installer.resx index 23e0f7d7..f6b4a7d6 100644 --- a/Oqtane.Client/Resources/Installer/Installer.resx +++ b/Oqtane.Client/Resources/Installer/Installer.resx @@ -136,7 +136,7 @@ Please Enter All Required Fields. Ensure Passwords Match And Email Address Provided Is Valid. - The Password Provided Does Not Meet The Complexity Policy. Passwords Must Be At Least 6 Characters In Length And Contain Uppercase, Lowercase, Numeric, And Punctuation Characters. + The Password Provided Does Not Meet The Complexity Policy For Below Reasons: Please Register Me For Major Product Updates And Security Bulletins @@ -183,4 +183,7 @@ Select a site template + + The Username Provided Does Not Meet The System Requirement, It Can Only Contains Letters Or Digits. + \ No newline at end of file diff --git a/Oqtane.Server/Managers/InstallUserManager.cs b/Oqtane.Server/Managers/InstallUserManager.cs deleted file mode 100644 index 909b36e7..00000000 --- a/Oqtane.Server/Managers/InstallUserManager.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Identity; -using Microsoft.Extensions.Logging; -using Microsoft.Extensions.Options; - -namespace Oqtane.Managers -{ - /// - /// This class is only used for user validation during installation process. - /// - /// - internal class InstallUserManager : UserManager - { - public InstallUserManager(IUserStore store, IOptions optionsAccessor, IPasswordHasher passwordHasher, IEnumerable> userValidators, IEnumerable> passwordValidators, ILookupNormalizer keyNormalizer, IdentityErrorDescriber errors, IServiceProvider services, ILogger> logger) : base(store, optionsAccessor, passwordHasher, userValidators, passwordValidators, keyNormalizer, errors, services, logger) - { - } - - public override async Task FindByNameAsync(string userName) - { - await Task.CompletedTask; - - return null; - } - - public override async Task FindByEmailAsync(string email) - { - await Task.CompletedTask; - - return null; - } - - public override async Task GetUserIdAsync(IdentityUser user) - { - await Task.CompletedTask; - - return null; - } - } -} diff --git a/Oqtane.Server/Managers/UserManager.cs b/Oqtane.Server/Managers/UserManager.cs index 76e0c05d..821e8cd8 100644 --- a/Oqtane.Server/Managers/UserManager.cs +++ b/Oqtane.Server/Managers/UserManager.cs @@ -33,41 +33,8 @@ namespace Oqtane.Managers private readonly ILogManager _logger; private readonly IMemoryCache _cache; private readonly IStringLocalizer _localizer; - private readonly IUserStore _identityStore; - private readonly Microsoft.Extensions.Options.IOptions _identityOptionsAccessor; - private readonly IPasswordHasher _passwordHasher; - private readonly IEnumerable> _userValidators; - private readonly IEnumerable> _passwordValidators; - private readonly ILookupNormalizer _identityKeyNormalizer; - private readonly IdentityErrorDescriber _identityErrors; - private readonly IServiceProvider _identityServices; - private readonly Microsoft.Extensions.Logging.ILogger> _identityLogger; - public UserManager( - IUserRepository users, - IRoleRepository roles, - IUserRoleRepository userRoles, - UserManager identityUserManager, - SignInManager identitySignInManager, - ITenantManager tenantManager, - INotificationRepository notifications, - IFolderRepository folders, - IProfileRepository profiles, - ISettingRepository settings, - ISiteRepository sites, - ISyncManager syncManager, - ILogManager logger, - IMemoryCache cache, - IStringLocalizer localizer, - IUserStore store, - Microsoft.Extensions.Options.IOptions optionsAccessor, - IPasswordHasher passwordHasher, - IEnumerable> userValidators, - IEnumerable> passwordValidators, - ILookupNormalizer keyNormalizer, - IdentityErrorDescriber errors, - IServiceProvider services, - Microsoft.Extensions.Logging.ILogger> identityLogger) + public UserManager(IUserRepository users, IRoleRepository roles, IUserRoleRepository userRoles, UserManager identityUserManager, SignInManager identitySignInManager, ITenantManager tenantManager, INotificationRepository notifications, IFolderRepository folders, IProfileRepository profiles, ISettingRepository settings, ISiteRepository sites, ISyncManager syncManager, ILogManager logger, IMemoryCache cache, IStringLocalizer localizer) { _users = users; _roles = roles; @@ -84,15 +51,6 @@ namespace Oqtane.Managers _logger = logger; _cache = cache; _localizer = localizer; - _identityStore = store; - _identityOptionsAccessor = optionsAccessor; - _passwordHasher = passwordHasher; - _userValidators = userValidators; - _passwordValidators = passwordValidators; - _identityKeyNormalizer = keyNormalizer; - _identityErrors = errors; - _identityServices = services; - _identityLogger = identityLogger; } public User GetUser(int userid, int siteid) @@ -585,25 +543,22 @@ namespace Oqtane.Managers public async Task ValidateUser(string username, string email, string password) { var validateResult = new UserValidateResult { Succeeded = true }; - var installUserManager = new InstallUserManager(_identityStore, _identityOptionsAccessor, _passwordHasher, _userValidators, _passwordValidators, _identityKeyNormalizer, _identityErrors, _identityServices, _identityLogger); - var user = new IdentityUser { UserName = username, Email = email, EmailConfirmed = true }; - var userValidator = new UserValidator(); - var userResult = await userValidator.ValidateAsync(installUserManager, user); - if (!userResult.Succeeded) + //validate username + var allowedChars = _identityUserManager.Options.User.AllowedUserNameCharacters; + if (string.IsNullOrWhiteSpace(username) || (!string.IsNullOrEmpty(allowedChars) && username.Any(c => !allowedChars.Contains(c)))) { validateResult.Succeeded = false; - if(userResult.Errors != null) - { - validateResult.Errors = userResult.Errors?.ToDictionary(i => i.Code, i => i.Description); - } + validateResult.Errors.Add("Message.Username.Invalid", string.Empty); } + //validate password var passwordValidator = new PasswordValidator(); - var passwordResult = await passwordValidator.ValidateAsync(installUserManager, null, password); - if (!passwordResult.Succeeded && !validateResult.Errors.ContainsKey("InvalidPassword")) + var passwordResult = await passwordValidator.ValidateAsync(_identityUserManager, null, password); + if (!passwordResult.Succeeded) { validateResult.Succeeded = false; + validateResult.Errors.Add("Message.Password.Invalid", string.Empty); if (passwordResult.Errors != null) { foreach (var error in passwordResult.Errors)