mirror of
https://github.com/chylex/Minecraft-Phantom-Panel.git
synced 2025-04-30 15:34:06 +02:00
42 lines
1.3 KiB
C#
42 lines
1.3 KiB
C#
using System.Collections.Immutable;
|
|
using Microsoft.AspNetCore.Identity;
|
|
using Phantom.Server.Database.Entities;
|
|
|
|
namespace Phantom.Server.Services.Users;
|
|
|
|
internal static class UserPasswords {
|
|
private static PasswordHasher<UserEntity> Hasher { get; } = new ();
|
|
|
|
private const int MinimumLength = 16;
|
|
|
|
public static ImmutableArray<PasswordRequirementViolation> CheckRequirements(string password) {
|
|
var violations = ImmutableArray.CreateBuilder<PasswordRequirementViolation>();
|
|
|
|
if (password.Length < MinimumLength) {
|
|
violations.Add(new PasswordRequirementViolation.TooShort(MinimumLength));
|
|
}
|
|
|
|
if (!password.Any(char.IsLower)) {
|
|
violations.Add(new PasswordRequirementViolation.LowercaseLetterRequired());
|
|
}
|
|
|
|
if (!password.Any(char.IsUpper)) {
|
|
violations.Add(new PasswordRequirementViolation.UppercaseLetterRequired());
|
|
}
|
|
|
|
if (!password.Any(char.IsDigit)) {
|
|
violations.Add(new PasswordRequirementViolation.DigitRequired());
|
|
}
|
|
|
|
return violations.ToImmutable();
|
|
}
|
|
|
|
public static void Set(UserEntity user, string password) {
|
|
user.PasswordHash = Hasher.HashPassword(user, password);
|
|
}
|
|
|
|
public static PasswordVerificationResult Verify(UserEntity user, string password) {
|
|
return Hasher.VerifyHashedPassword(user, user.PasswordHash, password);
|
|
}
|
|
}
|