Exemple #1
0
async def register(
    user_create: UserInCreate = Body(..., embed=True, alias="user"),
    users_repo: UsersRepository = Depends(get_repository(UsersRepository)),
) -> UserInResponse:
    if await check_username_is_taken(users_repo, user_create.username):
        raise HTTPException(
            status_code=HTTP_400_BAD_REQUEST, detail=strings.USERNAME_TAKEN
        )

    if await check_email_is_taken(users_repo, user_create.email):
        raise HTTPException(
            status_code=HTTP_400_BAD_REQUEST, detail=strings.EMAIL_TAKEN
        )
    
    user = await users_repo.create_user(**user_create.dict())

    token = jwt.create_access_token_for_user(user, str(config.SECRET_KEY))
    return UserInResponse(
        user=UserWithToken(
            username=user.username,
            email=user.email,
            bio=user.bio,
            image=user.image,
            token=token,
        )
    )
Exemple #2
0
async def login(user_login: UserInLogin = Body(
    ..., embed=True, alias="user")) -> UserInResponse:
    user = await User.get_or_none(email=user_login.email)

    if not user.check_password(user_login.password):
        raise HTTP_400_BAD_REQUEST_Exception(strings.INCORRECT_LOGIN_INPUT)
    return UserInResponse.from_user(user)
Exemple #3
0
async def login(
    user_login: UserInLogin = Body(..., embed=True, alias="user"),
    users_repo: UsersRepository = Depends(get_repository(UsersRepository)),
) -> UserInResponse:
    wrong_login_error = HTTPException(
        status_code=HTTP_400_BAD_REQUEST, detail=strings.INCORRECT_LOGIN_INPUT
    )

    try:
        user = await users_repo.get_user_by_email(email=user_login.email)
    except EntityDoesNotExist as existence_error:
        raise wrong_login_error from existence_error

    if not user.check_password(user_login.password):
        raise wrong_login_error

    token = jwt.create_access_token_for_user(user, str(config.SECRET_KEY))
    return UserInResponse(
        user=UserWithToken(
            username=user.username,
            email=user.email,
            bio=user.bio,
            image=user.image,
            token=token,
        )
    )
Exemple #4
0
async def update_current_user(
    user_update: UserInUpdate = Body(..., embed=True, alias="user"),
    current_user: User = Depends(get_current_user_authorizer()),
    users_repo: UsersRepository = Depends(get_repository(UsersRepository)),
) -> UserInResponse:
    if user_update.name and user_update.name != current_user.name:
        if await check_username_is_taken(users_repo, user_update.name):
            raise HTTPException(
                status_code=HTTP_400_BAD_REQUEST,
                detail=strings.USERNAME_TAKEN,
            )

    if user_update.email and user_update.email != current_user.email:
        if await check_email_is_taken(users_repo, user_update.email):
            raise HTTPException(
                status_code=HTTP_400_BAD_REQUEST,
                detail=strings.EMAIL_TAKEN,
            )

    user = await users_repo.update_user(user=current_user,
                                        **user_update.dict())

    token = jwt.create_access_token_for_user(user, str(config.SECRET_KEY))
    return UserInResponse(user=UserWithToken(
        name=user.name,
        email=user.email,
        bio=user.bio,
        image=user.image,
        token=token,
    ), )
async def test_user_can_retrieve_own_profile(app: FastAPI,
                                             authorized_client: AsyncClient,
                                             test_user: UserInDB,
                                             token: str) -> None:
    response = await authorized_client.get(
        app.url_path_for("users:get-current-user"))
    assert response.status_code == status.HTTP_200_OK

    user_profile = UserInResponse(**response.json())
    assert user_profile.user.email == test_user.email
Exemple #6
0
async def retrieve_current_user(
        user: User = Depends(get_current_user_authorizer()),
) -> UserInResponse:
    token = jwt.create_access_token_for_user(user, str(config.SECRET_KEY))
    return UserInResponse(user=UserWithToken(
        name=user.name,
        email=user.email,
        bio=user.bio,
        image=user.image,
        token=token,
    ), )
