From 90a5491b06c4c6a5ede7d6891df4cb7358c4a99f Mon Sep 17 00:00:00 2001
From: david
Date: Fri, 11 Nov 2016 20:59:26 +0100
Subject: [PATCH] working alias management
---
app.conf.sample | 1 +
app.py | 114 ++++++++++++++++++++++++++++++++++++++++------
views/default.tpl | 28 +++++++-----
3 files changed, 117 insertions(+), 26 deletions(-)
diff --git a/app.conf.sample b/app.conf.sample
index 4e090ec..253182f 100644
--- a/app.conf.sample
+++ b/app.conf.sample
@@ -13,3 +13,4 @@ miab_admin=miabadmin@domain.tld
miab_passwd=miabadminpassword
miab_url=https://miaburl.domain.tld/admin
+max_aliases=5
diff --git a/app.py b/app.py
index 6e72def..85a02a7 100644
--- a/app.py
+++ b/app.py
@@ -53,6 +53,11 @@ if config['DEFAULT']['cookie_name']:
else:
cookie_name = "accounts"
+if config['DEFAULT']['max_aliases']:
+ max_aliases = int(config['DEFAULT']['max_aliases'])
+else:
+ max_aliases=5
+
# functions
@@ -94,9 +99,47 @@ def get_aliases(username):
i+=1
return aliases
+# get all addresses available on miab
+def get_addresses():
+ addresses = []
+ # get alias data
+ 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']):
+ addresses.append(aliases[i]['aliases'][j]['address'])
+ j+=1
+ i+=1
+
+ # get user data
+ u = requests.get(miab_url + "/mail/users?format=json", auth=(miab_admin, miab_passwd))
+ users = u.json()
+ i=0
+ while i < len(users):
+ j=0
+ while j < len(users[i]['users']):
+ addresses.append(users[i]['users'][j]['email'])
+ j+=1
+ i+=1
+ return addresses
+
+# get all valid domains from miab
+def get_domains():
+ domains = []
+ u = requests.get(miab_url + "/mail/users?format=json", auth=(miab_admin, miab_passwd))
+ users = u.json()
+ i=0
+ while i < len(users):
+ domains.append(users[i]['domain'])
+ i+=1
+ return domains
+
# routing
+# render main page
@get('/')
def home():
username = logged_in()
@@ -104,7 +147,7 @@ def home():
if username:
aliases = get_aliases(username)
# render homepage
- return template('default', username=username, app_name=app_name, message=message, aliases=aliases)
+ return template('default', username=username, app_name=app_name, message=message, aliases=aliases, max_aliases=max_aliases)
else:
# render login
message = request.get_cookie(cookie_name + "_message", secret=cookie_secret)
@@ -166,25 +209,68 @@ def post_password():
else:
redirect('/')
+# create an email alias
+@post('/alias/add')
+def add_alias():
+ username = logged_in()
+ if username:
+ add = request.forms.get('add')
+ aliases = get_aliases(username)
+ #it must be below max_aliases
+ if len(aliases) < max_aliases:
+ #it must be in domains
+ domains = get_domains()
+ addresses = get_addresses()
+ for domain in domains:
+ if domain == add[(add.find("@")+1):]:
+ #it must not be in addresses
+ for address in addresses:
+ if address == add:
+ #match found. break
+ message = { "message": str(add) + " does already exist", "alert": "danger" }
+ response.set_cookie(cookie_name + "_message", message, secret=cookie_secret, max_age=5, path="/")
+ redirect('/')
+ #create the alias
+ data = { "address": add, "forwards_to": username }
+ r = requests.post(miab_url + "/mail/aliases/add", data=data, auth=(miab_admin, miab_passwd))
+ if r.status_code == 200:
+ message = { "message": str(add) + " has been created 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 creating " + str(add), "alert": "danger" }
+ response.set_cookie(cookie_name + "_message", message, secret=cookie_secret, max_age=5, path="/")
+ redirect('/')
+ message = { "message": str(add[(add.find("@")+1):]) + " is not a valid domain", "alert": "danger" }
+ response.set_cookie(cookie_name + "_message", message, secret=cookie_secret, max_age=5, path="/")
+ redirect('/')
+ else:
+ message = { "message": "You have reached the alias limit", "alert": "danger" }
+ response.set_cookie(cookie_name + "_message", message, secret=cookie_secret, max_age=5, path="/")
+ redirect('/')
+ else:
+ redirect("/")
-#@post('/alias/add')
-#def add_alias():
-# pass
-
-# delete alias
+# delete an email alias
@post('/alias/delete')
def delete_alias():
username = logged_in()
if username:
- remove = request.forms.get('remove')
+ delete = request.forms.get('delete')
aliases = get_aliases(username)
for alias in aliases:
- if alias == remove:
+ if alias == delete:
#remove the alias
- #requests.post()
- message = { "message": "The alias " + str(remove) + " has been removed successfully", "alert": "success" }
- response.set_cookie(cookie_name + "_message", message, secret=cookie_secret, max_age=5, path="/")
- redirect('/')
+ data = { "address": delete, }
+ r = requests.post(miab_url + "/mail/aliases/remove", data=data, auth=(miab_admin, miab_passwd))
+ if r.status_code == 200:
+ message = { "message": "The alias " + str(delete) + " has been removed 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 removing an alias", "alert": "danger" }
+ response.set_cookie(cookie_name + "_message", message, secret=cookie_secret, max_age=5, path="/")
+ redirect('/')
message = { "message": "You're trying to do something filthy", "alert": "danger"}
response.set_cookie(cookie_name + "_message", message, secret=cookie_secret, max_age=5, path="/")
redirect('/')
@@ -206,7 +292,7 @@ def delete_alias():
# run development webserver
-#run(host='localhost', port=8000, debug=True, reloader=True)
+run(host='localhost', port=8000, debug=True, reloader=True)
# run prod server
-run(host='0.0.0.0', port=8000)
+#run(host='0.0.0.0', port=8000)
diff --git a/views/default.tpl b/views/default.tpl
index e39a2ec..d62f910 100644
--- a/views/default.tpl
+++ b/views/default.tpl
@@ -82,7 +82,7 @@
Besides your primary email address you can use an alias to send your emails.
Available domains: @aundas.org, @socialnerds.org,
@phlo.at, @gmur.ml, @socialg.it
- Be aware the limit of five active aliases.
+ Be aware the limit of {{ max_aliases }} active aliases.
%for alias in aliases:
@@ -90,31 +90,35 @@
%end
-
-
-
+
+
+
Delete account
-
Entering your full account name and hitting the delete button will render your SocialNerds account unavailable and remove all data from your servers.
The actual removal will happen within a week.
+
Entering your password and hitting the delete button will render your SocialNerds account unavailable and remove all data from your servers.
The actual removal will happen within a week.