mirror of
https://github.com/khoaliber/khoj.git
synced 2026-03-02 13:18:18 +00:00
Fix subscription state detection for users based on phone numbers, emails (#633)
* Fix subscription state detection for users based on phone numbers, emails * Fix unit tests for api_user4 * Use a single method for determining subscription from user * Pass user object, rather than user.email for getting subscription state
This commit is contained in:
@@ -160,7 +160,7 @@ class UserAuthenticationBackend(AuthenticationBackend):
|
||||
if subscribed:
|
||||
return (
|
||||
AuthCredentials(["authenticated", "premium"]),
|
||||
AuthenticatedKhojUser(user),
|
||||
AuthenticatedKhojUser(user, client_application),
|
||||
)
|
||||
return AuthCredentials(["authenticated"]), AuthenticatedKhojUser(user, client_application)
|
||||
if state.anonymous_mode:
|
||||
|
||||
@@ -207,6 +207,8 @@ def subscription_to_state(subscription: Subscription) -> str:
|
||||
return SubscriptionState.TRIAL.value
|
||||
elif subscription.is_recurring and subscription.renewal_date >= datetime.now(tz=timezone.utc):
|
||||
return SubscriptionState.SUBSCRIBED.value
|
||||
elif not subscription.is_recurring and subscription.renewal_date is None:
|
||||
return SubscriptionState.EXPIRED.value
|
||||
elif not subscription.is_recurring and subscription.renewal_date >= datetime.now(tz=timezone.utc):
|
||||
return SubscriptionState.UNSUBSCRIBED.value
|
||||
elif not subscription.is_recurring and subscription.renewal_date < datetime.now(tz=timezone.utc):
|
||||
@@ -222,11 +224,11 @@ def get_user_subscription_state(email: str) -> str:
|
||||
return subscription_to_state(user_subscription)
|
||||
|
||||
|
||||
async def aget_user_subscription_state(email: str) -> str:
|
||||
async def aget_user_subscription_state(user: KhojUser) -> str:
|
||||
"""Get subscription state of user
|
||||
Valid state transitions: trial -> subscribed <-> unsubscribed OR expired
|
||||
"""
|
||||
user_subscription = await Subscription.objects.filter(user__email=email).afirst()
|
||||
user_subscription = await Subscription.objects.filter(user=user).afirst()
|
||||
return subscription_to_state(user_subscription)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user