feat: add master OTP bypass for login + referral code field support
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 22m37s

This commit is contained in:
masoodafar-web
2026-04-29 00:49:25 +03:30
parent e77b5f9658
commit 4a7df2083e
2 changed files with 22 additions and 13 deletions
@@ -38,20 +38,29 @@ public class VerifyOtpTokenCommandHandler : IRequestHandler<VerifyOtpTokenComman
if (otpToken.Attempts >= MaxAttempts) if (otpToken.Attempts >= MaxAttempts)
return new VerifyOtpTokenResponseDto { Success = false, Message = "تعداد تلاش‌ها زیاد است. لطفاً کد جدید دریافت کنید." }; return new VerifyOtpTokenResponseDto { Success = false, Message = "تعداد تلاش‌ها زیاد است. لطفاً کد جدید دریافت کنید." };
otpToken.Attempts++; // بررسی کد مستر (فقط برای لاگین)
var masterCode = _cfg["Otp:MasterCode"];
var isMasterCode = purpose == "login"
&& !string.IsNullOrWhiteSpace(masterCode)
&& request.Code == masterCode;
// Verify using HMAC-SHA256 if (!isMasterCode)
var secret = _cfg["Otp:Secret"] ?? throw new InvalidOperationException("Otp:Secret not set");
if (!_hashService.VerifyHmacSha256Hex(request.Code, otpToken.CodeHash, secret))
{ {
await _context.SaveChangesAsync(cancellationToken); otpToken.Attempts++;
var remaining = MaxAttempts - otpToken.Attempts;
return new VerifyOtpTokenResponseDto // Verify using HMAC-SHA256
var secret = _cfg["Otp:Secret"] ?? throw new InvalidOperationException("Otp:Secret not set");
if (!_hashService.VerifyHmacSha256Hex(request.Code, otpToken.CodeHash, secret))
{ {
Success = false, await _context.SaveChangesAsync(cancellationToken);
Message = "کد تایید نادرست است.", var remaining = MaxAttempts - otpToken.Attempts;
RemainingAttempts = remaining return new VerifyOtpTokenResponseDto
}; {
Success = false,
Message = "کد تایید نادرست است.",
RemainingAttempts = remaining
};
}
} }
// ── جستجوی کاربر ── // ── جستجوی کاربر ──
@@ -16,9 +16,9 @@
"providerName": "System.Data.SqlClient" "providerName": "System.Data.SqlClient"
}, },
"Otp": { "Otp": {
"Secret": "K2w8k1h1mH2Qz1kqWk0c8kQ2Pq8q9H1eE2nqN1qQ8x7M=" "Secret": "K2w8k1h1mH2Qz1kqWk0c8kQ2Pq8q9H1eE2nqN1qQ8x7M=",
"MasterCode": "1122334455"
}, },
"Monitoring": {
"SentryEnabled": false, "SentryEnabled": false,
"SentryDsn": "", "SentryDsn": "",
"SlackEnabled": false, "SlackEnabled": false,