gva/gnuviechadmin/managemails/models.py
Jan Dittberner ee46a61e6d add inline editing for mail address targets
- move active flag into managemails.models.ActivateAbleMixin
- refactor Mailbox and Mailaddress to use ActivateAbleMixin
- implement managemails.models.Mailbox.__str__
- add managemails.admin.ActivationChangeMixin to provide activate and
  deactivate actions for model admin classes
- add activate and deactivate actions for managemails.admin.MailboxAdmin
- add managemails.admin.MailAddressAdmin and inlines for MailAddressMailbox and
  MailAddressForward management on the MailAddress management admin page
2014-05-24 14:58:54 +02:00

77 lines
2 KiB
Python

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
@python_2_unicode_compatible
class MailDomain(models.Model):
domain = models.CharField(max_length=128, unique=True)
class Meta:
verbose_name = _('Mail domain')
verbose_name_plural = _('Mail domains')
def __str__(self):
return self.domain
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, models.Model):
username = models.CharField(max_length=128, unique=True)
password = models.CharField(max_length=255)
home = models.CharField(max_length=255)
uid = models.PositiveSmallIntegerField()
gid = models.PositiveSmallIntegerField()
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, 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(models.Model):
mailaddress = models.ForeignKey(MailAddress)
mailbox = models.ForeignKey(Mailbox)
class Meta:
unique_together = ('mailaddress', 'mailbox')
class MailAddressForward(models.Model):
mailaddress = models.ForeignKey(MailAddress)
target = models.EmailField(max_length=254)
class Meta:
unique_together = ('mailaddress', 'target')