From 90707e63cfc7610b9ffb3c03f765524224610d0f Mon Sep 17 00:00:00 2001 From: david Date: Sat, 12 Nov 2016 13:44:27 +0100 Subject: [PATCH] added email forwarding feature --- README.md | 5 ++++ app.py | 69 ++++++++++++++++++++++++++++++++++++++++++++++- views/default.tpl | 30 +++++++++++++++++---- 3 files changed, 98 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 056aa1a..7cf57c8 100644 --- a/README.md +++ b/README.md @@ -73,6 +73,11 @@ Apache vhost config: ServerName accounts.domain.tld DocumentRoot /var/www/accounts/static + + Options FollowSymLinks + AllowOverride None + + ErrorLog ${APACHE_LOG_DIR}/accounts_ssl_error.log LogLevel warn CustomLog ${APACHE_LOG_DIR}/accounts_ssl_access.log combined diff --git a/app.py b/app.py index 4cd6b0a..c69c069 100644 --- a/app.py +++ b/app.py @@ -136,6 +136,20 @@ def get_domains(): i+=1 return domains +# get forwarding alias for user +def get_forward(username): + a = requests.get(miab_url + "/mail/aliases?format=json", auth=(miab_admin, miab_passwd)) + aliases = a.json() + i=0 + while i < len(aliases): + j=0 + while j < len(aliases[i]['aliases']): + if aliases[i]['aliases'][j]['address'] == username: + forward = aliases[i]['aliases'][j]['forwards_to'][0] + return forward + j+=1 + i+=1 + return None # routing @@ -146,8 +160,9 @@ def home(): message = request.get_cookie(cookie_name + "_message", secret=cookie_secret) if username: aliases = get_aliases(username) + forward = get_forward(username) # render homepage - return template('default', username=username, app_name=app_name, message=message, aliases=aliases, max_aliases=max_aliases) + return template('default', username=username, app_name=app_name, message=message, aliases=aliases, max_aliases=max_aliases, forward=forward) else: # render login message = request.get_cookie(cookie_name + "_message", secret=cookie_secret) @@ -279,6 +294,56 @@ def delete_alias(): else: redirect('/') +# configure email forwarding +@post('/forward/add') +def add_forward(): + username = logged_in() + forward = request.forms.get('forward') + if username: + if get_forward(username): + message = { "message": "Email forwarding is already configured", "alert": "danger" } + response.set_cookie(cookie_name + "_message", message, secret=cookie_secret, max_age=5, path="/") + redirect('/') + else: + data = { "address": username, "forwards_to": forward } + c = requests.post(miab_url + "/mail/aliases/add", data=data, auth=(miab_admin, miab_passwd)) + if c.status_code == 200: + message = { "message": "Email forwarding to " + str(forward) + " has been configured successfully", "alert": "success" } + response.set_cookie(cookie_name + "_message", message, secret=cookie_secret, max_age=5, path="/") + redirect('/') + else: + message = { "message": "Something went wrong while configuring email forwarding", "alert": "danger" } + response.set_cookie(cookie_name + "_message", message, secret=cookie_secret, max_age=5, path="/") + redirect('/') + else: + redirect('/') + +# deconfigure email forwarding +@post('/forward/delete') +def delete_forward(): + username = logged_in() + forward = request.forms.get('forward') + if username: + forwarded = get_forward(username) + if forward == forwarded: + data = { "address": username, } + d = requests.post(miab_url + "/mail/aliases/remove", data=data, auth=(miab_admin, miab_passwd)) + if d.status_code == 200: + message = { "message": "Email forwarding has been deconfigured successfully", "alert": "success" } + response.set_cookie(cookie_name + "_message", message, secret=cookie_secret, max_age=5, path="/") + redirect('/') + else: + message = { "message": "Something went wrong while deconfiguring email forwarding", "alert": "danger" } + response.set_cookie(cookie_name + "_message", message, secret=cookie_secret, max_age=5, path="/") + redirect('/') + else: + message = { "message": "Your delete request does not match the configured forwarding", "alert": "danger" } + response.set_cookie(cookie_name + "_message", message, secret=cookie_secret, max_age=5, path="/") + redirect('/') + else: + redirect('/') + + @post('/delete') def delete_account(): @@ -301,6 +366,8 @@ def delete_account(): message = { "message": "Your supplied password is wrong", "alert": "danger" } response.set_cookie(cookie_name + "_message", message, secret=cookie_secret, max_age=5, path="/") redirect('/') + else: + redirect('/') diff --git a/views/default.tpl b/views/default.tpl index 7e7bcb2..97ba9b6 100644 --- a/views/default.tpl +++ b/views/default.tpl @@ -81,16 +81,36 @@ - %else: -
- -
- %end

+
+

Forward all emails

+
+

Entering an external email address here will forward all incoming mails. +
incl. incoming mails on aliases. +

+ %if forward: +
+
+ + +
+ +
+ %else: +
+
+ +
+ +
+ %end + +
+

Delete account