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)
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)
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)
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
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)
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
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)