109 lines
4.5 KiB
Python
109 lines
4.5 KiB
Python
|
|
"""Authentication API service functions."""
|
||
|
|
|
||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
from typing import Any, Dict
|
||
|
|
|
||
|
|
from fastapi import Request
|
||
|
|
|
||
|
|
import web.routes as legacy_routes
|
||
|
|
|
||
|
|
|
||
|
|
def get_auth_me_payload(request: Request) -> Dict[str, Any]:
|
||
|
|
legacy_routes._assert_entitlement(request)
|
||
|
|
legacy_routes._bind_optional_supabase_identity(request)
|
||
|
|
|
||
|
|
user_id = getattr(request.state, "auth_user_id", None)
|
||
|
|
subscription_required = bool(
|
||
|
|
legacy_routes.SUPABASE_ENTITLEMENT.enabled
|
||
|
|
and legacy_routes.SUPABASE_ENTITLEMENT.require_subscription
|
||
|
|
)
|
||
|
|
subscription_active = None
|
||
|
|
subscription_plan_code = None
|
||
|
|
subscription_starts_at = None
|
||
|
|
subscription_expires_at = None
|
||
|
|
subscription_total_expires_at = None
|
||
|
|
subscription_queued_days = 0
|
||
|
|
subscription_queued_count = 0
|
||
|
|
|
||
|
|
if legacy_routes.SUPABASE_ENTITLEMENT.enabled and user_id:
|
||
|
|
try:
|
||
|
|
latest_subscription = legacy_routes.SUPABASE_ENTITLEMENT.ensure_signup_trial(
|
||
|
|
user_id,
|
||
|
|
created_at=getattr(request.state, "auth_created_at", None),
|
||
|
|
)
|
||
|
|
if not latest_subscription:
|
||
|
|
latest_subscription = (
|
||
|
|
legacy_routes.SUPABASE_ENTITLEMENT.get_latest_active_subscription(
|
||
|
|
user_id,
|
||
|
|
respect_requirement=False,
|
||
|
|
)
|
||
|
|
)
|
||
|
|
|
||
|
|
latest_known_subscription = latest_subscription
|
||
|
|
if not latest_known_subscription:
|
||
|
|
latest_known_subscription = (
|
||
|
|
legacy_routes.SUPABASE_ENTITLEMENT.get_latest_subscription_any_status(
|
||
|
|
user_id
|
||
|
|
)
|
||
|
|
)
|
||
|
|
subscription_window = legacy_routes.SUPABASE_ENTITLEMENT.get_subscription_window(
|
||
|
|
user_id,
|
||
|
|
respect_requirement=False,
|
||
|
|
)
|
||
|
|
subscription_active = bool(latest_subscription)
|
||
|
|
if isinstance(latest_subscription, dict):
|
||
|
|
subscription_plan_code = latest_subscription.get("plan_code")
|
||
|
|
subscription_starts_at = latest_subscription.get("starts_at")
|
||
|
|
subscription_expires_at = latest_subscription.get("expires_at")
|
||
|
|
elif isinstance(latest_known_subscription, dict):
|
||
|
|
subscription_plan_code = latest_known_subscription.get("plan_code")
|
||
|
|
subscription_starts_at = latest_known_subscription.get("starts_at")
|
||
|
|
subscription_expires_at = latest_known_subscription.get("expires_at")
|
||
|
|
if isinstance(subscription_window, dict):
|
||
|
|
subscription_total_expires_at = subscription_window.get("total_expires_at")
|
||
|
|
subscription_queued_days = int(subscription_window.get("queued_days") or 0)
|
||
|
|
subscription_queued_count = int(subscription_window.get("queued_count") or 0)
|
||
|
|
except Exception:
|
||
|
|
subscription_active = None
|
||
|
|
subscription_plan_code = None
|
||
|
|
subscription_starts_at = None
|
||
|
|
subscription_expires_at = None
|
||
|
|
subscription_total_expires_at = None
|
||
|
|
subscription_queued_days = 0
|
||
|
|
subscription_queued_count = 0
|
||
|
|
|
||
|
|
points = legacy_routes._resolve_auth_points(request)
|
||
|
|
weekly_profile = legacy_routes._resolve_weekly_profile(request)
|
||
|
|
|
||
|
|
return {
|
||
|
|
"authenticated": bool(user_id),
|
||
|
|
"user_id": user_id,
|
||
|
|
"email": getattr(request.state, "auth_email", None),
|
||
|
|
"points": points,
|
||
|
|
"weekly_points": weekly_profile["weekly_points"],
|
||
|
|
"weekly_rank": weekly_profile["weekly_rank"],
|
||
|
|
"entitlement_mode": (
|
||
|
|
"supabase_required"
|
||
|
|
if legacy_routes.SUPABASE_ENTITLEMENT.enabled
|
||
|
|
and legacy_routes._SUPABASE_AUTH_REQUIRED
|
||
|
|
else "supabase_optional"
|
||
|
|
if legacy_routes.SUPABASE_ENTITLEMENT.enabled
|
||
|
|
else "legacy_token"
|
||
|
|
if legacy_routes._ENTITLEMENT_GUARD_ENABLED
|
||
|
|
else "disabled"
|
||
|
|
),
|
||
|
|
"auth_required": bool(
|
||
|
|
legacy_routes.SUPABASE_ENTITLEMENT.enabled
|
||
|
|
and legacy_routes._SUPABASE_AUTH_REQUIRED
|
||
|
|
),
|
||
|
|
"subscription_required": subscription_required,
|
||
|
|
"subscription_active": subscription_active,
|
||
|
|
"subscription_plan_code": subscription_plan_code,
|
||
|
|
"subscription_starts_at": subscription_starts_at,
|
||
|
|
"subscription_expires_at": subscription_expires_at,
|
||
|
|
"subscription_total_expires_at": subscription_total_expires_at,
|
||
|
|
"subscription_queued_days": subscription_queued_days,
|
||
|
|
"subscription_queued_count": subscription_queued_count,
|
||
|
|
}
|