Files
vpn/app/routers/auth.py
T
test2andCursor bbff3cb10b first commit
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-25 20:36:00 +03:00

48 lines
1.6 KiB
Python

from fastapi import APIRouter, Depends, Form, Request, status
from fastapi.responses import HTMLResponse, RedirectResponse
from sqlalchemy.ext.asyncio import AsyncSession
from app.database import get_db
from app.deps import authenticate_admin
router = APIRouter(prefix="/admin", tags=["auth"])
@router.get("/login", response_class=HTMLResponse)
async def login_page(request: Request):
if request.session.get("admin_id"):
return RedirectResponse("/admin", status_code=status.HTTP_303_SEE_OTHER)
return request.app.state.templates.TemplateResponse(
"admin/login.html",
{"request": request, "error": None, "app_name": request.app.state.settings.app_name},
)
@router.post("/login", response_class=HTMLResponse)
async def login_submit(
request: Request,
username: str = Form(...),
password: str = Form(...),
db: AsyncSession = Depends(get_db),
):
user = await authenticate_admin(db, username.strip(), password)
if not user:
return request.app.state.templates.TemplateResponse(
"admin/login.html",
{
"request": request,
"error": "Неверный логин или пароль",
"app_name": request.app.state.settings.app_name,
},
status_code=400,
)
request.session["admin_id"] = user.id
request.session["admin_username"] = user.username
return RedirectResponse("/admin", status_code=status.HTTP_303_SEE_OTHER)
@router.post("/logout")
async def logout(request: Request):
request.session.clear()
return RedirectResponse("/admin/login", status_code=status.HTTP_303_SEE_OTHER)