Exemple #7
0
async def register(user_create: UserInCreate = Body(
    ..., embed=True, alias="user")) -> UserInResponse:
    if await User.exists(username=user_create.username):
        raise HTTP_400_BAD_REQUEST_Exception(strings.USERNAME_TAKEN)

    if await User.exists(email=user_create.email):
        raise HTTP_400_BAD_REQUEST_Exception(strings.EMAIL_TAKEN)

    user = await create_user_and_set_password(user_create)
    await Profile.create(user=user, username=user.username)
    return UserInResponse.from_user(user)
Exemple #8
0
async def update_current_user(
    user_update: UserInUpdate = Body(..., embed=True, alias="user"),
    current_user: User = Depends(get_current_user_authorizer()),
) -> UserInResponse:
    if user_update.username and user_update.username != current_user.username:
        if await check_username_is_taken(user_update.username):
            raise HTTP_400_BAD_REQUEST_Exception(strings.USERNAME_TAKEN)

    if user_update.email and user_update.email != current_user.email:
        if await check_email_is_taken(user_update.email):
            raise HTTP_400_BAD_REQUEST_Exception(strings.EMAIL_TAKEN)

    user = update_user(current_user, user_update)
    return UserInResponse.from_user(user)
Exemple #9
0
async def retrieve_current_user(
        user: User = Depends(get_current_user_authorizer()),
        settings: AppSettings = Depends(get_app_settings),
) -> UserInResponse:
    token = jwt.create_access_token_for_user(
        user,
        str(settings.secret_key.get_secret_value()),
    )
    return UserInResponse(user=UserWithToken(
        username=user.username,
        email=user.email,
        bio=user.bio,
        image=user.image,
        token=token,
    ), )
async def test_user_can_update_own_profile(
    app: FastAPI,
    authorized_client: AsyncClient,
    test_user: UserInDB,
    token: str,
    update_value: str,
    update_field: str,
) -> None:
    response = await authorized_client.put(
        app.url_path_for("users:update-current-user"),
        json={"user": {
            update_field: update_value
        }},
    )
    assert response.status_code == status.HTTP_200_OK

    user_profile = UserInResponse(**response.json()).dict()
    assert user_profile["user"][update_field] == update_value
async def register(user_create: UserInCreate = Depends(
    get_create(UserInCreate, alias="user")),
                   users_repo: UsersRepository = Depends(
                       get_repository(UsersRepository))) -> UserInResponse:
    if await check_username_is_taken(users_repo, user_create.username):
        raise HTTPException(status_code=HTTP_400_BAD_REQUEST,
                            detail=strings.USERNAME_TAKEN)

    if await check_email_is_taken(users_repo, user_create.email):
        raise HTTPException(status_code=HTTP_400_BAD_REQUEST,
                            detail=strings.EMAIL_TAKEN)

    user = await users_repo.create(CREATE_MODEL=UserInCreate,
                                   RETURN_MODEL=UserInDB)(user_create)

    token = jwt.create_access_token_for_user(user, str(SECRET_KEY))

    return UserInResponse(user=UserWithToken(token=token, **user.dict()))
async def test_user_can_change_password(
    app: FastAPI,
    authorized_client: AsyncClient,
    test_user: UserInDB,
    token: str,
    db: Database,
) -> None:
    response = await authorized_client.put(
        app.url_path_for("users:update-current-user"),
        json={"user": {
            "password": "******"
        }},
    )
    assert response.status_code == status.HTTP_200_OK
    user_profile = UserInResponse(**response.json())

    async with db.pool.acquire() as connection:
        users_repo = UsersRepository(connection)
        user = await users_repo.get_user_by_username(
            username=user_profile.user.username)

    assert user.check_password("new_password")
async def retrieve_current_user(user: User = Depends(
    get_current_user_authorizer())) -> UserInResponse:
    token = jwt.create_access_token_for_user(user, str(config.SECRET_KEY))
    return UserInResponse(user=UserWithToken(**user.dict(), token=token))
Exemple #14
0
async def retrieve_current_user(user: UserBase = Depends(
    get_current_user_authorizer())) -> UserInResponse:
    return UserInResponse.from_user(user)