Exemple #1
0
 def assertPrefValid(self, user):
     """Ensure that the correct preference for the user is persisted"""
     pref = UserPreference.objects.get(user=user, key=NOTIFICATION_PREF_KEY)
     self.assertTrue(pref)  # check exists and only 1 (.get)
     # now coerce username to utf-8 encoded str, since we test with non-ascii unicdoe above and
     # the unittest framework has hard time coercing to unicode.
     # decrypt also can't take a unicode input, so coerce its input to str
     self.assertEqual(str(user.username.encode('utf-8')), UsernameCipher().decrypt(str(pref.value)))
Exemple #2
0
    def setUp(self):
        super(OptOutEmailUpdatesViewTest, self).setUp()
        self.user = UserFactory.create(username="******")
        self.token = UsernameCipher.encrypt('testuser1')
        self.request_factory = RequestFactory()
        self.course = CourseFactory.create(run='testcourse1',
                                           display_name='Test Course Title')
        self.url = reverse('bulk_email_opt_out',
                           args=[self.token,
                                 text_type(self.course.id)])

        # Ensure we start with no opt-out records
        self.assertEqual(Optout.objects.count(), 0)
Exemple #3
0
def opt_out_email_updates(request, token, course_id):
    """
    A view that let users opt out of any email updates.

    This meant is meant to be the target of an opt-out link or button.
    The `token` parameter must decrypt to a valid username.
    The `course_id` is the string course key of any course.

    Raises a 404 if there are any errors parsing the input.
    """
    try:
        username = UsernameCipher().decrypt(token.encode())
        user = User.objects.get(username=username)
        course_key = CourseKey.from_string(course_id)
        course = get_course_by_id(course_key, depth=0)
    except UnicodeDecodeError:
        raise Http404("base64url")
    except UsernameDecryptionException as exn:
        raise Http404(text_type(exn))
    except User.DoesNotExist:
        raise Http404("username")
    except InvalidKeyError:
        raise Http404("course")

    context = {
        'course': course,
        'cancelled': False,
        'confirmed': False,
    }

    if request.method == 'POST':
        if request.POST.get('submit') == 'confirm':
            Optout.objects.get_or_create(user=user, course_id=course.id)
            log.info(
                u"User %s (%s) opted out of receiving emails from course %s",
                user.username,
                user.email,
                course_id,
            )
            context['confirmed'] = True
        else:
            context['cancelled'] = True

    return render_to_response('bulk_email/unsubscribe.html', context)