|
|
@ -369,6 +369,7 @@ class Config(Base):
|
|
|
|
value = db.Column(JSONEncoded)
|
|
|
|
value = db.Column(JSONEncoded)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# TODO: use sqlalchemy.event.listen() on a store method of object?
|
|
|
|
@sqlalchemy.event.listens_for(db.session, 'after_commit')
|
|
|
|
@sqlalchemy.event.listens_for(db.session, 'after_commit')
|
|
|
|
def store_dkim_key(session):
|
|
|
|
def store_dkim_key(session):
|
|
|
|
""" Store DKIM key on commit
|
|
|
|
""" Store DKIM key on commit
|
|
|
@ -437,8 +438,8 @@ class Domain(Base):
|
|
|
|
backref=db.backref('manager_of'), lazy='dynamic')
|
|
|
|
backref=db.backref('manager_of'), lazy='dynamic')
|
|
|
|
max_users = db.Column(db.Integer, nullable=False, default=-1)
|
|
|
|
max_users = db.Column(db.Integer, nullable=False, default=-1)
|
|
|
|
max_aliases = db.Column(db.Integer, nullable=False, default=-1)
|
|
|
|
max_aliases = db.Column(db.Integer, nullable=False, default=-1)
|
|
|
|
max_quota_bytes = db.Column(db.BigInteger(), nullable=False, default=0)
|
|
|
|
max_quota_bytes = db.Column(db.BigInteger, nullable=False, default=0)
|
|
|
|
signup_enabled = db.Column(db.Boolean(), nullable=False, default=False)
|
|
|
|
signup_enabled = db.Column(db.Boolean, nullable=False, default=False)
|
|
|
|
|
|
|
|
|
|
|
|
_dkim_key = None
|
|
|
|
_dkim_key = None
|
|
|
|
_dkim_key_changed = False
|
|
|
|
_dkim_key_changed = False
|
|
|
@ -688,22 +689,22 @@ class User(Base, Email):
|
|
|
|
domain = db.relationship(Domain,
|
|
|
|
domain = db.relationship(Domain,
|
|
|
|
backref=db.backref('users', cascade='all, delete-orphan'))
|
|
|
|
backref=db.backref('users', cascade='all, delete-orphan'))
|
|
|
|
password = db.Column(db.String(255), nullable=False)
|
|
|
|
password = db.Column(db.String(255), nullable=False)
|
|
|
|
quota_bytes = db.Column(db.BigInteger(), nullable=False, default=10**9)
|
|
|
|
quota_bytes = db.Column(db.BigInteger, nullable=False, default=10**9)
|
|
|
|
quota_bytes_used = db.Column(db.BigInteger(), nullable=False, default=0)
|
|
|
|
quota_bytes_used = db.Column(db.BigInteger, nullable=False, default=0)
|
|
|
|
global_admin = db.Column(db.Boolean(), nullable=False, default=False)
|
|
|
|
global_admin = db.Column(db.Boolean, nullable=False, default=False)
|
|
|
|
enabled = db.Column(db.Boolean(), nullable=False, default=True)
|
|
|
|
enabled = db.Column(db.Boolean, nullable=False, default=True)
|
|
|
|
|
|
|
|
|
|
|
|
# Features
|
|
|
|
# Features
|
|
|
|
enable_imap = db.Column(db.Boolean(), nullable=False, default=True)
|
|
|
|
enable_imap = db.Column(db.Boolean, nullable=False, default=True)
|
|
|
|
enable_pop = db.Column(db.Boolean(), nullable=False, default=True)
|
|
|
|
enable_pop = db.Column(db.Boolean, nullable=False, default=True)
|
|
|
|
|
|
|
|
|
|
|
|
# Filters
|
|
|
|
# Filters
|
|
|
|
forward_enabled = db.Column(db.Boolean(), nullable=False, default=False)
|
|
|
|
forward_enabled = db.Column(db.Boolean, nullable=False, default=False)
|
|
|
|
forward_destination = db.Column(CommaSeparatedList(), nullable=True, default=[])
|
|
|
|
forward_destination = db.Column(CommaSeparatedList, nullable=True, default=list)
|
|
|
|
forward_keep = db.Column(db.Boolean(), nullable=False, default=True)
|
|
|
|
forward_keep = db.Column(db.Boolean, nullable=False, default=True)
|
|
|
|
reply_enabled = db.Column(db.Boolean(), nullable=False, default=False)
|
|
|
|
reply_enabled = db.Column(db.Boolean, nullable=False, default=False)
|
|
|
|
reply_subject = db.Column(db.String(255), nullable=True, default=None)
|
|
|
|
reply_subject = db.Column(db.String(255), nullable=True, default=None)
|
|
|
|
reply_body = db.Column(db.Text(), nullable=True, default=None)
|
|
|
|
reply_body = db.Column(db.Text, nullable=True, default=None)
|
|
|
|
reply_startdate = db.Column(db.Date, nullable=False,
|
|
|
|
reply_startdate = db.Column(db.Date, nullable=False,
|
|
|
|
default=date(1900, 1, 1))
|
|
|
|
default=date(1900, 1, 1))
|
|
|
|
reply_enddate = db.Column(db.Date, nullable=False,
|
|
|
|
reply_enddate = db.Column(db.Date, nullable=False,
|
|
|
@ -711,8 +712,8 @@ class User(Base, Email):
|
|
|
|
|
|
|
|
|
|
|
|
# Settings
|
|
|
|
# Settings
|
|
|
|
displayed_name = db.Column(db.String(160), nullable=False, default='')
|
|
|
|
displayed_name = db.Column(db.String(160), nullable=False, default='')
|
|
|
|
spam_enabled = db.Column(db.Boolean(), nullable=False, default=True)
|
|
|
|
spam_enabled = db.Column(db.Boolean, nullable=False, default=True)
|
|
|
|
spam_threshold = db.Column(db.Integer(), nullable=False, default=80)
|
|
|
|
spam_threshold = db.Column(db.Integer, nullable=False, default=80)
|
|
|
|
|
|
|
|
|
|
|
|
# Flask-login attributes
|
|
|
|
# Flask-login attributes
|
|
|
|
is_authenticated = True
|
|
|
|
is_authenticated = True
|
|
|
@ -822,8 +823,8 @@ class Alias(Base, Email):
|
|
|
|
|
|
|
|
|
|
|
|
domain = db.relationship(Domain,
|
|
|
|
domain = db.relationship(Domain,
|
|
|
|
backref=db.backref('aliases', cascade='all, delete-orphan'))
|
|
|
|
backref=db.backref('aliases', cascade='all, delete-orphan'))
|
|
|
|
wildcard = db.Column(db.Boolean(), nullable=False, default=False)
|
|
|
|
wildcard = db.Column(db.Boolean, nullable=False, default=False)
|
|
|
|
destination = db.Column(CommaSeparatedList, nullable=False, default=[])
|
|
|
|
destination = db.Column(CommaSeparatedList, nullable=False, default=list)
|
|
|
|
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
@classmethod
|
|
|
|
def resolve(cls, localpart, domain_name):
|
|
|
|
def resolve(cls, localpart, domain_name):
|
|
|
@ -878,7 +879,7 @@ class Token(Base):
|
|
|
|
_dict_hide = {'user', 'user_email'}
|
|
|
|
_dict_hide = {'user', 'user_email'}
|
|
|
|
_dict_mandatory = {'password'}
|
|
|
|
_dict_mandatory = {'password'}
|
|
|
|
|
|
|
|
|
|
|
|
id = db.Column(db.Integer(), primary_key=True)
|
|
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
|
|
user_email = db.Column(db.String(255), db.ForeignKey(User.email),
|
|
|
|
user_email = db.Column(db.String(255), db.ForeignKey(User.email),
|
|
|
|
nullable=False)
|
|
|
|
nullable=False)
|
|
|
|
user = db.relationship(User,
|
|
|
|
user = db.relationship(User,
|
|
|
@ -908,18 +909,18 @@ class Fetch(Base):
|
|
|
|
_dict_mandatory = {'protocol', 'host', 'port', 'username', 'password'}
|
|
|
|
_dict_mandatory = {'protocol', 'host', 'port', 'username', 'password'}
|
|
|
|
_dict_secret = {'password'}
|
|
|
|
_dict_secret = {'password'}
|
|
|
|
|
|
|
|
|
|
|
|
id = db.Column(db.Integer(), primary_key=True)
|
|
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
|
|
user_email = db.Column(db.String(255), db.ForeignKey(User.email),
|
|
|
|
user_email = db.Column(db.String(255), db.ForeignKey(User.email),
|
|
|
|
nullable=False)
|
|
|
|
nullable=False)
|
|
|
|
user = db.relationship(User,
|
|
|
|
user = db.relationship(User,
|
|
|
|
backref=db.backref('fetches', cascade='all, delete-orphan'))
|
|
|
|
backref=db.backref('fetches', cascade='all, delete-orphan'))
|
|
|
|
protocol = db.Column(db.Enum('imap', 'pop3'), nullable=False)
|
|
|
|
protocol = db.Column(db.Enum('imap', 'pop3'), nullable=False)
|
|
|
|
host = db.Column(db.String(255), nullable=False)
|
|
|
|
host = db.Column(db.String(255), nullable=False)
|
|
|
|
port = db.Column(db.Integer(), nullable=False)
|
|
|
|
port = db.Column(db.Integer, nullable=False)
|
|
|
|
tls = db.Column(db.Boolean(), nullable=False, default=False)
|
|
|
|
tls = db.Column(db.Boolean, nullable=False, default=False)
|
|
|
|
username = db.Column(db.String(255), nullable=False)
|
|
|
|
username = db.Column(db.String(255), nullable=False)
|
|
|
|
password = db.Column(db.String(255), nullable=False)
|
|
|
|
password = db.Column(db.String(255), nullable=False)
|
|
|
|
keep = db.Column(db.Boolean(), nullable=False, default=False)
|
|
|
|
keep = db.Column(db.Boolean, nullable=False, default=False)
|
|
|
|
last_check = db.Column(db.DateTime, nullable=True)
|
|
|
|
last_check = db.Column(db.DateTime, nullable=True)
|
|
|
|
error = db.Column(db.String(1023), nullable=True)
|
|
|
|
error = db.Column(db.String(1023), nullable=True)
|
|
|
|
|
|
|
|
|
|
|
|