Files
Deal/archive/leadradar-legacy/backend/app/routers/auth_routes.py
T
Rustam Khalimov 9e07568ddd Инициализировать репозиторий «Дейл»
Первый коммит: модульный монолит ядра (.NET 10) и gRPC-сервисы
ai/ml/telegram, фронтенд Vue 3/Vite/Tailwind, документация (ТЗ,
инструкция пользователя, техдокументация, код-стайл), бэклог,
скрипты развёртывания и архив прототипа LeadRadar.
2026-09-11 02:50:17 +03:00

66 lines
1.9 KiB
Python

"""Вход в дашборд и сессии (п.4.1 ТЗ)."""
from __future__ import annotations
from fastapi import APIRouter, Depends, HTTPException, Request, Response
from pydantic import BaseModel
from ..auth import (
change_password,
create_session,
current_login,
destroy_session,
ensure_creds,
set_session_cookie,
verify_password,
)
from ..config import COOKIE_NAME
router = APIRouter(prefix="/api", tags=["auth"])
class LoginBody(BaseModel):
login: str
password: str
class PasswordBody(BaseModel):
oldPassword: str
newPassword: str
@router.post("/auth/login")
def login(body: LoginBody, response: Response) -> dict:
ensure_creds()
login_name = body.login.strip()
if not verify_password(login_name, body.password):
raise HTTPException(401, "Неверный логин или пароль")
token = create_session(login_name)
set_session_cookie(response, token)
return {"ok": True, "login": login_name}
@router.post("/auth/logout")
def logout(request: Request, response: Response) -> dict:
token = request.cookies.get(COOKIE_NAME)
destroy_session(token)
response.delete_cookie(COOKIE_NAME)
return {"ok": True}
@router.get("/auth/me")
def me(login: str = Depends(current_login)) -> dict:
return {"login": login, "ok": True}
@router.post("/auth/change-password")
def change(body: PasswordBody, request: Request, response: Response, login: str = Depends(current_login)) -> dict:
token = request.cookies.get(COOKIE_NAME)
ok = change_password(login, body.oldPassword, body.newPassword)
if not ok:
raise HTTPException(400, "Текущий пароль неверен")
# старые сессии удалены внутри change_password; выдаём свежую
fresh = create_session(login)
destroy_session(token)
set_session_cookie(response, fresh)
return {"ok": True}