File size: 1,250 Bytes
e84d389
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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"}