Backend (FastAPI + Oracle ADB), Frontend (Next.js), daemon worker. Features: channel/video/restaurant management, semantic search, Google OAuth, user reviews. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
33 lines
1.0 KiB
Python
33 lines
1.0 KiB
Python
"""FastAPI dependencies for authentication."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from fastapi import Header, HTTPException
|
|
|
|
from core.auth import verify_jwt
|
|
|
|
|
|
def get_current_user(authorization: str = Header(None)) -> dict:
|
|
"""Extract and verify Bearer token, return user payload.
|
|
|
|
Raises 401 if token is missing or invalid.
|
|
"""
|
|
if not authorization or not authorization.startswith("Bearer "):
|
|
raise HTTPException(401, "Missing or invalid Authorization header")
|
|
token = authorization.removeprefix("Bearer ").strip()
|
|
try:
|
|
return verify_jwt(token)
|
|
except Exception:
|
|
raise HTTPException(401, "Invalid or expired token")
|
|
|
|
|
|
def get_optional_user(authorization: str = Header(None)) -> dict | None:
|
|
"""Same as get_current_user but returns None if no token."""
|
|
if not authorization or not authorization.startswith("Bearer "):
|
|
return None
|
|
token = authorization.removeprefix("Bearer ").strip()
|
|
try:
|
|
return verify_jwt(token)
|
|
except Exception:
|
|
return None
|