Exemplo n.º 1
0
def send_activation(request):
    """
    POST /auth/send-activation/ with CSRF token and email
    will mail account activation link to requester
    """
    form = ResendActivationForm(request.data)
    if form.is_valid():
        requesting_user = form.user_cache

        mail_subject = _("Activate %(user)s account on %(forum_name)s forums") % {
            'user': requesting_user.username,
            'forum_name': settings.forum_name,
        }

        mail_user(
            request,
            requesting_user,
            mail_subject,
            'misago/emails/activation/by_user',
            {
                'activation_token': make_activation_token(requesting_user),
            },
        )

        return Response({
            'username': form.user_cache.username,
            'email': form.user_cache.email,
        })
    else:
        return Response(
            form.get_errors_dict(),
            status=status.HTTP_400_BAD_REQUEST,
        )
Exemplo n.º 2
0
def send_password_form(request):
    """
    POST /auth/send-password-form/ with CSRF token and email
    will mail change password form link to requester
    """
    form = ResetPasswordForm(request.data)
    if form.is_valid():
        requesting_user = form.user_cache

        mail_subject = _("Change %(user)s password on %(forum_name)s forums") % {
            'user': requesting_user.username,
            'forum_name': settings.forum_name,
        }

        confirmation_token = make_password_change_token(requesting_user)

        mail_user(
            request,
            requesting_user,
            mail_subject,
            'misago/emails/change_password_form_link',
            {
                'confirmation_token': confirmation_token,
            },
        )

        return Response({
            'username': form.user_cache.username,
            'email': form.user_cache.email,
        })
    else:
        return Response(
            form.get_errors_dict(),
            status=status.HTTP_400_BAD_REQUEST,
        )
Exemplo n.º 3
0
def send_activation(request):
    """
    POST /auth/send-activation/ with CSRF token and email
    will mail account activation link to requester
    """
    form = ResendActivationForm(request.data)
    if form.is_valid():
        requesting_user = form.user_cache

        mail_subject = _("Activate %(user)s account on %(forum_name)s forums") % {
            'user': requesting_user.username,
            'forum_name': settings.forum_name,
        }

        mail_user(
            request,
            requesting_user,
            mail_subject,
            'misago/emails/activation/by_user',
            {
                'activation_token': make_activation_token(requesting_user),
            },
        )

        return Response({
            'username': form.user_cache.username,
            'email': form.user_cache.email,
        })
    else:
        return Response(
            form.get_errors_dict(),
            status=status.HTTP_400_BAD_REQUEST,
        )
Exemplo n.º 4
0
def change_email_endpoint(request, pk=None):
    serializer = ChangeEmailSerializer(
        data=request.data,
        context={'user': request.user},
    )

    if serializer.is_valid():
        token = store_new_credential(request, 'email',
                                     serializer.validated_data['new_email'])

        mail_subject = _("Confirm e-mail change on %(forum_name)s forums")
        mail_subject = mail_subject % {'forum_name': settings.forum_name}

        # swap address with new one so email is sent to new address
        request.user.email = serializer.validated_data['new_email']

        mail_user(request.user,
                  mail_subject,
                  'misago/emails/change_email',
                  context={'token': token})

        message = _("E-mail change confirmation link was sent to new address.")
        return Response({'detail': message})
    else:
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Exemplo n.º 5
0
def send_password_form(request):
    form = ResetPasswordForm(request.data)
    if form.is_valid():
        requesting_user = form.user_cache

        mail_subject = _("Change %(user)s password on %(forum_name)s forums")
        subject_formats = {
            'user': requesting_user.username,
            'forum_name': settings.forum_name,
        }
        mail_subject = mail_subject % subject_formats

        confirmation_token = make_password_change_token(requesting_user)

        mail_user(request, requesting_user, mail_subject,
                  'misago/emails/change_password_form_link',
                  {'confirmation_token': confirmation_token})

        return Response({
            'username': form.user_cache.username,
            'email': form.user_cache.email
        })
    else:
        return Response(form.get_errors_dict(),
                        status=status.HTTP_400_BAD_REQUEST)
Exemplo n.º 6
0
def register(request):
    SecuredForm = add_captcha_to_form(RegisterForm, request)

    form = SecuredForm()
    if request.method == 'POST':
        form = SecuredForm(request.POST)
        if form.is_valid():
            activation_kwargs = {}
            if settings.account_activation == 'user':
                activation_kwargs = {
                    'requires_activation': ACTIVATION_REQUIRED_USER
                }
            elif settings.account_activation == 'admin':
                activation_kwargs = {
                    'requires_activation': ACTIVATION_REQUIRED_ADMIN
                }

            User = get_user_model()
            new_user = User.objects.create_user(form.cleaned_data['username'],
                                                form.cleaned_data['email'],
                                                form.cleaned_data['password'],
                                                set_default_avatar=True,
                                                **activation_kwargs)

            mail_subject = _("Welcome on %(forum_title)s forums!")
            mail_subject = mail_subject % {'forum_title': settings.forum_name}

            if settings.account_activation == 'none':
                authenticated_user = authenticate(
                    username=new_user.email,
                    password=form.cleaned_data['password'])
                login(request, authenticated_user)

                welcome_message = _("Welcome aboard, %(user)s!")
                welcome_message = welcome_message % {'user': new_user.username}
                messages.success(request, welcome_message)

                mail_user(request, new_user, mail_subject,
                          'misago/emails/register/complete')

                return redirect(settings.LOGIN_REDIRECT_URL)
            else:
                activation_token = make_activation_token(new_user)

                activation_by_admin = new_user.requires_activation_by_admin
                activation_by_user = new_user.requires_activation_by_user

                mail_user(
                    request, new_user, mail_subject,
                    'misago/emails/register/inactive',
                    {
                        'activation_token': activation_token,
                        'activation_by_admin': activation_by_admin,
                        'activation_by_user': activation_by_user,
                    })

                request.session['registered_user'] = new_user.pk
                return redirect('misago:register_completed')

    return render(request, 'misago/register/form.html', {'form': form})
