MireaBackend/Security/Services/PasswordPolicyService.cs
2024-12-26 13:38:43 +03:00

40 lines
1.3 KiB
C#

using Mirea.Api.Security.Common.Model;
using System.Linq;
using System.Security;
namespace Mirea.Api.Security.Services;
public class PasswordPolicyService(PasswordPolicy policy)
{
public void ValidatePasswordOrThrow(string password)
{
if (password.Length < policy.MinimumLength)
throw new SecurityException($"Password must be at least {policy.MinimumLength} characters long.");
if (policy.RequireLetter && !password.Any(char.IsLetter))
throw new SecurityException("Password must contain at least one letter.");
if (policy.RequireLettersDifferentCase && !password.Any(char.IsLower) && !password.Any(char.IsUpper))
throw new SecurityException("Password must contain at least one lowercase and uppercase letter.");
if (policy.RequireDigit && !password.Any(char.IsDigit))
throw new SecurityException("Password must contain at least one digit.");
if (policy.RequireSpecialCharacter && password.All(char.IsLetterOrDigit))
throw new SecurityException("Password must contain at least one special character.");
}
public bool TryValidatePassword(string password)
{
try
{
ValidatePasswordOrThrow(password);
}
catch
{
return false;
}
return true;
}
}