summaryrefslogtreecommitdiff
path: root/pgmailmgr/mailmgr/models.py
blob: f35c70a720a737406965a8ccbd7e6b7e68250e23 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
from django.db import models
from django.http import HttpResponse
from django.contrib.auth.models import User
from django.db.models import signals


class LocalDomain(models.Model):
    local_domain_id = models.AutoField(null=False, primary_key=True)
    domain_name = models.CharField(max_length=100, null=False, blank=False)
    path = models.CharField(max_length=512, null=False, blank=False)
    unix_user = models.IntegerField(null=False, blank=False, default=0)
    unix_group = models.IntegerField(null=False, blank=False, default=0)

    def __str__(self):
        return self.domain_name

    trigger_update = True

    class Meta:
        ordering = ('domain_name',)
        db_table = 'mail"."local_domains'
        managed = False


class Forwarder(models.Model):
    forwarder_id = models.AutoField(null=False, primary_key=True)
    local_part = models.CharField(max_length=100, null=False, blank=False)
    local_domain = models.ForeignKey(LocalDomain, null=False, blank=False, db_column='local_domain_id', on_delete=models.CASCADE)
    remote_name = models.EmailField(max_length=200, null=False, blank=False)

    def __str__(self):
        return "%s@%s -> %s" % (self.local_part, self.local_domain.domain_name, self.remote_name)

    trigger_update = True

    class Meta:
        ordering = ('local_part',)
        db_table = 'mail"."forwarder'
        managed = False


class VirtualUser(models.Model):
    virtual_user_id = models.AutoField(null=False, primary_key=True)
    local_domain = models.ForeignKey(LocalDomain, null=False, blank=False, db_column='local_domain_id', on_delete=models.CASCADE)
    local_part = models.CharField(max_length=100, null=False, blank=False)
    mail_quota = models.IntegerField(null=False, default=500)
    passwd = models.CharField(max_length=100, null=False, blank=False, verbose_name="Password")
    full_name = models.CharField(max_length=200, null=False, blank=True)
    account = models.ForeignKey(User, null=True, blank=True, verbose_name="Connected user", on_delete=models.SET_NULL)

    def __str__(self):
        return "%s@%s (%s)" % (self.local_part, self.local_domain.domain_name, self.full_name or '')

    @property
    def fulladdr(self):
        return "%s@%s" % (self.local_part, self.local_domain.domain_name)

    trigger_update = True

    class Meta:
        ordering = ('local_part',)
        db_table = 'mail"."virtual_user'
        managed = False
        unique_together = ('local_domain', 'local_part', )


class UserPermissions(models.Model):
    user = models.ForeignKey(User, null=False, on_delete=models.CASCADE)
    domain = models.ForeignKey(LocalDomain, null=False, on_delete=models.CASCADE)
    pattern = models.CharField(max_length=100, null=False, blank=False)

    def __str__(self):
        return "%s -> %s pattern '%s'" % (self.user, self.domain, self.pattern)


class Log(models.Model):
    user = models.ForeignKey(User, null=False, on_delete=models.CASCADE)
    when = models.DateTimeField(null=False, auto_now=True)
    what = models.CharField(max_length=2048, null=False, blank=False)

    def __str__(self):
        return "%s (%s): %s" % (self.when, self.user, self.what)

    class Meta:
        ordering = ('-when',)


def pgmail_save_handler(sender, **kwargs):
    if hasattr(sender, 'trigger_update') and sender.trigger_update:
        # Touch a temp file in /tmp/ to inform cronjobs we have
        # changed something.
        with open('/tmp/.mailmgr_update', 'w') as f:
            pass


signals.post_save.connect(pgmail_save_handler)