fix(admin-auth): normalize phone before OTP validation to fix 400 on verify-otp
CI/CD / CI · API (dotnet build + test) (push) Successful in 46s
CI/CD / CI · Admin API (dotnet build) (push) Successful in 32s
CI/CD / CI · Dashboard (tsc) (push) Successful in 1m4s
CI/CD / CI · Admin Web (tsc) (push) Successful in 34s
CI/CD / CI · Website (tsc) (push) Successful in 43s
CI/CD / CI · Koja (tsc) (push) Successful in 49s
CI/CD / Deploy · all services (push) Successful in 27s

VerifyOtpRequestValidator was passing the raw phone string to
IsValidIranMobile which requires a pre-normalized 11-digit "09…" string.
Any other format (country code prefix, Persian digits, etc.) failed
validation instantly — causing verify-otp to return HTTP 400 in ~2ms
before the service logic could ever run.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
soroush.asadi
2026-05-31 21:00:37 +03:30
parent 5ae350e25b
commit 38e3f6a5a2
@@ -8,7 +8,9 @@ public class SendOtpRequestValidator : AbstractValidator<SendOtpRequest>
{ {
public SendOtpRequestValidator() public SendOtpRequestValidator()
{ {
RuleFor(x => x.Phone).Must(PhoneNormalizer.IsValidIranMobile).WithMessage("Invalid phone number."); RuleFor(x => x.Phone)
.Must(p => PhoneNormalizer.IsValidIranMobile(PhoneNormalizer.Normalize(p)))
.WithMessage("Invalid phone number.");
} }
} }
@@ -16,7 +18,9 @@ public class VerifyOtpRequestValidator : AbstractValidator<VerifyOtpRequest>
{ {
public VerifyOtpRequestValidator() public VerifyOtpRequestValidator()
{ {
RuleFor(x => x.Phone).Must(PhoneNormalizer.IsValidIranMobile); RuleFor(x => x.Phone)
.Must(p => PhoneNormalizer.IsValidIranMobile(PhoneNormalizer.Normalize(p)))
.WithMessage("Invalid phone number.");
RuleFor(x => x.Code) RuleFor(x => x.Code)
.Must(OtpNormalizer.IsValidSixDigitCode) .Must(OtpNormalizer.IsValidSixDigitCode)
.WithMessage("OTP must be 6 digits."); .WithMessage("OTP must be 6 digits.");