From 6d4243ec6658ba622f70ccbb961c672cbc2bf6e8 Mon Sep 17 00:00:00 2001 From: XYunknown Date: Mon, 15 Aug 2016 21:01:53 +0200 Subject: [PATCH] Adding SQL Like format for aliases --- admin/freeposte/admin/forms.py | 2 ++ admin/freeposte/admin/models.py | 1 + admin/freeposte/admin/templates/alias/create.html | 1 + postfix/conf/sqlite-virtual_alias_maps.cf | 12 +++++++++--- 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/admin/freeposte/admin/forms.py b/admin/freeposte/admin/forms.py index 7a3d5962..e15b9d5c 100644 --- a/admin/freeposte/admin/forms.py +++ b/admin/freeposte/admin/forms.py @@ -86,6 +86,8 @@ class UserReplyForm(Form): class AliasForm(Form): localpart = fields.StringField('Alias', [validators.DataRequired()]) + wildcard = fields.BooleanField( + 'Use SQL Like Syntax (e.g. for catch-all aliases, admin-%@domain.com)') destination = DestinationField('Destination') comment = fields.StringField('Comment') submit = fields.SubmitField('Create') diff --git a/admin/freeposte/admin/models.py b/admin/freeposte/admin/models.py index 3637908f..9c6d17f6 100644 --- a/admin/freeposte/admin/models.py +++ b/admin/freeposte/admin/models.py @@ -189,6 +189,7 @@ class Alias(Email): """ domain = db.relationship(Domain, backref=db.backref('aliases', cascade='all, delete-orphan')) + wildcard = db.Column(db.Boolean(), default=False) destination = db.Column(CommaSeparatedList, nullable=False, default=[]) diff --git a/admin/freeposte/admin/templates/alias/create.html b/admin/freeposte/admin/templates/alias/create.html index ba52c657..30377984 100644 --- a/admin/freeposte/admin/templates/alias/create.html +++ b/admin/freeposte/admin/templates/alias/create.html @@ -12,6 +12,7 @@ Create alias
{{ form.hidden_tag() }} {{ macros.form_field(form.localpart, append='@'+domain.name+'') }} + {{ macros.form_field(form.wildcard) }} {{ macros.form_field(form.destination, id='destination') }} {{ macros.form_field(form.comment) }} {{ macros.form_field(form.submit) }} diff --git a/postfix/conf/sqlite-virtual_alias_maps.cf b/postfix/conf/sqlite-virtual_alias_maps.cf index cdd6c71d..39423261 100644 --- a/postfix/conf/sqlite-virtual_alias_maps.cf +++ b/postfix/conf/sqlite-virtual_alias_maps.cf @@ -1,5 +1,11 @@ dbpath = /data/freeposte.db query = - SELECT destination - FROM alias - WHERE alias.email = '%s' + SELECT destination + FROM alias + WHERE alias.email = '%s' + AND alias.wildcard = 0 + UNION SELECT destination + FROM alias + WHERE '%s' LIKE alias.email + AND alias.wildcard = 1 + LIMIT 1