Example #1
0
def user_settings(request, post_change_redirect=None):
    user = request.user

    if post_change_redirect is None:
        post_change_redirect = reverse('apps.user_settings.views.user_settings')

    if request.method == 'POST':
        resp = HttpResponseRedirect(post_change_redirect)

        pw_form = PasswordChangeForm(user, data=request.POST)
        email_form = EmailChangeForm(user=user, data=request.POST)
        subscription_form = SubscriptionForm(user=user, data=request.POST)
        https_form = SecureOnlyForm(request.user, request.COOKIES, http_response=resp, data=request.POST)
        browsing_form = BrowsingSettingsForm(user, data=request.POST)
        connections_form = ConnectionsForm(user, data=request.POST)
        all_forms = [pw_form, email_form, subscription_form, https_form, browsing_form, connections_form]
        views.handle_unsubscribe_post(user, request.REQUEST, request)

        if all(form.is_valid() for form in all_forms):
            for form in all_forms:
                form.save()

            if pw_form.password_changed():
                request.session['password_updated'] = True
            return resp

    else:
        pw_form = PasswordChangeForm(user)
        email_form = EmailChangeForm(user=user)
        subscription_form = SubscriptionForm(user=user, initial={
            'newsletter': not EmailUnsubscribe.objects.get_or_none(email=user.email),
        })
        https_form = SecureOnlyForm(user, request.COOKIES)
        browsing_form = BrowsingSettingsForm(user)
        connections_form = ConnectionsForm(user)
        all_forms = [pw_form, email_form, subscription_form, https_form, browsing_form, connections_form]

    context = {
        'pw_form': pw_form,
        'email_form': email_form,
        'subscription_form': subscription_form,
        'https_form': https_form,
        'browsing_form': browsing_form,
        'all_forms': all_forms,
        'connections_form': connections_form,
        'is_staff': request.user.is_staff,
        'email_confirmation': EmailConfirmation.objects.get_or_none(user=user),
        'unsubscribed_settings': views.get_unsubscriptions(user),
    }

    def handle_updated_field(name):
        if request.session.get(name, False):
            context[name] = True
            del request.session[name]

    map(handle_updated_field, ['email_updated', 'password_updated'])

    return render_to_response('user/settings.django.html', context,
                              context_instance=RequestContext(request))
    def validate_unsubscript(self, actions_dict, canvas_user=None, all_actions=None):
        if not canvas_user:
            canvas_user = create_user()
        if not all_actions:
            all_actions = EmailChannel.all_handled_actions()

        request = FakeRequest()
        views.handle_unsubscribe_post(canvas_user, actions_dict, request)
        unsubscriptions = views.get_unsubscriptions(canvas_user, all_actions)
        for action in all_actions:
            if action == 'newsletter':
                continue
            value = action
            if action == "ALL":
                value = not action
            if actions_dict.get(action) == "on":
                assert not unsubscriptions.get(value)
            else:
                assert unsubscriptions.get(value)
        return unsubscriptions
    def test_granualr_unsubscribe_blanket_ban(self):
        all_actions = EmailChannel.all_handled_actions()
        # ALL has inverted semantics ... make sure it works.
        all_actions.append("ALL")
        # Reuse the same user
        canvas_user = create_user()
        action = "ALL"
        actions_dict = {action: "on"}
        unsubscriptions = self.validate_unsubscript(actions_dict, canvas_user, all_actions)
        for action in all_actions:
            # Ensure that we unsubscribed from all of them!
            assert unsubscriptions.get(action)

        action = "ALL"
        # Remove blanket subscription
        actions_dict = {}
        request = FakeRequest()
        views.handle_unsubscribe_post(canvas_user, actions_dict, request)
        unsubscriptions = views.get_unsubscriptions(canvas_user, all_actions)
        for action in all_actions:
            # Ensure that the user is now subscribed for everything, which is the default without the blanket ban.
            assert not unsubscriptions.get(action)
Example #4
0
    def validate_unsubscript(self,
                             actions_dict,
                             canvas_user=None,
                             all_actions=None):
        if not canvas_user:
            canvas_user = create_user()
        if not all_actions:
            all_actions = EmailChannel.all_handled_actions()

        request = FakeRequest()
        views.handle_unsubscribe_post(canvas_user, actions_dict, request)
        unsubscriptions = views.get_unsubscriptions(canvas_user, all_actions)
        for action in all_actions:
            if action == 'newsletter':
                continue
            value = action
            if action == "ALL":
                value = not action
            if actions_dict.get(action) == "on":
                assert not unsubscriptions.get(value)
            else:
                assert unsubscriptions.get(value)
        return unsubscriptions
Example #5
0
    def test_granualr_unsubscribe_blanket_ban(self):
        all_actions = EmailChannel.all_handled_actions()
        # ALL has inverted semantics ... make sure it works.
        all_actions.append("ALL")
        # Reuse the same user
        canvas_user = create_user()
        action = "ALL"
        actions_dict = {action: "on"}
        unsubscriptions = self.validate_unsubscript(actions_dict, canvas_user,
                                                    all_actions)
        for action in all_actions:
            # Ensure that we unsubscribed from all of them!
            assert unsubscriptions.get(action)

        action = "ALL"
        # Remove blanket subscription
        actions_dict = {}
        request = FakeRequest()
        views.handle_unsubscribe_post(canvas_user, actions_dict, request)
        unsubscriptions = views.get_unsubscriptions(canvas_user, all_actions)
        for action in all_actions:
            # Ensure that the user is now subscribed for everything, which is the default without the blanket ban.
            assert not unsubscriptions.get(action)