Move validate_password into UserManager

This commit is contained in:
François Voron
2021-09-14 14:01:57 +02:00
parent fdc8e54253
commit 480a6bc4df
19 changed files with 107 additions and 116 deletions

View File

@@ -9,7 +9,7 @@ from fastapi_users.router.common import ErrorCode
def get_auth_router(
backend: BaseAuthentication,
get_user_manager: UserManagerDependency[models.UD],
get_user_manager: UserManagerDependency[models.UC, models.UD],
authenticator: Authenticator,
requires_verification: bool = False,
) -> APIRouter:
@@ -23,7 +23,7 @@ def get_auth_router(
async def login(
response: Response,
credentials: OAuth2PasswordRequestForm = Depends(),
user_manager: UserManager[models.UD] = Depends(get_user_manager),
user_manager: UserManager[models.UC, models.UD] = Depends(get_user_manager),
):
user = await user_manager.authenticate(credentials)

View File

@@ -24,7 +24,7 @@ def generate_state_token(
def get_oauth_router(
oauth_client: BaseOAuth2,
get_user_manager: UserManagerDependency[models.UD],
get_user_manager: UserManagerDependency[models.UC, models.UD],
user_db_model: Type[models.UD],
authenticator: Authenticator,
state_secret: SecretType,
@@ -83,7 +83,7 @@ def get_oauth_router(
request: Request,
response: Response,
access_token_state=Depends(oauth2_authorize_callback),
user_manager: UserManager[models.UD] = Depends(get_user_manager),
user_manager: UserManager[models.UC, models.UD] = Depends(get_user_manager),
):
token, state = access_token_state
account_id, account_email = await oauth_client.get_id_email(

View File

@@ -13,7 +13,7 @@ from fastapi_users.router.common import ErrorCode, run_handler
def get_register_router(
get_user_manager: UserManagerDependency[models.UD],
get_user_manager: UserManagerDependency[models.UC, models.UD],
user_model: Type[models.U],
user_create_model: Type[models.UC],
after_register: Optional[Callable[[models.UD, Request], None]] = None,
@@ -27,7 +27,7 @@ def get_register_router(
async def register(
request: Request,
user: user_create_model, # type: ignore
user_manager: UserManager[models.UD] = Depends(get_user_manager),
user_manager: UserManager[models.UC, models.UD] = Depends(get_user_manager),
):
try:
created_user = await user_manager.create(user, safe=True)

View File

@@ -11,7 +11,6 @@ from fastapi_users.manager import (
UserManager,
UserManagerDependency,
UserNotExists,
ValidatePasswordProtocol,
)
from fastapi_users.password import get_password_hash
from fastapi_users.router.common import ErrorCode, run_handler
@@ -20,12 +19,11 @@ RESET_PASSWORD_TOKEN_AUDIENCE = "fastapi-users:reset"
def get_reset_password_router(
get_user_manager: UserManagerDependency[models.UD],
get_user_manager: UserManagerDependency[models.UC, models.UD],
reset_password_token_secret: SecretType,
reset_password_token_lifetime_seconds: int = 3600,
after_forgot_password: Optional[Callable[[models.UD, str, Request], None]] = None,
after_reset_password: Optional[Callable[[models.UD, Request], None]] = None,
validate_password: Optional[ValidatePasswordProtocol] = None,
) -> APIRouter:
"""Generate a router with the reset password routes."""
router = APIRouter()
@@ -34,7 +32,7 @@ def get_reset_password_router(
async def forgot_password(
request: Request,
email: EmailStr = Body(..., embed=True),
user_manager: UserManager[models.UD] = Depends(get_user_manager),
user_manager: UserManager[models.UC, models.UD] = Depends(get_user_manager),
):
try:
user = await user_manager.get_by_email(email)
@@ -58,7 +56,7 @@ def get_reset_password_router(
request: Request,
token: str = Body(...),
password: str = Body(...),
user_manager: UserManager[models.UD] = Depends(get_user_manager),
user_manager: UserManager[models.UC, models.UD] = Depends(get_user_manager),
):
try:
data = decode_jwt(
@@ -93,17 +91,16 @@ def get_reset_password_router(
detail=ErrorCode.RESET_PASSWORD_BAD_TOKEN,
)
if validate_password:
try:
await validate_password(password, user)
except InvalidPasswordException as e:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail={
"code": ErrorCode.RESET_PASSWORD_INVALID_PASSWORD,
"reason": e.reason,
},
)
try:
await user_manager.validate_password(password, user)
except InvalidPasswordException as e:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail={
"code": ErrorCode.RESET_PASSWORD_INVALID_PASSWORD,
"reason": e.reason,
},
)
user.hashed_password = get_password_hash(password)
await user_manager.user_db.update(user)

View File

@@ -16,7 +16,7 @@ from fastapi_users.router.common import ErrorCode, run_handler
def get_users_router(
get_user_manager: UserManagerDependency[models.UD],
get_user_manager: UserManagerDependency[models.UC, models.UD],
user_model: Type[models.U],
user_update_model: Type[models.UU],
user_db_model: Type[models.UD],
@@ -35,7 +35,8 @@ def get_users_router(
)
async def get_user_or_404(
id: UUID4, user_manager: UserManager[models.UD] = Depends(get_user_manager)
id: UUID4,
user_manager: UserManager[models.UC, models.UD] = Depends(get_user_manager),
) -> models.UD:
try:
return await user_manager.get(id)
@@ -57,7 +58,7 @@ def get_users_router(
request: Request,
user_update: user_update_model, # type: ignore
user: user_db_model = Depends(get_current_active_user), # type: ignore
user_manager: UserManager[models.UD] = Depends(get_user_manager),
user_manager: UserManager[models.UC, models.UD] = Depends(get_user_manager),
):
try:
updated_user = await user_manager.update(user_update, user, safe=True)
@@ -100,7 +101,7 @@ def get_users_router(
user_update: user_update_model, # type: ignore
request: Request,
user=Depends(get_user_or_404),
user_manager: UserManager[models.UD] = Depends(get_user_manager),
user_manager: UserManager[models.UC, models.UD] = Depends(get_user_manager),
):
try:
updated_user = await user_manager.update(user_update, user, safe=False)
@@ -134,7 +135,7 @@ def get_users_router(
)
async def delete_user(
user=Depends(get_user_or_404),
user_manager: UserManager[models.UD] = Depends(get_user_manager),
user_manager: UserManager[models.UC, models.UD] = Depends(get_user_manager),
):
await user_manager.delete(user)
return None

View File

@@ -18,7 +18,7 @@ VERIFY_USER_TOKEN_AUDIENCE = "fastapi-users:verify"
def get_verify_router(
get_user_manager: UserManagerDependency[models.UD],
get_user_manager: UserManagerDependency[models.UC, models.UD],
user_model: Type[models.U],
verification_token_secret: SecretType,
verification_token_lifetime_seconds: int = 3600,
@@ -33,7 +33,7 @@ def get_verify_router(
async def request_verify_token(
request: Request,
email: EmailStr = Body(..., embed=True),
user_manager: UserManager[models.UD] = Depends(get_user_manager),
user_manager: UserManager[models.UC, models.UD] = Depends(get_user_manager),
):
try:
user = await user_manager.get_by_email(email)
@@ -60,7 +60,7 @@ def get_verify_router(
async def verify(
request: Request,
token: str = Body(..., embed=True),
user_manager: UserManager[models.UD] = Depends(get_user_manager),
user_manager: UserManager[models.UC, models.UD] = Depends(get_user_manager),
):
try:
data = decode_jwt(