Exemplo n.º 7
0
def send_password_form(request):
    """
    POST /auth/send-password-form/ with CSRF token and email
    will mail change password form link to requester
    """
    form = ResetPasswordForm(request.data)
    if form.is_valid():
        requesting_user = form.user_cache

        mail_subject = _("Change %(user)s password on %(forum_name)s forums") % {
            'user': requesting_user.username,
            'forum_name': settings.forum_name,
        }

        confirmation_token = make_password_change_token(requesting_user)

        mail_user(
            request,
            requesting_user,
            mail_subject,
            'misago/emails/change_password_form_link',
            {
                'confirmation_token': confirmation_token,
            },
        )

        return Response({
            'username': form.user_cache.username,
            'email': form.user_cache.email,
        })
    else:
        return Response(
            form.get_errors_dict(),
            status=status.HTTP_400_BAD_REQUEST,
        )
Exemplo n.º 8
0
    def handle(self, *args, **options):
        working_dir = settings.MISAGO_USER_DATA_DOWNLOADS_WORKING_DIR
        if not working_dir:
            self.stdout.write(
                "MISAGO_USER_DATA_DOWNLOADS_WORKING_DIR has to be set in order for "
                "this feature to work.")
            return

        downloads_prepared = 0
        queryset = DataDownload.objects.select_related('user')
        queryset = queryset.filter(status=DataDownload.STATUS_PENDING)
        for data_download in chunk_queryset(queryset):
            if prepare_user_data_download(data_download, logger):
                user = data_download.user
                subject = gettext("%(user)s, your data download is ready") % {
                    'user': user
                }
                mail_user(
                    user,
                    subject,
                    'misago/emails/data_download',
                    context={
                        'data_download':
                        data_download,
                        'expires_in':
                        settings.MISAGO_USER_DATA_DOWNLOADS_EXPIRE_IN_HOURS,
                    })

                downloads_prepared += 1

        self.stdout.write("Data downloads prepared: %s" % downloads_prepared)
Exemplo n.º 9
0
def send_password_form(request):
    """
    POST /auth/send-password-form/ with CSRF token and email
    will mail change password form link to requester
    """
    serializer = SendPasswordFormSerializer(data=request.data)
    serializer.is_valid(raise_exception=True)
    serializer.raise_if_banned()

    user = serializer.validated_data['user']

    mail_subject = _("Change %(user)s password on %(forum_name)s forums") % {
        'user': user.username,
        'forum_name': settings.forum_name,
    }

    confirmation_token = make_password_change_token(user)

    mail_user(
        request,
        user,
        mail_subject,
        'misago/emails/change_password_form_link',
        {
            'confirmation_token': confirmation_token,
        },
    )

    return Response({
        'username': user.username,
        'email': user.email,
    })
Exemplo n.º 10
0
def request_activation(request):
    form = ResendActivationForm()

    if request.method == "POST":
        form = ResendActivationForm(request.POST)
        if form.is_valid():
            requesting_user = form.user_cache
            request.session["activation_sent_to"] = requesting_user.pk

            mail_subject = _("Account activation on %(forum_title)s forums")
            mail_subject = mail_subject % {"forum_title": settings.forum_name}

            activation_token = make_activation_token(requesting_user)

            mail_user(
                request,
                requesting_user,
                mail_subject,
                "misago/emails/activation/by_user",
                {"activation_token": activation_token},
            )

            return redirect("misago:activation_sent")

    return render(request, "misago/activation/request.html", {"form": form})
Exemplo n.º 11
0
def request_reset(request):
    form = ResetPasswordForm()

    if request.method == 'POST':
        form = ResetPasswordForm(request.POST)
        if form.is_valid():
            requesting_user = form.user_cache
            request.session['reset_password_link_sent_to'] = requesting_user.pk

            mail_subject = _("Change %(user)s password "
                             "on %(forum_title)s forums")
            subject_formats = {
                'user': requesting_user.username,
                'forum_title': settings.forum_name
            }
            mail_subject = mail_subject % subject_formats

            confirmation_token = make_password_reset_token(requesting_user)

            mail_user(request, requesting_user, mail_subject,
                      'misago/emails/change_password_form_link',
                      {'confirmation_token': confirmation_token})

            return redirect('misago:reset_password_link_sent')

    return render(request, 'misago/forgottenpassword/request.html',
                  {'form': form})
