47 lines
1.6 KiB
Python
47 lines
1.6 KiB
Python
|
|
"""
|
||
|
|
NAS API Session Management
|
||
|
|
Handle session ID persistence via Supabase.
|
||
|
|
"""
|
||
|
|
|
||
|
|
from datetime import datetime, timezone
|
||
|
|
from typing import Optional
|
||
|
|
|
||
|
|
from .config import logger
|
||
|
|
from ..supabase_service import get_supabase_client
|
||
|
|
|
||
|
|
SESSION_ID = "nas_filestation"
|
||
|
|
|
||
|
|
|
||
|
|
def save_sid(sid: str) -> None:
|
||
|
|
"""Save session ID to Supabase for persistence across requests."""
|
||
|
|
try:
|
||
|
|
supabase = get_supabase_client()
|
||
|
|
supabase.table("sessions").upsert({
|
||
|
|
"id": SESSION_ID,
|
||
|
|
"data": {"sid": sid},
|
||
|
|
"last_login": datetime.now(timezone.utc).isoformat(),
|
||
|
|
"updated_at": datetime.now(timezone.utc).isoformat()
|
||
|
|
}).execute()
|
||
|
|
logger.debug(f"Session ID saved to Supabase: {sid[:8]}...")
|
||
|
|
except Exception as e:
|
||
|
|
logger.error(f"Error saving session ID to Supabase: {e}")
|
||
|
|
|
||
|
|
|
||
|
|
def load_sid() -> Optional[str]:
|
||
|
|
"""Load session ID from Supabase if it exists."""
|
||
|
|
try:
|
||
|
|
supabase = get_supabase_client()
|
||
|
|
result = supabase.table("sessions").select(
|
||
|
|
"data").eq("id", SESSION_ID).single().execute()
|
||
|
|
if result.data and isinstance(result.data, dict):
|
||
|
|
data = result.data.get("data")
|
||
|
|
if isinstance(data, dict):
|
||
|
|
sid = data.get("sid")
|
||
|
|
if isinstance(sid, str) and sid:
|
||
|
|
logger.debug(
|
||
|
|
f"Session ID loaded from Supabase: {sid[:8]}...")
|
||
|
|
return sid
|
||
|
|
except Exception as e:
|
||
|
|
logger.error(f"Error loading session ID from Supabase: {e}")
|
||
|
|
return None
|