46 lines
1.3 KiB
Python
46 lines
1.3 KiB
Python
"""Rotas de login/logout."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from fastapi import APIRouter, Form, Request
|
|
from starlette.responses import RedirectResponse
|
|
|
|
from .. import auth
|
|
from ..templating import flash, render
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get("/login")
|
|
def login_form(request: Request):
|
|
if auth.current_user(request):
|
|
return RedirectResponse("/", status_code=303)
|
|
return render(request, "login.html", hide_nav=True)
|
|
|
|
|
|
@router.post("/login")
|
|
def login_submit(
|
|
request: Request,
|
|
username: str = Form(...),
|
|
password: str = Form(...),
|
|
csrf_token: str = Form(""),
|
|
):
|
|
if not auth.check_csrf(request, csrf_token):
|
|
flash(request, "Sessão expirada. Tente novamente.", "error")
|
|
return RedirectResponse("/login", status_code=303)
|
|
|
|
if auth.authenticate(username.strip(), password):
|
|
auth.login_session(request, username.strip())
|
|
flash(request, "Bem-vindo de volta.", "success")
|
|
return RedirectResponse("/", status_code=303)
|
|
|
|
flash(request, "Usuário ou senha inválidos.", "error")
|
|
return RedirectResponse("/login", status_code=303)
|
|
|
|
|
|
@router.post("/logout")
|
|
def logout(request: Request, csrf_token: str = Form("")):
|
|
if auth.check_csrf(request, csrf_token):
|
|
auth.logout_session(request)
|
|
return RedirectResponse("/login", status_code=303)
|