Exemplo n.º 12
0
def send_activation(request):
    """
    POST /auth/send-activation/ with CSRF token and email
    will mail account activation link to requester
    """
    serializer = ResendActivationSerializer(data=request.data)
    serializer.is_valid(raise_exception=True)
    serializer.raise_if_banned()

    user = serializer.validated_data['user']

    mail_subject = _("Activate %(user)s account on %(forum_name)s forums") % {
        'user': user.username,
        'forum_name': settings.forum_name,
    }

    mail_user(
        request,
        user,
        mail_subject,
        'misago/emails/activation/by_user',
        {
            'activation_token': make_activation_token(user),
        },
    )

    return Response({
        'username': user.username,
        'email': user.email,
    })
Exemplo n.º 13
0
def request_reset(request):
    form = ResetPasswordForm()

    if request.method == "POST":
        form = ResetPasswordForm(request.POST)
        if form.is_valid():
            requesting_user = form.user_cache
            request.session["reset_password_link_sent_to"] = requesting_user.pk

            mail_subject = _("Change %(user)s password " "on %(forum_title)s forums")
            subject_formats = {"user": requesting_user.username, "forum_title": settings.forum_name}
            mail_subject = mail_subject % subject_formats

            confirmation_token = make_password_reset_token(requesting_user)

            mail_user(
                request,
                requesting_user,
                mail_subject,
                "misago/emails/change_password_form_link",
                {"confirmation_token": confirmation_token},
            )

            return redirect("misago:reset_password_link_sent")

    return render(request, "misago/forgottenpassword/request.html", {"form": form})
Exemplo n.º 14
0
def send_password_form(request):
    form = ResetPasswordForm(request.data)
    if form.is_valid():
        requesting_user = form.user_cache

        mail_subject = _("Change %(user)s password on %(forum_name)s forums")
        subject_formats = {
            'user': requesting_user.username,
            'forum_name': settings.forum_name,
        }
        mail_subject = mail_subject % subject_formats

        confirmation_token = make_password_change_token(requesting_user)

        mail_user(request, requesting_user, mail_subject,
                  'misago/emails/change_password_form_link',
                  {'confirmation_token': confirmation_token})

        return Response({
                'username': form.user_cache.username,
                'email': form.user_cache.email
            })
    else:
        return Response(form.get_errors_dict(),
                        status=status.HTTP_400_BAD_REQUEST)
Exemplo n.º 15
0
def register(request):
    SecuredForm = add_captcha_to_form(RegisterForm, request)

    form = SecuredForm()
    if request.method == 'POST':
        form = SecuredForm(request.POST)
        if form.is_valid():
            activation_kwargs = {}
            if settings.account_activation == 'user':
                activation_kwargs = {
                    'requires_activation': ACTIVATION_REQUIRED_USER
                }
            elif settings.account_activation == 'admin':
                activation_kwargs = {
                    'requires_activation': ACTIVATION_REQUIRED_ADMIN
                }

            User = get_user_model()
            new_user = User.objects.create_user(form.cleaned_data['username'],
                                                form.cleaned_data['email'],
                                                form.cleaned_data['password'],
                                                set_default_avatar=True,
                                                **activation_kwargs)

            mail_subject = _("Welcome on %(forum_title)s forums!")
            mail_subject = mail_subject % {'forum_title': settings.forum_name}

            if settings.account_activation == 'none':
                authenticated_user = authenticate(
                    username=new_user.email,
                    password=form.cleaned_data['password'])
                login(request, authenticated_user)

                welcome_message = _("Welcome aboard, %(user)s!")
                welcome_message = welcome_message % {'user': new_user.username}
                messages.success(request, welcome_message)

                mail_user(request, new_user, mail_subject,
                          'misago/emails/register/complete')

                return redirect(settings.LOGIN_REDIRECT_URL)
            else:
                activation_token = make_activation_token(new_user)

                activation_by_admin = new_user.requires_activation_by_admin
                activation_by_user = new_user.requires_activation_by_user

                mail_user(
                    request, new_user, mail_subject,
                    'misago/emails/register/inactive', {
                        'activation_token': activation_token,
                        'activation_by_admin': activation_by_admin,
                        'activation_by_user': activation_by_user,
                    })

                request.session['registered_user'] = new_user.pk
                return redirect('misago:register_completed')

    return render(request, 'misago/register/form.html', {'form': form})
Exemplo n.º 16
0
def test_mail_user(request):
    User = get_user_model()

    test_user = User.objects.all().first()
    mail.mail_user(request, test_user, "Misago Test Mail",
                   "misago/emails/base")

    return HttpResponse("Mailed user!")
Exemplo n.º 17
0
def test_mail_user(request):
    User = get_user_model()

    test_user = User.objects.all().first()
    mail.mail_user(request,
                   test_user,
                   "Misago Test Mail",
                   "misago/emails/base")

    return HttpResponse("Mailed user!")
Exemplo n.º 18
0
def add_participant(request, thread, user):
    """
    Add participant to thread, set "recound private threads" flag on user,
    notify user about being added to thread and mail him about it
    """
    ThreadParticipant.objects.add_participant(thread, user)

    set_user_unread_private_threads_sync(user)

    mail_subject = _("%(thread)s - %(user)s added you to private thread")
    subject_formats = {'thread': thread.title, 'user': request.user.username}

    mail_user(request, user, mail_subject % subject_formats,
              'misago/emails/privatethread/added', {'thread': thread})
