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