def find_user_by_by_send_reset_password_link_data( data: Dict[str, Any], **kwargs) -> 'AbstractBaseUser': """ Return user if matching given criteria (login fields / e-mail). Return ``None`` otherwise. """ serializer = kwargs.get('serializer') if serializer: # TODO: Issue #114 - remove code supporting deprecated behavior get_user_or_none = getattr(serializer, 'get_user_or_none', None) if callable(get_user_or_none): user = get_user_or_none() if not user: raise UserNotFound() return user login_field_names = get_user_login_field_names() finder_tests = [('login', login_field_names)] finder_tests.extend((f, [f]) for f in login_field_names) for field_name, db_field_names in finder_tests: value = data.get(field_name) if value is None: continue for db_fn in db_field_names: user = get_user_by_lookup_dict({db_fn: value}, default=None, require_verified=False) if user is not None: return user raise UserNotFound()
def send_reset_password_link(request): ''' Send email with reset password link. ''' serializer = SendResetPasswordLinkSerializer(data=request.data) serializer.is_valid(raise_exception=True) login = serializer.data['login'] user = None for login_field in get_login_fields(): user = get_user_by_lookup_dict({login_field: login}, default=None) if user: break if not user: raise UserNotFound() signer = ResetPasswordSigner({ 'user_id': user.pk, }, request=request) template_config = ( registration_settings.RESET_PASSWORD_VERIFICATION_EMAIL_TEMPLATES) send_verification(user, signer, template_config) return get_ok_response('Reset link sent')
def send_reset_password_link(request): ''' Send email with reset password link. ''' if not registration_settings.RESET_PASSWORD_VERIFICATION_ENABLED: raise Http404() serializer_class = registration_settings.SEND_RESET_PASSWORD_LINK_SERIALIZER_CLASS # noqa: E501 serializer = serializer_class( data=request.data, context={'request': request}, ) serializer.is_valid(raise_exception=True) if registration_settings.RESET_PASSWORD_FAIL_WHEN_USER_NOT_FOUND: success_message = _("Reset link sent") else: success_message = _("Reset link sent if the user exists in database") user = serializer.get_user_or_none() if not user: if registration_settings.RESET_PASSWORD_FAIL_WHEN_USER_NOT_FOUND: raise UserNotFound() return get_ok_response(success_message) signer = ResetPasswordSigner({ 'user_id': get_user_verification_id(user), }, request=request) template_config_data = registration_settings.RESET_PASSWORD_VERIFICATION_EMAIL_TEMPLATES # noqa: E501 notification_data = { 'params_signer': signer, } send_verification_notification( NotificationType.RESET_PASSWORD_VERIFICATION, user, notification_data, template_config_data) return get_ok_response(success_message)
def authenticate_by_login_data(data: Dict[str, Any], **kwargs) -> 'AbstractBaseUser': serializer = kwargs.get('serializer') if serializer: # TODO: Issue #114 - remove code supporting deprecated behavior get_authenticated_user = getattr(serializer, 'get_authenticated_user', None) if callable(get_authenticated_user): user = get_authenticated_user() if not user: raise UserNotFound() return user login_field_names = get_user_login_field_names() password = data.get('password') login = data.get('login') if password is None: raise UserNotFound() auth_tests = [] # type: List[Dict[str, Any]] if login is not None: auth_tests.extend({ field_name: login, 'password': password, } for field_name in login_field_names) for field_name in login_field_names: field_value = data.get(field_name) if field_value is None: continue auth_tests.append({ field_name: field_value, 'password': password, }) for auth_kwargs in auth_tests: user = auth.authenticate(**auth_kwargs) if user: return user raise UserNotFound()
def get_user_by_lookup_dict( lookup_dict, default=_RAISE_EXCEPTION, require_verified=True): verification_enabled = registration_settings.REGISTER_VERIFICATION_ENABLED verification_flag_field = get_user_setting('VERIFICATION_FLAG_FIELD') user_class = get_user_model() kwargs = {} kwargs.update(lookup_dict) if require_verified and verification_enabled and verification_flag_field: kwargs[verification_flag_field] = True try: user = get_object_or_404(user_class.objects.all(), **kwargs) except Http404: if default is _RAISE_EXCEPTION: raise UserNotFound() from None return default else: return user
def send_reset_password_link(request): ''' Send email with reset password link. ''' if not registration_settings.RESET_PASSWORD_VERIFICATION_ENABLED: raise Http404() serializer_class = registration_settings.SEND_RESET_PASSWORD_LINK_SERIALIZER_CLASS # noqa: E501 serializer = serializer_class(data=request.data) serializer.is_valid(raise_exception=True) user = serializer.get_user_or_none() if not user: raise UserNotFound() signer = ResetPasswordSigner({ 'user_id': user.pk, }, request=request) template_config = ( registration_settings.RESET_PASSWORD_VERIFICATION_EMAIL_TEMPLATES) send_verification_notification(user, signer, template_config) return get_ok_response('Reset link sent')
def get_user_by_lookup_dict( lookup_dict: Dict[str, Any], default: Union[_DefaultT, Literal[_RAISE_EXCEPTION]] = _RAISE_EXCEPTION, require_verified: bool = True) -> Union['AbstractBaseUser', _DefaultT]: verification_enabled = registration_settings.REGISTER_VERIFICATION_ENABLED verification_flag_field = get_user_setting('VERIFICATION_FLAG_FIELD') user_class = get_user_model() kwargs = {} kwargs.update(lookup_dict) if require_verified and verification_enabled and verification_flag_field: kwargs[verification_flag_field] = True try: queryset = user_class.objects.all() # type: QuerySet[AbstractBaseUser] user = get_object_or_404(queryset, **kwargs) except Http404: if default is _RAISE_EXCEPTION: raise UserNotFound() from None return default else: return user