ConfigService.cs 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. namespace bitforum.Services
  2. {
  3. public interface IConfigService
  4. {
  5. // 회원가입 차단 확인
  6. public bool IsRegisterBlock();
  7. // 회원가입 시 이메일 인증
  8. public bool IsRegisterEmailAuth();
  9. // 회원가입 거부 목록 확인
  10. public bool IsDeniedEmail(string email);
  11. // 비밀번호 정책 확인
  12. public bool IsPasswordPolicyValid(string password);
  13. // 회원가입 시 이메일 인증
  14. }
  15. public class ConfigService: IConfigService
  16. {
  17. public ConfigService()
  18. {
  19. }
  20. public bool IsRegisterBlock()
  21. {
  22. return Config.Register.IsRegisterBlock == 'Y';
  23. }
  24. public bool IsRegisterEmailAuth()
  25. {
  26. return Config.Register.IsRegisterEmailAuth == 'Y';
  27. }
  28. public bool IsDeniedEmail(string email)
  29. {
  30. var deniedEmailList = Config.Register.DeniedEmailList;
  31. if (string.IsNullOrWhiteSpace(deniedEmailList))
  32. {
  33. return false;
  34. }
  35. return deniedEmailList.Split(',', StringSplitOptions.RemoveEmptyEntries).Any(deniedEmail => string.Equals(deniedEmail.Trim(), email, StringComparison.OrdinalIgnoreCase));
  36. }
  37. public bool IsPasswordPolicyValid(string password)
  38. {
  39. // 설정값 가져오기
  40. var minLengthConfig = Config.Register.PasswordMinLength;
  41. var uppercaseLengthConfig = Config.Register.PasswordUppercaseLength;
  42. var numbersLengthConfig = Config.Register.PasswordNumbersLength;
  43. var specialCharsLengthConfig = Config.Register.PasswordSpecialcharsLength;
  44. // 각 설정값을 기본값으로 초기화 (null일 경우 대체값 사용)
  45. int minLength = minLengthConfig ?? 6; // 최소 6자
  46. int minUppercase = uppercaseLengthConfig ?? 0;
  47. int minNumbers = numbersLengthConfig ?? 0;
  48. int minSpecialChars = specialCharsLengthConfig ?? 0;
  49. // 비밀번호 길이 확인
  50. if (password.Length < minLength)
  51. {
  52. return false;
  53. }
  54. // 대문자 개수 확인
  55. int uppercaseCount = password.Count(char.IsUpper);
  56. if (uppercaseCount < minUppercase)
  57. {
  58. return false;
  59. }
  60. // 숫자 개수 확인
  61. int numberCount = password.Count(char.IsDigit);
  62. if (numberCount < minNumbers)
  63. {
  64. return false;
  65. }
  66. // 특수문자 개수 확인
  67. int specialCharCount = password.Count(ch => !char.IsLetterOrDigit(ch));
  68. if (specialCharCount < minSpecialChars)
  69. {
  70. return false;
  71. }
  72. return true;
  73. }
  74. }
  75. }