Initial commit: Tasteby - YouTube restaurant map service
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>
This commit is contained in:
32
backend/api/deps.py
Normal file
32
backend/api/deps.py
Normal file
@@ -0,0 +1,32 @@
|
||||
"""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
|
||||
Reference in New Issue
Block a user