import json import os from fastapi import APIRouter from fastapi.params import Depends from sqlalchemy.ext.asyncio import AsyncSession from app.models.user import User from app.oauth.csas import CSASOAuth from app.services.db import get_async_session from app.services.user_service import current_active_user router = APIRouter(prefix="/auth/csas", tags=["csas"]) CLIENT_ID = os.getenv("CSAS_CLIENT_ID") CLIENT_SECRET = os.getenv("CSAS_CLIENT_SECRET") CSAS_OAUTH = CSASOAuth(CLIENT_ID, CLIENT_SECRET) @router.get("/authorize") async def csas_authorize(): return {"authorization_url": await CSAS_OAUTH.get_authorization_url(os.getenv("FRONTEND_DOMAIN_SCHEME") + "/auth/csas/callback")} @router.get("/callback") async def csas_callback(code: str, session: AsyncSession = Depends(get_async_session), user: User = Depends(current_active_user)): response = await CSAS_OAUTH.get_access_token(code, os.getenv("FRONTEND_DOMAIN_SCHEME") + "/auth/csas/callback") if not user.config: user.config = {} new_dict = user.config.copy() new_dict["csas"] = json.dumps(response) user.config = new_dict await session.commit() return "OK"