diff --git a/management/mailconfig.py b/management/mailconfig.py index 2fcb9703..8431a4a8 100755 --- a/management/mailconfig.py +++ b/management/mailconfig.py @@ -91,8 +91,8 @@ def is_dcv_address(email): return True return False -def open_database(env, with_connection=False): - conn = sqlite3.connect(env["STORAGE_ROOT"] + "/mail/users.sqlite") +def open_database(env, with_connection=False, db_path="/mail/users.sqlite"): + conn = sqlite3.connect(env["STORAGE_ROOT"] + db_path) if not with_connection: return conn.cursor() else: @@ -296,8 +296,9 @@ def add_mail_user(email, pw, privs, env): validation = validate_privilege(p) if validation: return validation - # get the database + # get the system database and OwnCloud database conn, c = open_database(env, with_connection=True) + conn_oc, c_oc = open_database(env, with_connection=True, db_path="/owncloud/owncloud.db") # hash the password pw = hash_password(pw) @@ -312,6 +313,15 @@ def add_mail_user(email, pw, privs, env): # write databasebefore next step conn.commit() + #fix sync cardDav error on Exchange connections, adding the user into OwnCloud DB + try: + c_oc.execute("INSERT INTO oc_users_external (backend, uid) VALUES (?, ?)", + ("{127.0.0.1:993/imap/ssl/novalidate-cert}", email)) + except sqlite3.IntegrityError: + return ("User already exists on calendar/contact server.", 400) + + conn_oc.commit() + # Update things in case any new domains are added. return kick(env, "mail user added") @@ -356,6 +366,13 @@ def remove_mail_user(email, env): return ("That's not a user (%s)." % email, 400) conn.commit() + #delete user from OwnCloud DB too + conn_oc, c_oc = open_database(env, with_connection=True, db_path="/owncloud/owncloud.db") + c_oc.execute("DELETE FROM oc_users_external WHERE email=?", (email,)) + if c.rowcount != 1: + return ("This email (%s) wasn't in contacts/calendar server.", % email, 400) + conn_oc.commit() + # Update things in case any domains are removed. return kick(env, "mail user removed")