Exemplo n.º 19
0
def change_email_password(request):
    form = ChangeEmailPasswordForm()
    if request.method == 'POST':
        form = ChangeEmailPasswordForm(request.POST, user=request.user)
        if form.is_valid():
            new_email = ''
            new_password = ''

            # Store original data
            old_email = request.user.email
            old_password = request.user.password

            # Assign new creds to user temporarily
            if form.cleaned_data['new_email']:
                request.user.set_email(form.cleaned_data['new_email'])
                new_email = request.user.email
            if form.cleaned_data['new_password']:
                request.user.set_password(form.cleaned_data['new_password'])
                new_password = request.user.password

            request.user.email = old_email
            request.user.password = old_password

            credentials_token = cache_new_credentials(request.user, new_email,
                                                      new_password)

            mail_subject = _("Confirm changes to %(user)s account "
                             "on %(forum_title)s forums")
            subject_formats = {
                'user': request.user.username,
                'forum_title': settings.forum_name
            }
            mail_subject = mail_subject % subject_formats

            if new_email:
                # finally override email before sending message
                request.user.email = new_email

            mail_user(request, request.user, mail_subject,
                      'misago/emails/change_email_password',
                      {'credentials_token': credentials_token})

            message = _("E-mail was sent to %(email)s with a link that "
                        "you have to click to confirm changes.")
            messages.info(request, message % {'email': request.user.email})
            return redirect('misago:usercp_change_email_password')

    return render(request, 'misago/usercp/change_email_password.html',
                  {'form': form})
Exemplo n.º 20
0
def add_participant(request, thread, user):
    """
    Add participant to thread, set "recound private threads" flag on user,
    notify user about being added to thread and mail him about it
    """
    ThreadParticipant.objects.add_participant(thread, user)

    set_user_unread_private_threads_sync(user)

    mail_subject = _("%(thread)s - %(user)s added you to private thread")
    subject_formats = {'thread': thread.title, 'user': request.user.username}

    mail_user(request, user, mail_subject % subject_formats,
              'misago/emails/privatethread/added',
              {'thread': thread})
Exemplo n.º 21
0
def change_email_password(request):
    form = ChangeEmailPasswordForm()
    if request.method == 'POST':
        form = ChangeEmailPasswordForm(request.POST, user=request.user)
        if form.is_valid():
            new_email = ''
            new_password = ''

            # Store original data
            old_email = request.user.email
            old_password = request.user.password

            # Assign new creds to user temporarily
            if form.cleaned_data['new_email']:
                request.user.set_email(form.cleaned_data['new_email'])
                new_email = request.user.email
            if form.cleaned_data['new_password']:
                request.user.set_password(form.cleaned_data['new_password'])
                new_password = request.user.password

            request.user.email = old_email
            request.user.password = old_password

            credentials_token = cache_new_credentials(
                request.user, new_email, new_password)

            mail_subject = _("Confirm changes to %(user)s account "
                             "on %(forum_title)s forums")
            subject_formats = {'user': request.user.username,
                               'forum_title': settings.forum_name}
            mail_subject = mail_subject % subject_formats

            if new_email:
                # finally override email before sending message
                request.user.email = new_email

            mail_user(request, request.user, mail_subject,
                      'misago/emails/change_email_password',
                      {'credentials_token': credentials_token})

            message = _("E-mail was sent to %(email)s with a link that "
                        "you have to click to confirm changes.")
            messages.info(request, message % {'email': request.user.email})
            return redirect('misago:usercp_change_email_password')

    return render(request, 'misago/usercp/change_email_password.html',
                  {'form': form})
Exemplo n.º 22
0
    def test_mail_user(self):
        """mail_user sets message in backend"""
        user = UserModel.objects.create_user('Bob', '*****@*****.**', 'pass123')

        mail_user(user, "Misago Test Mail", "misago/emails/base")

        self.assertEqual(mail.outbox[0].subject, "Misago Test Mail")

        # assert that url to user's avatar is valid
        html_body = mail.outbox[0].alternatives[0][0]
        user_avatar_url = reverse('misago:user-avatar',
                                  kwargs={
                                      'pk': user.pk,
                                      'size': 32
                                  })

        self.assertIn(user_avatar_url, html_body)
Exemplo n.º 23
0
def change_password_endpoint(request, pk=None):
    form = ChangePasswordForm(request.data, user=request.user)
    if form.is_valid():
        token = store_new_credential(
            request, 'password', form.cleaned_data['new_password'])

        mail_subject = _("Confirm password change on %(forum_name)s forums")
        mail_subject = mail_subject % {'forum_name': settings.forum_name}

        mail_user(request, request.user, mail_subject,
                  'misago/emails/change_password',
                  {'token': token})

        return Response({'detail': _("Password change confirmation link "
                                     "was sent to your address.")})
    else:
        return Response(form.errors, status=status.HTTP_400_BAD_REQUEST)
Exemplo n.º 24
0
def change_password_endpoint(request, pk=None):
    form = ChangePasswordForm(request.data, user=request.user)
    if form.is_valid():
        token = store_new_credential(
            request, 'password', form.cleaned_data['new_password'])

        mail_subject = _("Confirm password change on %(forum_title)s forums")
        mail_subject = mail_subject % {'forum_title': settings.forum_name}

        mail_user(request, request.user, mail_subject,
                  'misago/emails/change_password',
                  {'token': token})

        return Response({'detail': _("Password change confirmation link "
                                     "was sent to your address.")})
    else:
        return Response(form.errors, status=status.HTTP_400_BAD_REQUEST)
