| from fastapi import APIRouter, HTTPException, Depends |
| from fastapi.security import OAuth2PasswordRequestForm |
| from ..models.user import UserCreate, User, Token |
| from ..services.auth import get_password_hash, authenticate_user, create_access_token |
| from ..db.mongodb import mongodb |
|
|
| router = APIRouter() |
|
|
| @router.post("/register", response_model=User) |
| async def register(user: UserCreate): |
| if mongodb.users.find_one({"username": user.username}): |
| raise HTTPException(400, "Username already registered") |
| if mongodb.users.find_one({"email": user.email}): |
| raise HTTPException(400, "Email already registered") |
| hashed = get_password_hash(user.password) |
| user_dict = user.dict(exclude={"password"}) |
| user_dict["hashed_password"] = hashed |
| mongodb.users.insert_one(user_dict) |
| return User(**user_dict) |
|
|
| @router.post("/token", response_model=Token) |
| async def login(form_data: OAuth2PasswordRequestForm = Depends()): |
| user = authenticate_user(form_data.username, form_data.password) |
| if not user: |
| raise HTTPException(401, "Incorrect username or password", headers={"WWW-Authenticate": "Bearer"}) |
| token = create_access_token({"sub": user.username}) |
| return {"access_token": token, "token_type": "bearer"} |