Files
loon-backend/loon/web/auth/router.py
T
ciomek cb01e1bcf0
Build and Push Docker Image / build-and-push (push) Successful in 18s
Rate limiting
2026-08-17 20:44:10 +02:00

29 lines
1.0 KiB
Python

from fastapi import APIRouter, HTTPException, Request, status
from sqlmodel import Session, select
from loon.web import limiter
from loon.web.auth.schema import JWTResponse, JWTRequest
from loon.web.db import engine
from loon.web.users.models import User
from loon.web.utils.jwt import generate_token
from loon.web.utils.password import verify_password
router = APIRouter(prefix="/auth", tags=["auth"])
@router.post("/jwt/", response_model=JWTResponse)
@limiter.limit("5/minute")
async def get_jwt(request: Request, body: JWTRequest) -> JWTResponse:
with Session(engine) as session:
statement = select(User).where(User.internal_username == body.username)
user = session.exec(statement).first()
if user is None or not verify_password(body.password, user.password):
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Invalid username or password",
)
assert user.id is not None
return JWTResponse(access_token=generate_token(user.id))