File size: 1,827 Bytes
591d823
 
 
252d749
 
591d823
 
 
 
 
9ad8e24
252d749
 
 
 
 
591d823
 
 
 
 
252d749
 
 
 
 
 
 
 
 
 
 
591d823
 
 
 
 
 
 
 
 
 
252d749
591d823
252d749
591d823
 
 
 
 
 
 
 
 
 
 
 
 
 
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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,
    }