Guest User

Untitled

a guest
Jul 22nd, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.83 KB | None | 0 0
  1. class UserEmail(models.Model):
  2. class Meta:
  3. verbose_name = _('user email')
  4. verbose_name_plural = _('user emails')
  5.  
  6. VERIFIED = 'ALREADY_VERIFIED'
  7.  
  8. objects = UserEmailManager()
  9.  
  10. user = models.ForeignKey(User, null=True, blank=True, verbose_name=_('user'))
  11. default = models.BooleanField(default=False)
  12. email = models.EmailField(unique=True)
  13. verified = models.BooleanField(default=False)
  14. code_creation_date = models.DateTimeField(default=datetime.datetime.now)
  15. verification_key = models.CharField(_('verification key'), max_length=40)
  16.  
  17. def __init__(self, *args, **kwds):
  18. super(UserEmail, self).__init__(*args, **kwds)
  19. self._original_default = self.default
  20.  
  21. def __unicode__(self):
  22. return self.email
  23.  
  24. def save(self, *args, **kwds):
  25. super(UserEmail, self).save(*args, **kwds)
  26. if self.default and not self._original_default:
  27. self.user.email = self.email
  28. self.user.save()
  29. for email in self.__class__.objects.filter(user=self.user):
  30. if email.id != self.id and email.default:
  31. email.default = False
  32. email.save()
  33.  
  34. def make_new_key(self):
  35. self.verification_key = self.__class__.objects.make_random_key(
  36. self.email)
  37. self.code_creation_date = datetime.datetime.now()
  38.  
  39. def send_verification_email(self, first_name=None):
  40. current_site = Site.objects.get_current()
  41.  
  42. subject = render_to_string('accounts/verification_email_subject.txt',
  43. {'site': current_site})
  44. # Email subject *must not* contain newlines
  45. subject = ''.join(subject.splitlines())
  46.  
  47. emails = set()
  48. if self.user is not None:
  49. for email in self.__class__.objects.filter(user=self.user):
  50. emails.add(email.email)
  51. emails.add(self.email)
  52. first_email = len(emails) == 1
  53.  
  54. if first_name is None:
  55. first_name = self.user.first_name
  56.  
  57. message = render_to_string('accounts/verification_email.txt', {
  58. 'verification_key': self.verification_key,
  59. 'expiration_days': email_verification_days(),
  60. 'site': current_site,
  61. 'first_name': first_name,
  62. 'first_email': first_email,
  63. })
  64.  
  65. self.code_creation_date = datetime.datetime.now()
  66.  
  67. django.core.mail.send_mail(subject, message,
  68. settings.DEFAULT_FROM_EMAIL, [self.email])
  69.  
  70.  
  71. def verification_key_expired(self):
  72. expiration_date = datetime.timedelta(days=email_verification_days())
  73. return (self.verification_key == self.VERIFIED or
  74. (self.code_creation_date + expiration_date <= datetime.datetime.now()))
  75.  
  76. verification_key_expired.boolean = True
Add Comment
Please, Sign In to add comment