Пример #1
0
    def test_welcome_mail_for_unverified_email(self):
        Switch.objects.get_or_create(name='welcome_email', active=True)
        testuser = user(username='******', email='*****@*****.**',
                        password='******', save=True)
        email_address = EmailAddress.objects.create(user=testuser,
                                                    email='*****@*****.**',
                                                    verified=False)
        request = self.rf.get('/')
        request.LANGUAGE_CODE = 'en-US'

        # emulate the phase in which the request for email confirmation is
        # sent as the user's email address is not verified
        confirmation = EmailConfirmationHMAC(email_address)
        confirmation.send()

        # only one email, the confirmation email is sent
        self.assertEqual(len(mail.outbox), 1)
        confirm_email = mail.outbox[0]
        expected_to = [email_address.email]
        self.assertEqual(expected_to, confirm_email.to)
        self.assertTrue('Confirm' in confirm_email.subject)

        # Click on a similar confirm link (HMAC has timestamp, changes)
        link = reverse('account_confirm_email', locale='en-US', args=[confirmation.key])
        resp = self.client.get(link)
        assert resp.status_code == 200
        resp = self.client.post(link, follow=True)
        assert resp.status_code == 200

        # a second email, the welcome email, is sent
        self.assertEqual(len(mail.outbox), 2)
        welcome_email = mail.outbox[1]
        expected_to = [email_address.email]
        self.assertEqual(expected_to, welcome_email.to)
        self.assertTrue('utm_campaign=welcome' in welcome_email.body)

        # now add second unverified email address to the user
        # and check if the usual confirmation email is sent out
        email_address2 = EmailAddress.objects.create(user=testuser,
                                                     email='*****@*****.**',
                                                     verified=False)
        confirmation2 = EmailConfirmationHMAC(email_address2)
        confirmation2.send()
        self.assertEqual(len(mail.outbox), 3)
        confirm_email2 = mail.outbox[2]
        expected_to = [email_address2.email]
        self.assertEqual(expected_to, confirm_email2.to)
        self.assertTrue('Confirm' in confirm_email2.subject)

        # Confirm the second email address
        link2 = reverse('account_confirm_email', locale='en-US',
                        args=[confirmation2.key])
        resp = self.client.get(link2)
        assert resp.status_code == 200
        resp = self.client.post(link2, follow=True)
        assert resp.status_code == 200

        # no increase in number of emails (no 2nd welcome email)
        self.assertEqual(len(mail.outbox), 3)
        self.assertTrue('Confirm' in mail.outbox[2].subject)
Пример #2
0
 def test_email_confirmation_hmac_timeout(self):
     user = self._create_user()
     email = EmailAddress.objects.create(
         user=user, email="*****@*****.**", verified=False, primary=True
     )
     confirmation = EmailConfirmationHMAC(email)
     confirmation.send()
     self.assertEqual(len(mail.outbox), 1)
     self.client.post(reverse("account_confirm_email", args=[confirmation.key]))
     email = EmailAddress.objects.get(pk=email.pk)
     self.assertFalse(email.verified)
Пример #3
0
 def test_email_confirmation_hmac_timeout(self):
     user = self._create_user()
     email = EmailAddress.objects.create(
         user=user,
         email='*****@*****.**',
         verified=False,
         primary=True)
     confirmation = EmailConfirmationHMAC(email)
     confirmation.send()
     self.assertEqual(len(mail.outbox), 1)
     self.client.post(
         reverse('account_confirm_email',
                 args=[confirmation.key]))
     email = EmailAddress.objects.get(pk=email.pk)
     self.assertFalse(email.verified)
Пример #4
0
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)

        if not EmailAddress.objects.filter(user=self.request.user,
                                           verified=True).exists():
            user_email_address = EmailAddress.objects.get(
                user=self.request.user)
            user_email_confirmation = EmailConfirmationHMAC(
                email_address=user_email_address)
            user_email_confirmation.send(self.request, False)

        context["verified"] = EmailAddress.objects.filter(
            user=self.request.user, verified=True).exists()

        return context
