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, ) )
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)
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, ) )
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
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, ), )
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)
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)
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))
async def retrieve_current_user(user: UserBase = Depends( get_current_user_authorizer())) -> UserInResponse: return UserInResponse.from_user(user)