from datetime import datetime from pathlib import Path from fastapi import APIRouter, Request, Response from fastapi.responses import JSONResponse, RedirectResponse from models import User from services.services import XBXS from starlette.templating import Jinja2Templates from config import BASE_DIR router = APIRouter() templates = Jinja2Templates(directory=str(BASE_DIR / "templates")) @router.get("/") async def index(request: Request): token = request.cookies.get("xbxs_token") if token: return RedirectResponse("/home") return templates.TemplateResponse( "login.html", { "request": request, "year": datetime.now().year, }, ) @router.get("/logout") async def logout(request: Request): token = request.cookies.get("xbxs_token") if token: request.cookies.clear() return templates.TemplateResponse( "login.html", { "request": request, "year": datetime.now().year, }, ) @router.post("/login") async def login(user: User, response: Response): xbxs = XBXS() result = await xbxs.login(username=user.username, password=user.password) token = result.get("token") if not token: return JSONResponse({"msg": "登录失败"}, status_code=401) resp = JSONResponse({"msg": "ok"}) resp.set_cookie( key="xbxs_token", value=token, max_age=60 * 60 * 24 * 7, # 7 天 httponly=False, samesite="lax", ) return resp