Source code for uaccounts.utils

from django.contrib.sites.shortcuts import get_current_site
from django.core.urlresolvers import reverse
from django.template.loader import render_to_string
from django.core.mail import send_mail
from django.utils.html import strip_tags
from django.conf import settings
from django.core.signing import (TimestampSigner,
                                 BadSignature, SignatureExpired)

from uuid import UUID

from uaccounts.models import VerificationCode


[docs]def profile_emails(profile, get_unverified=False): """Return a dict of user profile's emails, divided into primary, rest and optionally unverified. Also pass their total count. """ emails = profile.emails.filter(verified=True).order_by('-primary') result = {'primary': emails[0], 'secondary': emails[1:]} count = len(emails) if get_unverified: result['unverified'] = profile.emails.filter(verified=False) count += len(result['unverified']) result['count'] = count return result
[docs]class VerificationError(Exception): """Failed to verify token."""
[docs]def verification_mail(request, email, subject, template, action): """Delete email's verification code if it exists and then create a new one. Then construct and send the respective email. """ try: email.verification.delete() except VerificationCode.DoesNotExist: pass VerificationCode.objects.create(email=email) email.refresh_from_db() site = get_current_site(request) url = 'http://{}{}'.format(site.domain, reverse('uaccounts:' + action, args=[email.verification.url])) message = render_to_string('uaccounts/{}.txt'.format(template), {'name': site.name, 'url': url}) send_mail('{} {}'.format(site.name, subject), strip_tags(message), settings.DEFAULT_FROM_EMAIL, [email.address], html_message=message)
[docs]def verify_token(token, max_age): """Try to verify token and return the respective VerificationCode instance. Raise VerificationError on failure. """ string = '{}:{}'.format(token[:32], token[32:]) try: token = TimestampSigner().unsign(string, max_age) except (BadSignature, SignatureExpired): raise VerificationError try: return VerificationCode.objects.get(token=UUID(token)) except VerificationCode.DoesNotExist: raise VerificationError