from fastapi import APIRouter, Depends, HTTPException, status from fastapi.security import OAuth2PasswordRequestForm from sqlalchemy.orm import Session from ..database import get_db from ..deps import get_current_user from ..models import User from ..schemas import Token, UserOut from ..security import create_access_token, verify_password router = APIRouter(prefix="/auth", tags=["auth"]) @router.post("/login", response_model=Token) def login( form: OAuth2PasswordRequestForm = Depends(), db: Session = Depends(get_db) ) -> Token: user = db.query(User).filter(User.username == form.username).first() if user is None or not verify_password(form.password, user.password_hash): raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Benutzername oder Passwort falsch", ) token = create_access_token(subject=user.username, role=user.role.value) return Token(access_token=token, role=user.role, username=user.username) @router.get("/me", response_model=UserOut) def me(current_user: User = Depends(get_current_user)) -> User: return current_user