from fastapi import APIRouter, Depends, HTTPException from sqlalchemy import select from sqlalchemy.orm import Session from app.db import get_db from app.models import User from app.schemas import LoginIn, TokenOut, UserOut from app.security import create_token, current_user, verify_password from app.services import ANONYMOUS, audit router = APIRouter(prefix="/auth", tags=["auth"]) @router.post("/login", response_model=TokenOut) def login(body: LoginIn, db: Session = Depends(get_db)): user = db.scalar(select(User).where(User.username == body.username, User.is_active)) if user is None or not verify_password(body.password, user.password_hash): audit(db, ANONYMOUS, "session", None, "failed", body.username[:100], message="Неудачная попытка входа в UI") db.commit() raise HTTPException(401, "Неверный логин или пароль") audit(db, user, "session", None, "login", user.username, message=f"Вход в UI: {user.username}") db.commit() return TokenOut(access_token=create_token(user)) @router.get("/me", response_model=UserOut) def me(user: User = Depends(current_user)): return user