Spaces:
Sleeping
Sleeping
Kethan Dosapati
Add static UI implementation for browsing, submitting, and searching tips with HTML, CSS, and JavaScript; remove dependency on Gradio-based UI.
8893529 | """Resolve comment author from Supabase JWT (app account) or request body (HF OAuth).""" | |
| import os | |
| from typing import Optional | |
| import jwt | |
| from fastapi import Header, HTTPException | |
| # JWT secret from Supabase Project Settings → API → JWT Secret (optional; needed for app-account comments) | |
| SUPABASE_JWT_SECRET = os.environ.get("SUPABASE_JWT_SECRET") | |
| def get_author_from_bearer(authorization: Optional[str] = Header(None)) -> Optional[str]: | |
| """If Authorization: Bearer <supabase_jwt> is present, verify and return author name/email.""" | |
| if not SUPABASE_JWT_SECRET or not authorization or not authorization.startswith("Bearer "): | |
| return None | |
| token = authorization[7:].strip() | |
| if not token: | |
| return None | |
| try: | |
| payload = jwt.decode( | |
| token, | |
| SUPABASE_JWT_SECRET, | |
| audience="authenticated", | |
| algorithms=["HS256"], | |
| ) | |
| meta = payload.get("user_metadata") or {} | |
| name = meta.get("name") or meta.get("full_name") | |
| if name: | |
| return str(name).strip() | |
| email = payload.get("email") | |
| if email: | |
| return str(email).strip() | |
| return payload.get("sub", "") | |
| except jwt.PyJWTError: | |
| return None | |