+
-
+
Username: {{ user.username }}
Email: {{ user.email }}
First Name: {{ user.first_name }}
Last Name: {{ user.last_name }}
Nickname: {{ user.display_name }}
-
diff --git a/lumi2/usermanager.py b/lumi2/usermanager.py
index cfc39e9..9ea6782 100644
--- a/lumi2/usermanager.py
+++ b/lumi2/usermanager.py
@@ -259,3 +259,44 @@ def user_update(username: str):
heading=f"Edit user: {user.username}",
is_update=True,
)
+
+
+@bp.route("/users/delete/
", methods=("GET", "POST"))
+def user_delete(username: str):
+ """Deletion view for a specific User.
+
+ Provides a form prompting the confirmation of the specified user.
+ If the user is the sole member of any groups, the groups which get deleted
+ implicitly by the lumi.ldap.delete_user() operation will be listed here as
+ well.
+ """
+
+ try:
+ conn = ldap.get_connection()
+ except Exception:
+ abort(500)
+
+ try:
+ user = ldap.get_user(conn, username)
+ except ldap.EntryNotFoundException:
+ conn.unbind()
+ abort(404)
+
+ deleted_groups = set()
+ for group in ldap.get_groups_of_user(conn, user):
+ if len(group.members) == 1:
+ deleted_groups.add(group.groupname)
+
+ if request.method == 'POST':
+ ldap.delete_user(conn, user.username)
+ conn.unbind()
+ flash(f"The user '{user.username}' was deleted.")
+ for groupname in deleted_groups:
+ flash(f"The group '{groupname}' was deleted.")
+ return redirect(url_for('usermanager.user_list'))
+
+ return render_template(
+ 'usermanager/user_delete.html',
+ username=user.username,
+ deleted_groups=deleted_groups,
+ )