Files
ipam_control/app/api/v1/auth.py
T

28 lines
1.2 KiB
Python
Raw Normal View History

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