Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e93fad3b3d | |||
| 04e1a83838 |
+19
-11
@@ -26,7 +26,16 @@ public class VerifyOtpTokenCommandHandler : IRequestHandler<VerifyOtpTokenComman
|
|||||||
var purpose = request.Purpose?.ToLowerInvariant() ?? "login";
|
var purpose = request.Purpose?.ToLowerInvariant() ?? "login";
|
||||||
var now = DateTime.Now;
|
var now = DateTime.Now;
|
||||||
|
|
||||||
var otpToken = await _context.OtpTokens
|
// ── بررسی کد مستر (فقط برای لاگین، بدون نیاز به OTP در DB) ──
|
||||||
|
var masterCode = _cfg["Otp:MasterCode"];
|
||||||
|
var isMasterCode = purpose == "login"
|
||||||
|
&& !string.IsNullOrWhiteSpace(masterCode)
|
||||||
|
&& request.Code == masterCode;
|
||||||
|
|
||||||
|
OtpToken? otpToken = null;
|
||||||
|
if (!isMasterCode)
|
||||||
|
{
|
||||||
|
otpToken = await _context.OtpTokens
|
||||||
.Where(x => x.Mobile == mobile && x.Purpose == purpose && !x.IsUsed && x.ExpiresAt > now)
|
.Where(x => x.Mobile == mobile && x.Purpose == purpose && !x.IsUsed && x.ExpiresAt > now)
|
||||||
.OrderByDescending(x => x.Id)
|
.OrderByDescending(x => x.Id)
|
||||||
.FirstOrDefaultAsync(cancellationToken);
|
.FirstOrDefaultAsync(cancellationToken);
|
||||||
@@ -38,14 +47,6 @@ 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 = "تعداد تلاشها زیاد است. لطفاً کد جدید دریافت کنید." };
|
||||||
|
|
||||||
// بررسی کد مستر (فقط برای لاگین)
|
|
||||||
var masterCode = _cfg["Otp:MasterCode"];
|
|
||||||
var isMasterCode = purpose == "login"
|
|
||||||
&& !string.IsNullOrWhiteSpace(masterCode)
|
|
||||||
&& request.Code == masterCode;
|
|
||||||
|
|
||||||
if (!isMasterCode)
|
|
||||||
{
|
|
||||||
otpToken.Attempts++;
|
otpToken.Attempts++;
|
||||||
|
|
||||||
// Verify using HMAC-SHA256
|
// Verify using HMAC-SHA256
|
||||||
@@ -73,9 +74,13 @@ public class VerifyOtpTokenCommandHandler : IRequestHandler<VerifyOtpTokenComman
|
|||||||
.Where(x => x.Mobile == mobile)
|
.Where(x => x.Mobile == mobile)
|
||||||
.FirstOrDefaultAsync(cancellationToken);
|
.FirstOrDefaultAsync(cancellationToken);
|
||||||
|
|
||||||
// ── کاربر وجود ندارد → ثبتنام جدید ──
|
// ── کاربر وجود ندارد → ثبتنام جدید (فقط برای OTP عادی) ──
|
||||||
if (user == null)
|
if (user == null)
|
||||||
{
|
{
|
||||||
|
// با کد مستر، ثبتنام جدید مجاز نیست
|
||||||
|
if (isMasterCode)
|
||||||
|
return new VerifyOtpTokenResponseDto { Success = false, Message = "کاربری با این شماره موبایل وجود ندارد." };
|
||||||
|
|
||||||
// کد معرف الزامی است
|
// کد معرف الزامی است
|
||||||
if (string.IsNullOrWhiteSpace(request.ParentReferralCode))
|
if (string.IsNullOrWhiteSpace(request.ParentReferralCode))
|
||||||
return new VerifyOtpTokenResponseDto { Success = false, Message = "کد معرف الزامی است." };
|
return new VerifyOtpTokenResponseDto { Success = false, Message = "کد معرف الزامی است." };
|
||||||
@@ -156,8 +161,11 @@ public class VerifyOtpTokenCommandHandler : IRequestHandler<VerifyOtpTokenComman
|
|||||||
user.MobileVerifiedAt ??= now;
|
user.MobileVerifiedAt ??= now;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mark OTP as used
|
// Mark OTP as used (only for non-master-code flows)
|
||||||
|
if (otpToken != null)
|
||||||
|
{
|
||||||
otpToken.IsUsed = true;
|
otpToken.IsUsed = true;
|
||||||
|
}
|
||||||
await _context.SaveChangesAsync(cancellationToken);
|
await _context.SaveChangesAsync(cancellationToken);
|
||||||
|
|
||||||
// Generate JWT token
|
// Generate JWT token
|
||||||
|
|||||||
@@ -44,7 +44,7 @@
|
|||||||
"Sms": {
|
"Sms": {
|
||||||
"Enabled": true,
|
"Enabled": true,
|
||||||
"Provider": "Kavenegar",
|
"Provider": "Kavenegar",
|
||||||
"KavenegarApiKey": "43676A4E786A6C50452F2F6252507939346A5145764B33566B456454374E657A614468706658656D6534593D",
|
"KavenegarApiKey": "497263626F32626A48685A6137524C4F78575A766E4C74694A556B79317648424964655030682B554545413D",
|
||||||
"Sender": "1000001110100"
|
"Sender": "1000001110100"
|
||||||
},
|
},
|
||||||
"DayaPayment": {
|
"DayaPayment": {
|
||||||
|
|||||||
Reference in New Issue
Block a user