diff --git a/src/database/adapters/__init__.py b/src/database/adapters/__init__.py index f4e816bf..b4186d57 100644 --- a/src/database/adapters/__init__.py +++ b/src/database/adapters/__init__.py @@ -2,7 +2,7 @@ from typing import Type, TypeVar, List from datetime import date, datetime, timedelta import secrets from typing import Type, TypeVar, List -from datetime import date +from datetime import date, timezone from django.db import models from django.contrib.sessions.backends.db import SessionStore @@ -116,12 +116,9 @@ async def set_user_subscribed(email: str, type="standard") -> KhojUser: def is_user_subscribed(email: str, type="standard") -> bool: - user = KhojUser.objects.filter(email=email, subscription_type=type).first() - if user and user.subscription_renewal_date: - is_subscribed = user.subscription_renewal_date > date.today() - return is_subscribed - else: - return False + return KhojUser.objects.filter( + email=email, subscription_type=type, subscription_renewal_date__gte=datetime.now(tz=timezone.utc) + ).exists() async def get_user_by_token(token: dict) -> KhojUser: diff --git a/src/khoj/interface/web/config.html b/src/khoj/interface/web/config.html index 5269065d..3179db0b 100644 --- a/src/khoj/interface/web/config.html +++ b/src/khoj/interface/web/config.html @@ -184,8 +184,7 @@ {% else %} -
+
@@ -259,14 +258,11 @@ }; function unsubscribe() { - fetch('/api/subscription', { + fetch('/api/subscription?email=' + '{{username}}', { method: 'DELETE', headers: { 'Content-Type': 'application/json', }, - body: JSON.stringify({ - "email": "{{ username }}" - }) }) } diff --git a/src/khoj/routers/api.py b/src/khoj/routers/api.py index 287ff8a5..005496b2 100644 --- a/src/khoj/routers/api.py +++ b/src/khoj/routers/api.py @@ -776,10 +776,13 @@ async def subscribe(request: Request): @api.delete("/subscription") @requires(["authenticated"]) -async def unsubscribe(request: Request, user_email: str): - customer = stripe.Customer.list(email=user_email).data +async def unsubscribe(request: Request, email: str): + customer = stripe.Customer.list(email=email).data if not is_none_or_empty(customer): - stripe.Subscription.modify(customer[0].id, cancel_at_period_end=True) + customer_id = customer[0].id + for subscription in stripe.Subscription.list(customer=customer_id): + stripe.Subscription.modify(subscription.id, cancel_at_period_end=True) + success = True else: success = False diff --git a/src/khoj/routers/web_client.py b/src/khoj/routers/web_client.py index b49404a2..b3150ad0 100644 --- a/src/khoj/routers/web_client.py +++ b/src/khoj/routers/web_client.py @@ -1,5 +1,5 @@ # System Packages -from datetime import datetime +from datetime import datetime, timezone import json import os @@ -119,7 +119,9 @@ def config_page(request: Request): user: KhojUser = request.user.object user_picture = request.session.get("user", {}).get("picture") user_is_subscribed = is_user_subscribed(user.email) - days_to_renewal = (user.subscription_renewal_date - datetime.now()).days if user.subscription_renewal_date else 0 + days_to_renewal = ( + (user.subscription_renewal_date - datetime.now(tz=timezone.utc)).days if user.subscription_renewal_date else 0 + ) enabled_content_source = set(EntryAdapters.get_unique_file_source(user).all()) successfully_configured = {