from __future__ import annotations from flask import Blueprint, jsonify, request from . import auth from .config import Config bp = Blueprint("auth", __name__) @bp.post("/login/start") def login_start(): try: result = auth.start_login_flow() except Exception as exc: # noqa: BLE001 return jsonify(error=f"could not start login: {exc}"), 502 return jsonify(result) @bp.get("/login/poll") def login_poll(): flow_id = request.args.get("flow_id", "") if not flow_id: return jsonify(error="flow_id is required"), 400 try: result = auth.poll_login_flow(flow_id) except Exception as exc: # noqa: BLE001 return jsonify(error=f"login poll failed: {exc}"), 502 if result["status"] != "done": return jsonify(status=result["status"]) resp = jsonify(status="done", nc_user_id=result["nc_user_id"]) resp.set_cookie( Config.SESSION_COOKIE_NAME, result["session_id"], max_age=Config.SESSION_TTL_DAYS * 24 * 3600, httponly=True, secure=Config.SESSION_COOKIE_SECURE, samesite="Lax", path="/", ) return resp @bp.post("/logout") def logout(): session_id = request.cookies.get(Config.SESSION_COOKIE_NAME) if session_id: auth.destroy_session(session_id) resp = jsonify(status="ok") resp.delete_cookie(Config.SESSION_COOKIE_NAME, path="/") return resp