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