vumichien's picture
change logic from sentence name to representative name
01ae535
raw
history blame
1.48 kB
from fastapi import APIRouter, Depends, HTTPException, status
from fastapi.security import OAuth2PasswordRequestForm
from datetime import timedelta
from auth import authenticate_user, create_access_token
from models import Token, UserCreate
from config import ACCESS_TOKEN_EXPIRE_HOURS
from database import get_users, create_account
router = APIRouter()
@router.post("/token", response_model=Token)
async def login_for_access_token(form_data: OAuth2PasswordRequestForm = Depends()):
"""
Endpoint để lấy access token bằng username và password
"""
user = authenticate_user(get_users(), form_data.username, form_data.password)
if not user:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Incorrect username or password",
headers={"WWW-Authenticate": "Bearer"},
)
access_token_expires = timedelta(hours=ACCESS_TOKEN_EXPIRE_HOURS)
access_token = create_access_token(
data={"sub": user.username}, expires_delta=access_token_expires
)
return Token(access_token=access_token, token_type="bearer")
@router.post("/register")
async def register_user(user_data: UserCreate):
"""
Endpoint để đăng ký tài khoản mới
"""
success, message = create_account(user_data.username, user_data.password)
if not success:
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=message)
return {"message": message}