|
from fastapi import APIRouter, Request, Depends, HTTPException |
|
from .Schemas import BaseRequest, UserSchema |
|
from pydantic import BaseModel |
|
from .Model import User |
|
from sqlalchemy import and_ |
|
from fastapi_jwt_auth import AuthJWT |
|
|
|
|
|
class Settings(BaseModel): |
|
authjwt_secret_key: str = "secret" |
|
authjwt_access_token_expires: bool = False |
|
|
|
|
|
user_router = APIRouter(tags=["User"]) |
|
|
|
|
|
@AuthJWT.load_config |
|
def get_config(): |
|
return Settings() |
|
|
|
|
|
@user_router.post("/user/register") |
|
async def register_user(user: BaseRequest): |
|
data = await User.objects.filter(email=user.email).first() |
|
if data != None: |
|
return {"code": 400, "message": "user exists", "payload": None} |
|
else: |
|
user.hash_password() |
|
sample = await User.objects.create(**user.dict()) |
|
return {"code": 200, "message": "success", "payload": None} |
|
|
|
|
|
async def get_token_owner(Authorize: AuthJWT = Depends()): |
|
Authorize.jwt_required() |
|
current_user = Authorize.get_jwt_subject() |
|
user = await User.objects.filter(id=int(current_user)).first() |
|
if not user: |
|
raise HTTPException(status_code=401, detail="Invalid Credentials") |
|
|
|
return UserSchema.from_orm(user) |
|
|
|
|
|
@user_router.post("/user/login") |
|
async def register_user(user: BaseRequest, Authorize: AuthJWT = Depends()): |
|
db_user = await User.objects.filter(email=user.email).first() |
|
|
|
if not db_user: |
|
raise HTTPException(status_code=401, detail="Invalid Credentials") |
|
if not db_user.verify_password(user.password): |
|
raise HTTPException(status_code=401, detail="Invalid Credentials") |
|
user = UserSchema.from_orm(db_user) |
|
access_token = Authorize.create_access_token(subject=user.id) |
|
|
|
return { |
|
"code": 200, |
|
"message": "success", |
|
"payload": db_user.__dict__, |
|
"access_token": access_token, |
|
} |
|
|