"""Authentication decorators and middleware.""" from functools import wraps from typing import Any, Callable from flask import jsonify, request from app.services.token_service import TokenService def require_auth(f: Callable[..., Any]) -> Callable[..., Any]: """Decorator to require authentication for routes.""" @wraps(f) def decorated_function(*args: Any, **kwargs: Any) -> Any: token_service = TokenService() access_token = request.cookies.get("access_token") if not access_token: return jsonify({"error": "Authentication required"}), 401 user_data = token_service.get_user_from_access_token(access_token) if not user_data: return jsonify({"error": "Invalid or expired token"}), 401 return f(*args, **kwargs) return decorated_function def get_current_user() -> dict[str, Any] | None: """Helper function to get current user from access token.""" token_service = TokenService() access_token = request.cookies.get("access_token") if not access_token: return None return token_service.get_user_from_access_token(access_token)