using Microsoft.AspNetCore.Identity;
using SameBeat.Application.Interfejsy;
using SameBeat.Domain.Encje;
namespace SameBeat.Infrastructure.Autoryzacja;
///
/// Implementacja oparta na Microsoft.AspNetCore.Identity.PasswordHasher -- sprawdzony, standardowy
/// algorytm (PBKDF2), bez wciagania calego ASP.NET Identity.
///
public class UslugaHaszowaniaHasel : IUslugaHaszowaniaHasel
{
private readonly PasswordHasher _hasher = new();
public string Haszuj(Uzytkownik uzytkownik, string hasloJawne) => _hasher.HashPassword(uzytkownik, hasloJawne);
public WynikWeryfikacjiHasla Weryfikuj(Uzytkownik uzytkownik, string hasloHash, string hasloJawne)
{
var wynik = _hasher.VerifyHashedPassword(uzytkownik, hasloHash, hasloJawne);
return wynik switch
{
PasswordVerificationResult.Failed => WynikWeryfikacjiHasla.Niepoprawne,
PasswordVerificationResult.Success => WynikWeryfikacjiHasla.Poprawne,
PasswordVerificationResult.SuccessRehashNeeded => WynikWeryfikacjiHasla.PoprawneWymagaRehaszowania,
_ => WynikWeryfikacjiHasla.Niepoprawne
};
}
}