from django.db import models from django.utils.encoding import python_2_unicode_compatible from django.utils.translation import ugettext as _ from passlib.hash import sha512_crypt from model_utils.models import TimeStampedModel from domains.models import MailDomain from osusers.models import User as OsUser class ActivateAbleMixin(models.Model): """ Mixin for model classes that can be active or inactive. """ active = models.BooleanField(default=True) class Meta: abstract = True @python_2_unicode_compatible class Mailbox(ActivateAbleMixin, TimeStampedModel, models.Model): osuser = models.ForeignKey(OsUser) username = models.CharField(max_length=128, unique=True) password = models.CharField(max_length=255) class Meta: verbose_name = _('Mailbox') verbose_name_plural = _('Mailboxes') def set_password(self, password): self.password = sha512_crypt.encrypt(password) def __str__(self): return self.username @python_2_unicode_compatible class MailAddress(ActivateAbleMixin, TimeStampedModel, models.Model): localpart = models.CharField(max_length=128) domain = models.ForeignKey(MailDomain) class Meta: unique_together = ('localpart', 'domain') verbose_name = _('Mail address') verbose_name_plural = _('Mail addresses') def __str__(self): return "{0}@{1}".format(self.localpart, self.domain) class MailAddressMailbox(TimeStampedModel, models.Model): mailaddress = models.OneToOneField(MailAddress, primary_key=True) mailbox = models.ForeignKey(Mailbox) class Meta: unique_together = ('mailaddress', 'mailbox') class MailAddressForward(TimeStampedModel, models.Model): mailaddress = models.ForeignKey(MailAddress) target = models.EmailField(max_length=254) class Meta: unique_together = ('mailaddress', 'target')