Exemplo n.º 25
0
def change_password_endpoint(request, pk=None):
    serializer = ChangePasswordSerializer(
        data=request.data,
        context={'user': request.user},
    )

    serializer.is_valid(raise_exception=True)

    token = store_new_credential(request, 'password',
                                 serializer.validated_data['new_password'])

    mail_subject = _("Confirm password change on %(forum_name)s forums")
    mail_subject = mail_subject % {'forum_name': settings.forum_name}

    mail_user(request, request.user, mail_subject,
              'misago/emails/change_password', {'token': token})

    return Response(status=204)
Exemplo n.º 26
0
def handle_form_submission(request):
    form = ChangeEmailForm(request.data, user=request.user)
    if form.is_valid():
        token = store_new_credential(request, 'email',
                                     form.cleaned_data['new_email'])

        mail_subject = _("Confirm e-mail change on %(forum_title)s forums")
        mail_subject = mail_subject % {'forum_title': settings.forum_name}

        # swap address with new one so email is sent to new address
        request.user.email = form.cleaned_data['new_email']

        mail_user(request, request.user, mail_subject,
                  'misago/emails/change_email', {'token': token})

        message = _("E-mail change confirmation link was sent to new address.")
        return Response({'detail': message})
    else:
        return Response(form.errors, status=status.HTTP_400_BAD_REQUEST)
Exemplo n.º 27
0
def send_welcome_email(request, user):
    mail_subject = _("Welcome on %(forum_name)s forums!")
    mail_subject = mail_subject % {'forum_name': settings.forum_name}

    if user.requires_activation:
        activation_token = make_activation_token(user)

        activation_by_admin = user.requires_activation_by_admin
        activation_by_user = user.requires_activation_by_user

        mail_user(
            request, user, mail_subject, 'misago/emails/register/inactive', {
                'activation_token': activation_token,
                'activation_by_admin': activation_by_admin,
                'activation_by_user': activation_by_user,
            })
    else:
        mail_user(request, user, mail_subject,
                  'misago/emails/register/complete')
Exemplo n.º 28
0
def change_email_endpoint(request, pk=None):
    form = ChangeEmailForm(request.data, user=request.user)
    if form.is_valid():
        token = store_new_credential(
            request, 'email', form.cleaned_data['new_email'])

        mail_subject = _("Confirm e-mail change on %(forum_title)s forums")
        mail_subject = mail_subject % {'forum_title': settings.forum_name}

        # swap address with new one so email is sent to new address
        request.user.email = form.cleaned_data['new_email']

        mail_user(request, request.user, mail_subject,
                  'misago/emails/change_email',
                  {'token': token})

        message = _("E-mail change confirmation link was sent to new address.")
        return Response({'detail': message})
    else:
        return Response(form.errors, status=status.HTTP_400_BAD_REQUEST)
Exemplo n.º 29
0
def change_password_endpoint(request, pk=None):
    serializer = ChangePasswordSerializer(data=request.data,
                                          context={'user': request.user})

    if serializer.is_valid():
        token = store_new_credential(request, 'password',
                                     serializer.validated_data['new_password'])

        mail_subject = _("Confirm password change on %(forum_name)s forums")
        mail_subject = mail_subject % {'forum_name': settings.forum_name}

        mail_user(request, request.user, mail_subject,
                  'misago/emails/change_password', {'token': token})

        return Response({
            'detail':
            _("Password change confirmation link was sent to your address.")
        })
    else:
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Exemplo n.º 30
0
def change_email_endpoint(request, pk=None):
    serializer = ChangeEmailSerializer(
        data=request.data,
        context={'user': request.user},
    )

    serializer.is_valid(raise_exception=True)

    token = store_new_credential(request, 'email',
                                 serializer.validated_data['new_email'])

    mail_subject = _("Confirm e-mail change on %(forum_name)s forums")
    mail_subject = mail_subject % {'forum_name': settings.forum_name}

    # swap address with new one so email is sent to new address
    request.user.email = serializer.validated_data['new_email']

    mail_user(request, request.user, mail_subject,
              'misago/emails/change_email', {'token': token})

    return Response(status=204)
Exemplo n.º 31
0
def send_activation(request):
    form = ResendActivationForm(request.data)
    if form.is_valid():
        requesting_user = form.user_cache

        mail_subject = _("Activate %(user)s account "
                         "on %(forum_title)s forums")
        subject_formats = {'user': requesting_user.username,
                           'forum_title': settings.forum_name}
        mail_subject = mail_subject % subject_formats

        mail_user(request, requesting_user, mail_subject,
                  'misago/emails/activation/by_user',
                  {'activation_token': make_activation_token(requesting_user)})

        return Response({
                'username': form.user_cache.username,
                'email': form.user_cache.email
            })
    else:
        return Response(form.get_errors_dict(),
                        status=status.HTTP_400_BAD_REQUEST)
