From 9860df2379923850ee90aea9be9d9c00d78a9549 Mon Sep 17 00:00:00 2001 From: Abdullah Atta Date: Mon, 29 Sep 2025 09:56:39 +0500 Subject: [PATCH] identity: refactor sms mfa authorization check --- Streetwriters.Identity/Services/MFAService.cs | 4 +--- .../Services/UserService.cs | 20 ++++++++++++------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/Streetwriters.Identity/Services/MFAService.cs b/Streetwriters.Identity/Services/MFAService.cs index 834f8b8..f96d06d 100644 --- a/Streetwriters.Identity/Services/MFAService.cs +++ b/Streetwriters.Identity/Services/MFAService.cs @@ -169,11 +169,9 @@ namespace Streetwriters.Identity.Services if ((method != MFAMethods.Email && method != MFAMethods.SMS) || !IsValidMFAMethod(method)) throw new Exception("Invalid method."); - var userPlan = UserService.GetUserSubscriptionPlan(client.Id, user); if (isSetup && method == MFAMethods.SMS && - !UserService.IsUserPremium(client.Id, user) && - userPlan != SubscriptionPlan.BELIEVER && userPlan != SubscriptionPlan.PRO) + !UserService.IsSMSMFAAllowed(client.Id, user)) throw new Exception("Due to the high costs of SMS, 2FA via SMS is only available on Pro & Believer plans."); // if (!user.EmailConfirmed) throw new Exception("Please confirm your email before activating 2FA by email."); diff --git a/Streetwriters.Identity/Services/UserService.cs b/Streetwriters.Identity/Services/UserService.cs index 056c941..21546c4 100644 --- a/Streetwriters.Identity/Services/UserService.cs +++ b/Streetwriters.Identity/Services/UserService.cs @@ -28,7 +28,7 @@ namespace Streetwriters.Identity.Services { public class UserService { - public static SubscriptionType GetUserSubscriptionStatus(string clientId, User user) + private static SubscriptionType? GetUserSubscriptionStatus(string clientId, User user) { var claimKey = GetClaimKey(clientId); var status = user.Claims.FirstOrDefault((c) => c.ClaimType == claimKey).ClaimValue; @@ -45,11 +45,11 @@ namespace Streetwriters.Identity.Services case "premium_expired": return SubscriptionType.PREMIUM_EXPIRED; default: - return SubscriptionType.BASIC; + return null; } } - public static SubscriptionPlan GetUserSubscriptionPlan(string clientId, User user) + private static SubscriptionPlan? GetUserSubscriptionPlan(string clientId, User user) { var claimKey = GetClaimKey(clientId); var status = user.Claims.FirstOrDefault((c) => c.ClaimType == claimKey).ClaimValue; @@ -66,14 +66,20 @@ namespace Streetwriters.Identity.Services case "pro": return SubscriptionPlan.PRO; default: - return SubscriptionPlan.FREE; + return null; } } - public static bool IsUserPremium(string clientId, User user) + public static bool IsSMSMFAAllowed(string clientId, User user) { - var status = GetUserSubscriptionStatus(clientId, user); - return status == SubscriptionType.PREMIUM || status == SubscriptionType.PREMIUM_CANCELED; + var legacyStatus = GetUserSubscriptionStatus(clientId, user); + var status = GetUserSubscriptionPlan(clientId, user); + if (legacyStatus == null && status == null) return false; + return legacyStatus == SubscriptionType.PREMIUM || + legacyStatus == SubscriptionType.PREMIUM_CANCELED || + status == SubscriptionPlan.PRO || + status == SubscriptionPlan.EDUCATION || + status == SubscriptionPlan.BELIEVER; } public static Claim SubscriptionTypeToClaim(string clientId, SubscriptionType type)