Пример #5
0
    def form_valid(self, form):
        org = form.save()
        # by default, make the user creating the org the admin
        admin = Membership(member=self.request.user, organization=org,)
        admin.save()

        email_content = (
            "Dear Representable Team, "
            + self.request.user.email
            + " signed up to create an organization called "
            + org.name
            + ", in the state(s) of "
            + str(org.states)
            + " Their organization description: "
            + org.description
            + "."
        )

        send_mail(
            "[Action Required] New Organization Sign-up",
            email_content,
            "*****@*****.**",
            ["*****@*****.**"],
            # ["*****@*****.**"],
            fail_silently=False,
        )

        self.success_url = reverse_lazy(
            "main:thanks_org", kwargs=org.get_url_kwargs()
        )

        if not EmailAddress.objects.filter(
            user=self.request.user, verified=True
        ).exists():

            user_email_address = EmailAddress.objects.get(
                user=self.request.user
            )
            user_email_confirmation = EmailConfirmationHMAC(
                email_address=user_email_address
            )
            user_email_confirmation.send(self.request, False)

        return super().form_valid(form)
Пример #6
0
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)

        has_drive = False
        organization_name = ""
        drive_name = ""
        if kwargs["drive"]:
            has_drive = True
            drive_slug = self.kwargs["drive"]
            drive = Drive.objects.get(slug=drive_slug)
            drive_name = drive.name
            organization = drive.organization
            organization_name = organization.name

        if EmailAddress.objects.filter(
            user=self.request.user, verified=True
        ).exists():
            context["verified"] = True
        else:
            user_email_address = EmailAddress.objects.get(
                user=self.request.user
            )

            user_email_confirmation = EmailConfirmationHMAC(
                email_address=user_email_address
            )

            # default_adapter = adapter.get_adapter()

            # default_adapter.send_confirmation_mail(self.request, user_email_confirmation, False)
            # user_email_address.send_confirmation(None, False)

            user_email_confirmation.send(self.request, False)
            context["verified"] = False

        context["map_url"] = self.kwargs["map_id"]
        context["drive"] = self.kwargs["drive"]
        context["has_drive"] = has_drive
        context["organization_name"] = organization_name
        context["drive_name"] = drive_name

        return context
Пример #7
0
    def test_welcome_mail_for_unverified_email(self):
        Switch.objects.get_or_create(name='welcome_email', active=True)
        testuser = user(username='******',
                        email='*****@*****.**',
                        password='******',
                        save=True)
        email_address = EmailAddress.objects.create(
            user=testuser, email='*****@*****.**', verified=False)
        request = self.rf.get('/')
        request.LANGUAGE_CODE = 'en-US'

        # emulate the phase in which the request for email confirmation is
        # sent as the user's email address is not verified
        confirmation = EmailConfirmationHMAC(email_address)
        confirmation.send()

        # only one email, the confirmation email is sent
        self.assertEqual(len(mail.outbox), 1)
        confirm_email = mail.outbox[0]
        expected_to = [email_address.email]
        self.assertEqual(expected_to, confirm_email.to)
        self.assertTrue('Confirm' in confirm_email.subject)

        # Click on a similar confirm link (HMAC has timestamp, changes)
        link = reverse('account_confirm_email',
                       locale='en-US',
                       args=[confirmation.key])
        resp = self.client.get(link)
        assert resp.status_code == 200
        assert_no_cache_header(resp)
        resp = self.client.post(link)
        assert resp.status_code == 302
        assert_no_cache_header(resp)

        # a second email, the welcome email, is sent
        self.assertEqual(len(mail.outbox), 2)
        welcome_email = mail.outbox[1]
        expected_to = [email_address.email]
        self.assertEqual(expected_to, welcome_email.to)
        self.assertTrue('utm_campaign=welcome' in welcome_email.body)

        # now add second unverified email address to the user
        # and check if the usual confirmation email is sent out
        email_address2 = EmailAddress.objects.create(
            user=testuser, email='*****@*****.**', verified=False)
        confirmation2 = EmailConfirmationHMAC(email_address2)
        confirmation2.send()
        self.assertEqual(len(mail.outbox), 3)
        confirm_email2 = mail.outbox[2]
        expected_to = [email_address2.email]
        self.assertEqual(expected_to, confirm_email2.to)
        self.assertTrue('Confirm' in confirm_email2.subject)

        # Confirm the second email address
        link2 = reverse('account_confirm_email',
                        locale='en-US',
                        args=[confirmation2.key])
        resp = self.client.get(link2)
        assert resp.status_code == 200
        assert_no_cache_header(resp)
        resp = self.client.post(link2)
        assert resp.status_code == 302
        assert_no_cache_header(resp)

        # no increase in number of emails (no 2nd welcome email)
        self.assertEqual(len(mail.outbox), 3)
        self.assertTrue('Confirm' in mail.outbox[2].subject)