Exemplo n.º 32
0
def send_activation(request):
    form = ResendActivationForm(request.data)
    if form.is_valid():
        requesting_user = form.user_cache

        mail_subject = _("Activate %(user)s account "
                         "on %(forum_title)s forums")
        subject_formats = {'user': requesting_user.username,
                           'forum_title': settings.forum_name}
        mail_subject = mail_subject % subject_formats

        mail_user(request, requesting_user, mail_subject,
                  'misago/emails/activation/by_user',
                  {'activation_token': make_activation_token(requesting_user)})

        return Response({
                'username': form.user_cache.username,
                'email': form.user_cache.email
            })
    else:
        return Response(form.get_errors_dict(),
                        status=status.HTTP_400_BAD_REQUEST)
Exemplo n.º 33
0
def request_activation(request):
    form = ResendActivationForm()

    if request.method == 'POST':
        form = ResendActivationForm(request.POST)
        if form.is_valid():
            requesting_user = form.user_cache
            request.session['activation_sent_to'] = requesting_user.pk

            mail_subject = _("Account activation on %(forum_title)s forums")
            mail_subject = mail_subject % {'forum_title': settings.forum_name}

            activation_token = make_activation_token(requesting_user)

            mail_user(
                request, requesting_user, mail_subject,
                'misago/emails/activation/by_user',
                {'activation_token': activation_token})

            return redirect('misago:activation_sent')

    return render(request, 'misago/activation/request.html',
                  {'form': form})
Exemplo n.º 34
0
def register(request):
    SecuredForm = add_captcha_to_form(RegisterForm, request)

    form = SecuredForm()
    if request.method == 'POST':
        form = SecuredForm(request.POST)
        if form.is_valid():
            try:
                validate_new_registration(
                    request.user.ip,
                    form.cleaned_data['username'],
                    form.cleaned_data['email'])
            except PermissionDenied as e:
                staff_message = _("This ban was automatically imposed on "
                                  "%(date)s due to denied register attempt.")

                message_formats = {'date': date_format(timezone.now())}
                staff_message = staff_message % message_formats
                ban_ip(request.user.ip, staff_message=staff_message, length=1)
                raise e

            activation_kwargs = {}
            if settings.account_activation == 'user':
                activation_kwargs = {
                    'requires_activation': ACTIVATION_REQUIRED_USER
                }
            elif settings.account_activation == 'admin':
                activation_kwargs = {
                    'requires_activation': ACTIVATION_REQUIRED_ADMIN
                }

            User = get_user_model()
            new_user = User.objects.create_user(form.cleaned_data['username'],
                                                form.cleaned_data['email'],
                                                form.cleaned_data['password'],
                                                set_default_avatar=True,
                                                **activation_kwargs)

            mail_subject = _("Welcome on %(forum_title)s forums!")
            mail_subject = mail_subject % {'forum_title': settings.forum_name}

            if settings.account_activation == 'none':
                authenticated_user = authenticate(
                    username=new_user.email,
                    password=form.cleaned_data['password'])
                login(request, authenticated_user)

                welcome_message = _("Welcome aboard, %(user)s!")
                welcome_message = welcome_message % {'user': new_user.username}
                messages.success(request, welcome_message)

                mail_user(request, new_user, mail_subject,
                          'misago/emails/register/complete')

                return redirect(settings.LOGIN_REDIRECT_URL)
            else:
                activation_token = make_activation_token(new_user)

                activation_by_admin = new_user.requires_activation_by_admin
                activation_by_user = new_user.requires_activation_by_user

                mail_user(
                    request, new_user, mail_subject,
                    'misago/emails/register/inactive',
                    {
                        'activation_token': activation_token,
                        'activation_by_admin': activation_by_admin,
                        'activation_by_user': activation_by_user,
                    })

                request.session['registered_user'] = new_user.pk
                return redirect('misago:register_completed')

    return render(request, 'misago/register/form.html', {'form': form})
Exemplo n.º 35
0
def create_endpoint(request):
    if settings.account_activation == 'closed':
        raise PermissionDenied(_("New users registrations are currently closed."))

    form = RegisterForm(request.data, request=request)

    try:
        if form.is_valid():
            captcha.test_request(request)
    except ValidationError as e:
        form.add_error('captcha', e)

    if not form.is_valid():
        return Response(form.errors, status=status.HTTP_400_BAD_REQUEST)

    activation_kwargs = {}
    if settings.account_activation == 'user':
        activation_kwargs = {'requires_activation': UserModel.ACTIVATION_USER}
    elif settings.account_activation == 'admin':
        activation_kwargs = {'requires_activation': UserModel.ACTIVATION_ADMIN}

    try:
        new_user = UserModel.objects.create_user(
            form.cleaned_data['username'],
            form.cleaned_data['email'],
            form.cleaned_data['password'],
            joined_from_ip=request.user_ip,
            set_default_avatar=True,
            **activation_kwargs
        )
    except IntegrityError:
        return Response(
            {
                '__all__': _("Please try resubmitting the form.")
            },
            status=status.HTTP_400_BAD_REQUEST,
        )

    mail_subject = _("Welcome on %(forum_name)s forums!")
    mail_subject = mail_subject % {'forum_name': settings.forum_name}

    if settings.account_activation == 'none':
        authenticated_user = authenticate(
            username=new_user.email, password=form.cleaned_data['password']
        )
        login(request, authenticated_user)

        mail_user(request, new_user, mail_subject, 'misago/emails/register/complete')

        return Response({
            'activation': 'active',
            'username': new_user.username,
            'email': new_user.email
        })
    else:
        activation_token = make_activation_token(new_user)

        activation_by_admin = new_user.requires_activation_by_admin
        activation_by_user = new_user.requires_activation_by_user

        mail_user(
            request, new_user, mail_subject, 'misago/emails/register/inactive', {
                'activation_token': activation_token,
                'activation_by_admin': activation_by_admin,
                'activation_by_user': activation_by_user,
            }
        )

        if activation_by_admin:
            activation_method = 'admin'
        else:
            activation_method = 'user'

        return Response({
            'activation': activation_method,
            'username': new_user.username,
            'email': new_user.email
        })
