async def test_password_set(): service = PasswordService(social_user) await service.password_set({ "password1": "12345678", "password2": "12345678", }) service = PasswordService(user) with pytest.raises(HTTPException) as e: await service.password_set({ "password1": "12345678", "password2": "12345678", }) assert e.type is HTTPException assert e.value.args[0] == 400
def password_service_setup(): PasswordService.setup( UsersRepo(MockDatabaseBackend("test"), MockCacheBackend(), []), auth_backend, False, "RU", "http://127.0.0.1", "127.0.0.1", RECAPTCHA_SECRET, None, None, None, None, None, )
async def test_password_status(): service = PasswordService(user) # TODO: exceptions # TODO: social res = await service.password_status() assert isinstance(res, dict) assert res.get("status") == "change"
async def test_password_reset(): token = create_random_string() token_hash = hash_string(token) service = PasswordService() await service._repo.set_password_reset_token(1, token_hash) await service.password_reset( { "password1": "87654321", "password2": "87654321", }, token, ) item = await service._repo.get(1) assert item.get("password") != "12345678"
async def test_password_change(): service = PasswordService(user) item = await service._repo.get(user.id) with pytest.raises(HTTPException) as e: await service.password_change({ "old_password": "******", "password1": "87654321", "password2": "87654321", }) assert e.type is HTTPException assert e.value.args[0] == 400 await service.password_change({ "old_password": "******", "password1": "87654321", "password2": "87654321", }) item = await service._repo.get(user.id) assert item.get("password") != "12345678"
async def password_change(*, request: Request, user: User = Depends(get_authenticated_user)): data = await request.json() service = PasswordService(user) return await service.password_change(data)
async def password_reset(*, token: str, request: Request): data = await request.json() service = PasswordService() return await service.password_reset(data, token)
async def password_status(*, user: User = Depends(get_authenticated_user)): service = PasswordService(user) return await service.password_status()
async def forgot_password(*, request: Request): data = await request.json() ip = request.client.host service = PasswordService() return await service.forgot_password(data, ip)
def get_router( repo: UsersRepo, auth_backend: JWTBackend, get_authenticated_user: Callable, debug: bool, language: str, base_url: str, site: str, recaptcha_secret: str, smtp_username: str, smtp_password: str, smtp_host: str, smtp_tls: int, display_name: str, ): PasswordService.setup( repo, auth_backend, debug, language, base_url, site, recaptcha_secret, smtp_username, smtp_password, smtp_host, smtp_tls, display_name, ) router = APIRouter() @router.post("/forgot_password", name="auth:forgot_password") async def forgot_password(*, request: Request): data = await request.json() ip = request.client.host service = PasswordService() return await service.forgot_password(data, ip) @router.get("/password", name="auth:password_status") async def password_status(*, user: User = Depends(get_authenticated_user)): service = PasswordService(user) return await service.password_status() @router.post("/password", name="auth:password_set") async def password_set(*, request: Request, user: User = Depends(get_authenticated_user)): data = await request.json() service = PasswordService(user) return await service.password_set(data) @router.post("/password/{token}", name="auth:password_reset") async def password_reset(*, token: str, request: Request): data = await request.json() service = PasswordService() return await service.password_reset(data, token) @router.put("/password", name="auth:password_change") async def password_change(*, request: Request, user: User = Depends(get_authenticated_user)): data = await request.json() service = PasswordService(user) return await service.password_change(data) return router
async def test_forgot_password(): service = PasswordService() # TODO: exceptions await service.forgot_password({"email": "*****@*****.**"}, "127.0.0.1")