mirror of
				https://github.com/mail-in-a-box/mailinabox.git
				synced 2025-11-03 19:30:54 +00:00 
			
		
		
		
	Add support for a default quota value and allow setting quota when adding user
This commit is contained in:
		
							parent
							
								
									6de34b0464
								
							
						
					
					
						commit
						d1906bd055
					
				@ -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_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_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 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()
 | 
					env = utils.load_environment()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
auth_service = auth.KeyAuthService()
 | 
					auth_service = auth.KeyAuthService()
 | 
				
			||||||
@ -154,7 +154,7 @@ def mail_users():
 | 
				
			|||||||
@authorized_personnel_only
 | 
					@authorized_personnel_only
 | 
				
			||||||
def mail_users_add():
 | 
					def mail_users_add():
 | 
				
			||||||
	try:
 | 
						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:
 | 
						except ValueError as e:
 | 
				
			||||||
		return (str(e), 400)
 | 
							return (str(e), 400)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -528,6 +528,24 @@ def privacy_status_set():
 | 
				
			|||||||
	utils.write_settings(config, env)
 | 
						utils.write_settings(config, env)
 | 
				
			||||||
	return "OK"
 | 
						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
 | 
					# MUNIN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@app.route('/munin/')
 | 
					@app.route('/munin/')
 | 
				
			||||||
 | 
				
			|||||||
@ -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) ]
 | 
							 + [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
 | 
						# validate email
 | 
				
			||||||
	if email.strip() == "":
 | 
						if email.strip() == "":
 | 
				
			||||||
		return ("No email address provided.", 400)
 | 
							return ("No email address provided.", 400)
 | 
				
			||||||
@ -324,6 +324,11 @@ def add_mail_user(email, pw, privs, env):
 | 
				
			|||||||
			validation = validate_privilege(p)
 | 
								validation = validate_privilege(p)
 | 
				
			||||||
			if validation: return validation
 | 
								if validation: return validation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						try:
 | 
				
			||||||
 | 
							quota = validate_quota(quota)
 | 
				
			||||||
 | 
						except ValueError as e:
 | 
				
			||||||
 | 
							return (str(e), 400)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	# get the database
 | 
						# get the database
 | 
				
			||||||
	conn, c = open_database(env, with_connection=True)
 | 
						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
 | 
						# add the user to the database
 | 
				
			||||||
	try:
 | 
						try:
 | 
				
			||||||
		c.execute("INSERT INTO users (email, password, privileges) VALUES (?, ?, ?)",
 | 
							c.execute("INSERT INTO users (email, password, privileges, quota) VALUES (?, ?, ?, ?)",
 | 
				
			||||||
			(email, pw, "\n".join(privs)))
 | 
								(email, pw, "\n".join(privs)), quota)
 | 
				
			||||||
	except sqlite3.IntegrityError:
 | 
						except sqlite3.IntegrityError:
 | 
				
			||||||
		return ("User already exists.", 400)
 | 
							return ("User already exists.", 400)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -376,6 +381,10 @@ def set_mail_quota(email, quota, env):
 | 
				
			|||||||
    conn.commit()
 | 
					    conn.commit()
 | 
				
			||||||
    return "OK"
 | 
					    return "OK"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def get_default_quota(env):
 | 
				
			||||||
 | 
						config = utils.load_settings(env)
 | 
				
			||||||
 | 
						return config.get("default-quota", '0')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def validate_quota(quota):
 | 
					def validate_quota(quota):
 | 
				
			||||||
    # validate quota
 | 
					    # validate quota
 | 
				
			||||||
    quota = quota.strip().upper()
 | 
					    quota = quota.strip().upper()
 | 
				
			||||||
 | 
				
			|||||||
@ -28,6 +28,10 @@
 | 
				
			|||||||
      <option value="admin">Administrator</option>
 | 
					      <option value="admin">Administrator</option>
 | 
				
			||||||
    </select>
 | 
					    </select>
 | 
				
			||||||
  </div>
 | 
					  </div>
 | 
				
			||||||
 | 
					  <div class="form-group">
 | 
				
			||||||
 | 
					      <label class="sr-only" for="adduserQuota">Quota</label>
 | 
				
			||||||
 | 
					      <input type="email" class="form-control" id="adduserQuota" placeholder="Quota">
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
  <button type="submit" class="btn btn-primary">Add User</button>
 | 
					  <button type="submit" class="btn btn-primary">Add User</button>
 | 
				
			||||||
</form>
 | 
					</form>
 | 
				
			||||||
<ul style="margin-top: 1em; padding-left: 1.5em; font-size: 90%;">
 | 
					<ul style="margin-top: 1em; padding-left: 1.5em; font-size: 90%;">
 | 
				
			||||||
@ -196,13 +200,15 @@ function do_add_user() {
 | 
				
			|||||||
  var email = $("#adduserEmail").val();
 | 
					  var email = $("#adduserEmail").val();
 | 
				
			||||||
  var pw = $("#adduserPassword").val();
 | 
					  var pw = $("#adduserPassword").val();
 | 
				
			||||||
  var privs = $("#adduserPrivs").val();
 | 
					  var privs = $("#adduserPrivs").val();
 | 
				
			||||||
 | 
					  var quota = $("#adduserQuota").val();
 | 
				
			||||||
  api(
 | 
					  api(
 | 
				
			||||||
    "/mail/users/add",
 | 
					    "/mail/users/add",
 | 
				
			||||||
    "POST",
 | 
					    "POST",
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      email: email,
 | 
					      email: email,
 | 
				
			||||||
      password: pw,
 | 
					      password: pw,
 | 
				
			||||||
      privileges: privs
 | 
					      privileges: privs,
 | 
				
			||||||
 | 
					      quota: quota
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    function(r) {
 | 
					    function(r) {
 | 
				
			||||||
      // Responses are multiple lines of pre-formatted text.
 | 
					      // Responses are multiple lines of pre-formatted text.
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user