using Elsa.Extensions; using Elsa.Identity.Contracts; using Elsa.Identity.Entities; namespace Elsa.Identity.Services; /// /// Validates user credentials /// public class DefaultUserCredentialsValidator : IUserCredentialsValidator { private readonly IUserProvider _userProvider; private readonly ISecretHasher _secretHasher; /// /// Initializes a new instance of the class. /// public DefaultUserCredentialsValidator(IUserProvider userProvider, ISecretHasher secretHasher) { _userProvider = userProvider; _secretHasher = secretHasher; } /// public async ValueTask ValidateAsync(string username, string password, CancellationToken cancellationToken = default) { var user = await _userProvider.FindByNameAsync(username, cancellationToken); if (user == null) return null; var isValidPassword = _secretHasher.VerifySecret(password, user.HashedPassword, user.HashedPasswordSalt); return isValidPassword ? user : null; } }