Exemplo n.º 36
0
def register(request):
    SecuredForm = add_captcha_to_form(RegisterForm, request)

    form = SecuredForm()
    if request.method == 'POST':
        form = SecuredForm(request.POST)
        if form.is_valid():
            try:
                validate_new_registration(request.user.ip,
                                          form.cleaned_data['username'],
                                          form.cleaned_data['email'])
            except PermissionDenied as e:
                staff_message = _("This ban was automatically imposed on "
                                  "%(date)s due to denied register attempt.")

                message_formats = {'date': date_format(timezone.now())}
                staff_message = staff_message % message_formats
                ban_ip(request.user.ip,
                       staff_message=staff_message,
                       length={'days': 1})
                raise e

            activation_kwargs = {}
            if settings.account_activation == 'user':
                activation_kwargs = {
                    'requires_activation': ACTIVATION_REQUIRED_USER
                }
            elif settings.account_activation == 'admin':
                activation_kwargs = {
                    'requires_activation': ACTIVATION_REQUIRED_ADMIN
                }

            User = get_user_model()
            new_user = User.objects.create_user(form.cleaned_data['username'],
                                                form.cleaned_data['email'],
                                                form.cleaned_data['password'],
                                                set_default_avatar=True,
                                                **activation_kwargs)

            mail_subject = _("Welcome on %(forum_title)s forums!")
            mail_subject = mail_subject % {'forum_title': settings.forum_name}

            if settings.account_activation == 'none':
                authenticated_user = authenticate(
                    username=new_user.email,
                    password=form.cleaned_data['password'])
                login(request, authenticated_user)

                welcome_message = _("Welcome aboard, %(user)s!")
                welcome_message = welcome_message % {'user': new_user.username}
                messages.success(request, welcome_message)

                mail_user(request, new_user, mail_subject,
                          'misago/emails/register/complete')

                return redirect(settings.LOGIN_REDIRECT_URL)
            else:
                activation_token = make_activation_token(new_user)

                activation_by_admin = new_user.requires_activation_by_admin
                activation_by_user = new_user.requires_activation_by_user

                mail_user(
                    request, new_user, mail_subject,
                    'misago/emails/register/inactive', {
                        'activation_token': activation_token,
                        'activation_by_admin': activation_by_admin,
                        'activation_by_user': activation_by_user,
                    })

                request.session['registered_user'] = new_user.pk
                return redirect('misago:register_completed')

    return render(request, 'misago/register/form.html', {'form': form})
Exemplo n.º 37
0
def create_endpoint(request):
    if settings.account_activation == 'closed':
        raise PermissionDenied(_("New users registrations are currently closed."))

    ban = get_ip_ban(request.user_ip, registration_only=True)
    if ban:
        raise Banned(ban)

    serializer = RegisterUserSerializer(
        data=request.data,
        context={'request': request},
    )

    serializer.is_valid(raise_exception=True)

    activation_kwargs = {}
    if settings.account_activation == 'user':
        activation_kwargs = {'requires_activation': UserModel.ACTIVATION_USER}
    elif settings.account_activation == 'admin':
        activation_kwargs = {'requires_activation': UserModel.ACTIVATION_ADMIN}

    try:
        new_user = UserModel.objects.create_user(
            serializer.validated_data['username'],
            serializer.validated_data['email'],
            serializer.validated_data['password'],
            joined_from_ip=request.user_ip,
            set_default_avatar=True,
            **activation_kwargs
        )
    except IntegrityError:
        return Response(
            {
                'detail': _("Please try resubmitting the form."),
            },
            status=400,
        )

    mail_subject = _("Welcome on %(forum_name)s forums!")
    mail_subject = mail_subject % {'forum_name': settings.forum_name}

    if settings.account_activation == 'none':
        authenticated_user = authenticate(
            username=new_user.email,
            password=serializer.validated_data['password'],
        )
        login(request, authenticated_user)

        mail_user(request, new_user, mail_subject, 'misago/emails/register/complete')

        return Response({
            'activation': None,
            'username': new_user.username,
            'email': new_user.email
        })
    else:
        activation_token = make_activation_token(new_user)

        activation_by_admin = new_user.requires_activation_by_admin
        activation_by_user = new_user.requires_activation_by_user

        mail_user(
            request, new_user, mail_subject, 'misago/emails/register/inactive', {
                'activation_token': activation_token,
                'activation_by_admin': activation_by_admin,
                'activation_by_user': activation_by_user,
            }
        )

        if activation_by_admin:
            activation_method = 'admin'
        else:
            activation_method = 'user'

        return Response({
            'activation': activation_method,
            'username': new_user.username,
            'email': new_user.email
        })
