"""GitHub OAuth — status and disconnect routes.""" from fastapi import APIRouter, Request from fastapi.responses import JSONResponse router = APIRouter(tags=["github"], prefix="/api/github") @router.get("/status") async def github_status(request: Request): """Check if the current user has GitHub linked.""" from app.auth.session import SessionManager from app.db import get_conn user = SessionManager.decode_session(request.cookies.get("flowdeck_session", "")) if not user: return {"linked": False} with get_conn() as conn: row = conn.execute( "SELECT access_token FROM user_oauth_tokens WHERE user_id=? AND provider='github' AND access_token IS NOT NULL AND access_token != ''", (user["id"],) ).fetchone() return {"linked": row is not None} @router.delete("/disconnect") async def disconnect_github(request: Request): """Remove all GitHub OAuth tokens for the current user.""" from app.auth.session import SessionManager from app.db import get_conn user = SessionManager.decode_session(request.cookies.get("flowdeck_session", "")) if not user: return JSONResponse({"error": "Not authenticated"}, status_code=401) with get_conn() as conn: conn.execute("DELETE FROM user_oauth_tokens WHERE user_id=? AND provider='github'", (user["id"],)) conn.commit() return {"status": "ok"}