From d1906bd055064276a070a7b350e853396b23bf60 Mon Sep 17 00:00:00 2001 From: John Supplee Date: Thu, 31 Jan 2019 22:57:04 +0200 Subject: [PATCH] Add support for a default quota value and allow setting quota when adding user --- management/daemon.py | 22 ++++++++++++++++++++-- management/mailconfig.py | 15 ++++++++++++--- management/templates/users.html | 8 +++++++- 3 files changed, 39 insertions(+), 6 deletions(-) diff --git a/management/daemon.py b/management/daemon.py index 3bf95ec5..a007d6c8 100755 --- a/management/daemon.py +++ b/management/daemon.py @@ -9,7 +9,7 @@ import auth, utils, multiprocessing.pool from mailconfig import get_mail_users, get_mail_users_ex, get_admins, add_mail_user, set_mail_password, remove_mail_user from mailconfig import get_mail_user_privileges, add_remove_mail_user_privilege from mailconfig import get_mail_aliases, get_mail_aliases_ex, get_mail_domains, add_mail_alias, remove_mail_alias -from mailconfig import set_mail_quota +from mailconfig import set_mail_quota, get_default_quota, validate_quota env = utils.load_environment() auth_service = auth.KeyAuthService() @@ -154,7 +154,7 @@ def mail_users(): @authorized_personnel_only def mail_users_add(): try: - return add_mail_user(request.form.get('email', ''), request.form.get('password', ''), request.form.get('privileges', ''), env) + return add_mail_user(request.form.get('email', ''), request.form.get('password', ''), request.form.get('privileges', ''), request.form.get('quota', ''), env) except ValueError as e: return (str(e), 400) @@ -528,6 +528,24 @@ def privacy_status_set(): utils.write_settings(config, env) return "OK" +@app.route('/system/default-quota', methods=["GET"]) +@authorized_personnel_only +def default_quota_get(): + return get_default_quota(env) + +@app.route('/system/default-quota', methods=["POST"]) +@authorized_personnel_only +def default_quota_set(): + config = utils.load_settings(env) + try: + config["default-quota"] = validate_quota(request.form.get('default_quota')) + utils.write_settings(config, env) + + except ValueError as e: + return ("ERROR: %s" % str(e), 400) + + return "OK" + # MUNIN @app.route('/munin/') diff --git a/management/mailconfig.py b/management/mailconfig.py index 9cb79b0d..92f26dfc 100755 --- a/management/mailconfig.py +++ b/management/mailconfig.py @@ -298,7 +298,7 @@ def get_mail_domains(env, filter_aliases=lambda alias : True): + [get_domain(address, as_unicode=False) for address, *_ in get_mail_aliases(env) if filter_aliases(address) ] ) -def add_mail_user(email, pw, privs, env): +def add_mail_user(email, pw, privs, quota, env): # validate email if email.strip() == "": return ("No email address provided.", 400) @@ -324,6 +324,11 @@ def add_mail_user(email, pw, privs, env): validation = validate_privilege(p) if validation: return validation + try: + quota = validate_quota(quota) + except ValueError as e: + return (str(e), 400) + # get the database conn, c = open_database(env, with_connection=True) @@ -332,8 +337,8 @@ def add_mail_user(email, pw, privs, env): # add the user to the database try: - c.execute("INSERT INTO users (email, password, privileges) VALUES (?, ?, ?)", - (email, pw, "\n".join(privs))) + c.execute("INSERT INTO users (email, password, privileges, quota) VALUES (?, ?, ?, ?)", + (email, pw, "\n".join(privs)), quota) except sqlite3.IntegrityError: return ("User already exists.", 400) @@ -376,6 +381,10 @@ def set_mail_quota(email, quota, env): conn.commit() return "OK" +def get_default_quota(env): + config = utils.load_settings(env) + return config.get("default-quota", '0') + def validate_quota(quota): # validate quota quota = quota.strip().upper() diff --git a/management/templates/users.html b/management/templates/users.html index ee22b316..ba3985e0 100644 --- a/management/templates/users.html +++ b/management/templates/users.html @@ -28,6 +28,10 @@ +
+ + +