@@ -0,0 +1,47 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user