"""Authentication routes.""" from flask import Blueprint, url_for from app.services.auth_service import AuthService bp = Blueprint("auth", __name__) auth_service = AuthService() @bp.route("/login") def login() -> dict[str, str]: """Initiate Google OAuth login.""" redirect_uri = url_for("auth.callback", _external=True) login_url = auth_service.get_login_url(redirect_uri) return {"login_url": login_url} @bp.route("/callback") def callback(): """Handle OAuth callback from Google.""" try: user_data, response = auth_service.handle_callback() return response except Exception as e: return {"error": str(e)}, 400 @bp.route("/logout") def logout(): """Logout current user.""" return auth_service.logout() @bp.route("/me") def me() -> dict[str, str] | tuple[dict[str, str], int]: """Get current user information.""" user = auth_service.get_current_user() if not user: return {"error": "Not authenticated"}, 401 return {"user": user} @bp.route("/refresh") def refresh(): """Refresh access token using refresh token.""" response = auth_service.refresh_tokens() if not response: return {"error": "Invalid or expired refresh token"}, 401 return response