Example #1
0
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)
Example #2
0
def register(request):
    '''
    Register new user.
    '''
    serializer_class = registration_settings.REGISTER_SERIALIZER_CLASS
    serializer = serializer_class(data=request.data)
    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 = get_user_setting('EMAIL_FIELD')
        if (email_field not in serializer.validated_data
                or not serializer.validated_data[email_field]):
            raise BadRequest("User without email cannot be verified")

    user = serializer.save(**kwargs)

    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)
    user_data = output_serializer.data

    if registration_settings.REGISTER_VERIFICATION_ENABLED:
        signer = RegisterSigner({
            'user_id': get_user_verification_id(user),
        },
                                request=request)
        template_config = (
            registration_settings.REGISTER_VERIFICATION_EMAIL_TEMPLATES)
        send_verification_notification(user, signer, template_config)

    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)

    email = serializer.get_email()

    template_config = (
        registration_settings.REGISTER_EMAIL_VERIFICATION_EMAIL_TEMPLATES)
    if registration_settings.REGISTER_EMAIL_VERIFICATION_ENABLED:
        signer = RegisterEmailSigner(
            {
                'user_id': get_user_verification_id(user),
                'email': email,
            },
            request=request)
        send_verification_notification(user,
                                       signer,
                                       template_config,
                                       email=email)
    else:
        email_field = get_user_setting('EMAIL_FIELD')
        setattr(user, email_field, email)
        user.save()

    return get_ok_response('Register email link email sent')
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 send_register_verification_email_notification(request, user):
    signer = RegisterSigner({
        'user_id': get_user_verification_id(user),
    },
                            request=request)
    template_config_data = registration_settings.REGISTER_VERIFICATION_EMAIL_TEMPLATES
    notification_data = {
        'params_signer': signer,
    }
    send_verification_notification(NotificationType.REGISTER_VERIFICATION,
                                   user, notification_data,
                                   template_config_data)
Example #6
0
def send_register_verification_email_notification(
        request: Request,
        user: '******',
) -> None:
    signer = RegisterSigner({
        'user_id': get_user_verification_id(user),
    }, request=request)
    template_config_data = _get_email_template_config_data(
        request, user, NotificationType.REGISTER_VERIFICATION)
    notification_data = {
        'params_signer': signer,
    }
    send_verification_notification(
        NotificationType.REGISTER_VERIFICATION, user,
        notification_data, template_config_data)
Example #7
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:
            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)
Example #8
0
def send_register_email_verification_email_notification(
        request: Request,
        user: '******',
        email: str,
        email_already_used: bool = False,
) -> None:
    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 = _get_email_template_config_data(
        request, user, NotificationType.REGISTER_EMAIL_VERIFICATION)
    send_verification_notification(
        NotificationType.REGISTER_EMAIL_VERIFICATION, user,
        notification_data, template_config_data, custom_user_address=email)
Example #9
0
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': get_user_verification_id(user),
    },
                                 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')