def process_verify_email_data(input_data, serializer_context=None): if serializer_context is None: serializer_context = {} if not registration_settings.REGISTER_EMAIL_VERIFICATION_ENABLED: raise Http404() serializer = VerifyEmailSerializer( data=input_data, context=serializer_context, ) serializer.is_valid(raise_exception=True) data = serializer.validated_data signer = RegisterEmailSigner(data) verify_signer_or_bad_request(signer) request = serializer_context.get('request') new_email = data['email'] if is_user_email_field_unique() and user_with_email_exists(new_email): raise BadRequest(_("This email is already registered.")) email_field_name = get_user_email_field_name() user = get_user_by_verification_id(data['user_id']) old_email = getattr(user, email_field_name) setattr(user, email_field_name, new_email) user.save() signals.user_changed_email.send( sender=None, user=user, new_email=new_email, old_email=old_email, request=request, )
def register(request): ''' Register new user. ''' serializer_class = registration_settings.REGISTER_SERIALIZER_CLASS serializer = serializer_class(data=request.data, context={'request': request}) serializer.is_valid(raise_exception=True) kwargs = {} if registration_settings.REGISTER_VERIFICATION_ENABLED: verification_flag_field = get_user_setting('VERIFICATION_FLAG_FIELD') kwargs[verification_flag_field] = False email_field_name = get_user_email_field_name() if (email_field_name not in serializer.validated_data or not serializer.validated_data[email_field_name]): raise BadRequest(_("User without email cannot be verified")) with transaction.atomic(): user = serializer.save(**kwargs) if registration_settings.REGISTER_VERIFICATION_ENABLED: send_register_verification_email_notification(request, user) signals.user_registered.send(sender=None, user=user, request=request) output_serializer_class = registration_settings.REGISTER_OUTPUT_SERIALIZER_CLASS output_serializer = output_serializer_class( instance=user, context={'request': request}, ) user_data = output_serializer.data return Response(user_data, status=status.HTTP_201_CREATED)
def register_email(request): ''' Register new email. ''' user = request.user serializer_class = registration_settings.REGISTER_EMAIL_SERIALIZER_CLASS serializer = serializer_class(data=request.data, context={'request': request}) serializer.is_valid(raise_exception=True) # TODO: Issue #114 - remove code supporting deprecated behavior get_email = getattr(serializer, 'get_email', None) if callable(get_email): email = get_email() else: email = serializer.validated_data['email'] email_already_used = is_user_email_field_unique( ) and user_with_email_exists(email) if registration_settings.REGISTER_EMAIL_VERIFICATION_ENABLED: signer = RegisterEmailSigner( { 'user_id': get_user_verification_id(user), 'email': email, }, request=request) notification_data = { 'params_signer': signer, 'email_already_used': email_already_used, } template_config_data = registration_settings.REGISTER_EMAIL_VERIFICATION_EMAIL_TEMPLATES # noqa: E501 send_verification_notification( NotificationType.REGISTER_EMAIL_VERIFICATION, user, notification_data, template_config_data, custom_user_address=email) else: if email_already_used: raise EmailAlreadyRegistered() email_field_name = get_user_email_field_name() old_email = getattr(user, email_field_name) setattr(user, email_field_name, email) user.save() signals.user_changed_email.send( sender=None, user=user, new_email=email, old_email=old_email, request=request, ) return get_ok_response(_("Register email link email sent"))
def register(request): ''' Register new user. ''' serializer_class = registration_settings.REGISTER_SERIALIZER_CLASS serializer = serializer_class( data=request.data, context={'request': request}, ) serializer.is_valid(raise_exception=True) kwargs = {} if registration_settings.REGISTER_VERIFICATION_ENABLED: verification_flag_field = get_user_setting('VERIFICATION_FLAG_FIELD') kwargs[verification_flag_field] = False email_field_name = get_user_email_field_name() if (email_field_name not in serializer.validated_data or not serializer.validated_data[email_field_name]): raise BadRequest("User without email cannot be verified") with transaction.atomic(): user = serializer.save(**kwargs) if registration_settings.REGISTER_VERIFICATION_ENABLED: signer = RegisterSigner({ 'user_id': get_user_verification_id(user), }, request=request) template_config_data = registration_settings.REGISTER_VERIFICATION_EMAIL_TEMPLATES # noqa: E501 notification_data = { 'params_signer': signer, } send_verification_notification( NotificationType.REGISTER_VERIFICATION, user, notification_data, template_config_data) signals.user_registered.send(sender=None, user=user, request=request) output_serializer_class = registration_settings.REGISTER_OUTPUT_SERIALIZER_CLASS # noqa: E501 output_serializer = output_serializer_class( instance=user, context={'request': request}, ) user_data = output_serializer.data return Response(user_data, status=status.HTTP_201_CREATED)
def register_email(request: Request) -> Response: ''' Register new email. ''' user = request.user serializer_class = registration_settings.REGISTER_EMAIL_SERIALIZER_CLASS serializer = serializer_class(data=request.data, context={'request': request}) serializer.is_valid(raise_exception=True) # TODO: Issue #114 - remove code supporting deprecated behavior get_email = getattr(serializer, 'get_email', None) if callable(get_email): email = get_email() else: email = serializer.validated_data['email'] email_already_used = is_user_email_field_unique( ) and user_with_email_exists(email) if registration_settings.REGISTER_EMAIL_VERIFICATION_ENABLED: send_register_email_verification_email_notification( request, user, email, email_already_used=email_already_used) else: if email_already_used: raise EmailAlreadyRegistered() email_field_name = get_user_email_field_name() old_email = getattr(user, email_field_name) setattr(user, email_field_name, email) user.save() signals.user_changed_email.send( sender=None, user=user, new_email=email, old_email=old_email, request=request, ) return get_ok_response(_("Register email link email sent"))
def get_user_address(user): email_field_name = get_user_email_field_name() email = getattr(user, email_field_name) return email
def _get_user_by_email_or_none(self, email): email_field_name = get_user_email_field_name() return get_user_by_lookup_dict({email_field_name: email}, default=None, require_verified=False)
def get_user_address(user: '******') -> str: email_field_name = get_user_email_field_name() email = getattr(user, email_field_name) # type: str return email
def _is_email_field_unique() -> bool: user_cls = get_user_model() # type: Type[Model] user_meta = user_cls._meta # pylint: disable=protected-access email_field_name = get_user_email_field_name() return is_model_field_unique(user_meta.get_field(email_field_name))