If the user subscription was created over 7 days ago, then their trial is expired

This commit is contained in:
sabaimran
2023-11-24 22:08:32 -08:00
parent e5b1350523
commit 771f9bcfa1
2 changed files with 13 additions and 3 deletions

View File

@@ -77,7 +77,10 @@ class UserAuthenticationBackend(AuthenticationBackend):
if user:
if state.billing_enabled:
subscription_state = await aget_user_subscription_state(user)
subscribed = subscription_state == SubscriptionState.SUBSCRIBED.value
subscribed = (
subscription_state == SubscriptionState.SUBSCRIBED.value
or subscription_state == SubscriptionState.TRIAL.value
)
if subscribed:
return AuthCredentials(["authenticated", "subscribed"]), AuthenticatedKhojUser(
user_with_token.user
@@ -97,7 +100,10 @@ class UserAuthenticationBackend(AuthenticationBackend):
if user_with_token:
if state.billing_enabled:
subscription_state = await aget_user_subscription_state(user_with_token.user)
subscribed = subscription_state == SubscriptionState.SUBSCRIBED.value
subscribed = (
subscription_state == SubscriptionState.SUBSCRIBED.value
or subscription_state == SubscriptionState.TRIAL.value
)
if subscribed:
return AuthCredentials(["authenticated", "subscribed"]), AuthenticatedKhojUser(
user_with_token.user

View File

@@ -1,7 +1,7 @@
import math
import random
import secrets
from datetime import date, datetime, timezone
from datetime import date, datetime, timezone, timedelta
from typing import List, Optional, Type
from enum import Enum
@@ -140,6 +140,10 @@ def subscription_to_state(subscription: Subscription) -> str:
if not subscription:
return SubscriptionState.INVALID.value
elif subscription.type == Subscription.Type.TRIAL:
# Trial subscription is valid for 7 days
if datetime.now(tz=timezone.utc) - subscription.created_at > timedelta(days=7):
return SubscriptionState.EXPIRED.value
return SubscriptionState.TRIAL.value
elif subscription.is_recurring and subscription.renewal_date >= datetime.now(tz=timezone.utc):
return SubscriptionState.SUBSCRIBED.value