Exemplo n.º 38
0
def create_endpoint(request):
    if settings.account_activation == 'closed':
        raise PermissionDenied(
            _("New users registrations are currently closed."))

    form = RegisterForm(request.data)

    try:
        captcha.test_request(request)
    except forms.ValidationError as e:
        form.add_error('captcha', e)

    if not form.is_valid():
        return Response(form.errors, status=status.HTTP_400_BAD_REQUEST)

    try:
        validate_new_registration(request.user_ip,
                                  form.cleaned_data['username'],
                                  form.cleaned_data['email'])
    except PermissionDenied:
        staff_message = _("This ban was automatically imposed on "
                          "%(date)s due to denied registration attempt.")

        message_formats = {'date': date_format(timezone.now())}
        staff_message = staff_message % message_formats
        ban_ip(request.user_ip,
               staff_message=staff_message,
               length={'days': 14})

        raise PermissionDenied(
            _("Your IP address is banned from registering on this site."))

    activation_kwargs = {}
    if settings.account_activation == 'user':
        activation_kwargs = {'requires_activation': ACTIVATION_REQUIRED_USER}
    elif settings.account_activation == 'admin':
        activation_kwargs = {'requires_activation': ACTIVATION_REQUIRED_ADMIN}

    User = get_user_model()
    new_user = User.objects.create_user(form.cleaned_data['username'],
                                        form.cleaned_data['email'],
                                        form.cleaned_data['password'],
                                        joined_from_ip=request.user_ip,
                                        set_default_avatar=True,
                                        **activation_kwargs)

    mail_subject = _("Welcome on %(forum_title)s forums!")
    mail_subject = mail_subject % {'forum_title': settings.forum_name}

    if settings.account_activation == 'none':
        authenticated_user = authenticate(
            username=new_user.email, password=form.cleaned_data['password'])
        login(request, authenticated_user)

        mail_user(request, new_user, mail_subject,
                  'misago/emails/register/complete')

        return Response({
            'activation': 'active',
            'username': new_user.username,
            'email': new_user.email
        })
    else:
        activation_token = make_activation_token(new_user)

        activation_by_admin = new_user.requires_activation_by_admin
        activation_by_user = new_user.requires_activation_by_user

        mail_user(
            request, new_user, mail_subject, 'misago/emails/register/inactive',
            {
                'activation_token': activation_token,
                'activation_by_admin': activation_by_admin,
                'activation_by_user': activation_by_user,
            })

        if activation_by_admin:
            activation_method = 'admin'
        else:
            activation_method = 'user'

        return Response({
            'activation': activation_method,
            'username': new_user.username,
            'email': new_user.email
        })
Exemplo n.º 39
0
def create_endpoint(request):
    if settings.account_activation == 'closed':
        raise PermissionDenied(
            _("New users registrations are currently closed."))

    form = RegisterForm(request.data)

    try:
        captcha.test_request(request)
    except forms.ValidationError as e:
        form.add_error('captcha', e)

    if not form.is_valid():
        return Response(form.errors, status=status.HTTP_400_BAD_REQUEST)

    try:
        validate_new_registration(
            request.user_ip,
            form.cleaned_data['username'],
            form.cleaned_data['email'])
    except PermissionDenied:
        staff_message = _("This ban was automatically imposed on "
                          "%(date)s due to denied registration attempt.")

        message_formats = {'date': date_format(timezone.now())}
        staff_message = staff_message % message_formats
        ban_ip(
            request.user_ip,
            staff_message=staff_message,
            length={'days': 14}
        )

        raise PermissionDenied(
            _("Your IP address is banned from registering on this site."))

    activation_kwargs = {}
    if settings.account_activation == 'user':
        activation_kwargs = {
            'requires_activation': ACTIVATION_REQUIRED_USER
        }
    elif settings.account_activation == 'admin':
        activation_kwargs = {
            'requires_activation': ACTIVATION_REQUIRED_ADMIN
        }

    User = get_user_model()
    new_user = User.objects.create_user(form.cleaned_data['username'],
                                        form.cleaned_data['email'],
                                        form.cleaned_data['password'],
                                        joined_from_ip=request.user_ip,
                                        set_default_avatar=True,
                                        **activation_kwargs)

    mail_subject = _("Welcome on %(forum_name)s forums!")
    mail_subject = mail_subject % {'forum_name': settings.forum_name}

    if settings.account_activation == 'none':
        authenticated_user = authenticate(
            username=new_user.email,
            password=form.cleaned_data['password'])
        login(request, authenticated_user)

        mail_user(request, new_user, mail_subject,
                  'misago/emails/register/complete')

        return Response({
            'activation': 'active',
            'username': new_user.username,
            'email': new_user.email
        })
    else:
        activation_token = make_activation_token(new_user)

        activation_by_admin = new_user.requires_activation_by_admin
        activation_by_user = new_user.requires_activation_by_user

        mail_user(
            request, new_user, mail_subject,
            'misago/emails/register/inactive',
            {
                'activation_token': activation_token,
                'activation_by_admin': activation_by_admin,
                'activation_by_user': activation_by_user,
            })

        if activation_by_admin:
            activation_method = 'admin'
        else:
            activation_method = 'user'

        return Response({
            'activation': activation_method,
            'username': new_user.username,
            'email': new_user.email
        })