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,
    )
Пример #2
0
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"))
Пример #6
0
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)
Пример #8
0
def get_user_address(user: '******') -> str:
    email_field_name = get_user_email_field_name()
    email = getattr(user, email_field_name)  # type: str
    return email
Пример #9
0
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))