HEX
Server: LiteSpeed
System: Linux houston.panomity.com 6.8.0-100-generic #100-Ubuntu SMP PREEMPT_DYNAMIC Tue Jan 13 16:40:06 UTC 2026 x86_64
User: nudepix (1011)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: //usr/local/CyberCP/webmail/models.py
from django.db import models


class WebmailSession(models.Model):
    session_key = models.CharField(max_length=64, unique=True)
    email_account = models.CharField(max_length=200)
    created_at = models.DateTimeField(auto_now_add=True)
    last_active = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = 'wm_sessions'

    def __str__(self):
        return '%s (%s)' % (self.email_account, self.session_key[:8])


class Contact(models.Model):
    owner_email = models.CharField(max_length=200, db_index=True)
    display_name = models.CharField(max_length=200, blank=True, default='')
    email_address = models.CharField(max_length=200)
    phone = models.CharField(max_length=50, blank=True, default='')
    organization = models.CharField(max_length=200, blank=True, default='')
    notes = models.TextField(blank=True, default='')
    is_auto_collected = models.BooleanField(default=False)
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        db_table = 'wm_contacts'
        unique_together = ('owner_email', 'email_address')

    def __str__(self):
        return '%s <%s>' % (self.display_name, self.email_address)


class ContactGroup(models.Model):
    owner_email = models.CharField(max_length=200, db_index=True)
    name = models.CharField(max_length=100)

    class Meta:
        db_table = 'wm_contact_groups'
        unique_together = ('owner_email', 'name')

    def __str__(self):
        return self.name


class ContactGroupMembership(models.Model):
    contact = models.ForeignKey(Contact, on_delete=models.CASCADE)
    group = models.ForeignKey(ContactGroup, on_delete=models.CASCADE)

    class Meta:
        db_table = 'wm_contact_group_members'
        unique_together = ('contact', 'group')


class WebmailSettings(models.Model):
    email_account = models.CharField(max_length=200, primary_key=True)
    display_name = models.CharField(max_length=200, blank=True, default='')
    signature_html = models.TextField(blank=True, default='')
    messages_per_page = models.IntegerField(default=25)
    default_reply_behavior = models.CharField(max_length=20, default='reply',
                                              choices=[('reply', 'Reply'),
                                                       ('reply_all', 'Reply All')])
    theme_preference = models.CharField(max_length=20, default='auto',
                                        choices=[('light', 'Light'),
                                                 ('dark', 'Dark'),
                                                 ('auto', 'Auto')])
    auto_collect_contacts = models.BooleanField(default=True)

    class Meta:
        db_table = 'wm_settings'

    def __str__(self):
        return self.email_account


class SieveRule(models.Model):
    email_account = models.CharField(max_length=200, db_index=True)
    name = models.CharField(max_length=200)
    priority = models.IntegerField(default=0)
    is_active = models.BooleanField(default=True)
    condition_field = models.CharField(max_length=50,
                                       choices=[('from', 'From'),
                                                ('to', 'To'),
                                                ('subject', 'Subject'),
                                                ('size', 'Size')])
    condition_type = models.CharField(max_length=50,
                                      choices=[('contains', 'Contains'),
                                               ('is', 'Is'),
                                               ('matches', 'Matches'),
                                               ('greater_than', 'Greater than')])
    condition_value = models.CharField(max_length=500)
    action_type = models.CharField(max_length=50,
                                   choices=[('move', 'Move to folder'),
                                            ('forward', 'Forward to'),
                                            ('discard', 'Discard'),
                                            ('flag', 'Flag')])
    action_value = models.CharField(max_length=500, blank=True, default='')
    sieve_script = models.TextField(blank=True, default='')

    class Meta:
        db_table = 'wm_sieve_rules'
        ordering = ['priority']

    def __str__(self):
        return '%s: %s' % (self.email_account, self.name)