From 851a180815aeb78b56044f1b42f858873e948ee8 Mon Sep 17 00:00:00 2001 From: Julian Lobbes Date: Sat, 19 Nov 2022 15:13:44 +0100 Subject: [PATCH] feat(usermanager): add User delete view --- lumi2/templates/usermanager/user_delete.html | 35 +++++++++++++++++ lumi2/templates/usermanager/user_list.html | 6 +++ lumi2/templates/usermanager/user_view.html | 8 ++-- lumi2/usermanager.py | 41 ++++++++++++++++++++ 4 files changed, 86 insertions(+), 4 deletions(-) create mode 100644 lumi2/templates/usermanager/user_delete.html diff --git a/lumi2/templates/usermanager/user_delete.html b/lumi2/templates/usermanager/user_delete.html new file mode 100644 index 0000000..77e8ecd --- /dev/null +++ b/lumi2/templates/usermanager/user_delete.html @@ -0,0 +1,35 @@ +{% extends 'base.html' %} + +{% block content %} +
+
+

Are you sure you want to delete the user '{{ username }}'?

+
+
+{% if deleted_groups %} +
+
+

Warning: Since {{ username }} is their only member, the following groups will be deleted as well:

+
+
+
    + {% for groupname in deleted_groups %} +
  • {{ groupname }}
  • + {% endfor %} +
+
+
+{% endif %} +
+ +
+
+ +
+
+
+{% endblock content %} diff --git a/lumi2/templates/usermanager/user_list.html b/lumi2/templates/usermanager/user_list.html index 91d1e61..33e4880 100644 --- a/lumi2/templates/usermanager/user_list.html +++ b/lumi2/templates/usermanager/user_list.html @@ -13,6 +13,7 @@ Create a new user +{% if users %}
@@ -47,4 +48,9 @@
+{% else %} +
+

There are currently no users.

+
+{% endif %} {% endblock content %} diff --git a/lumi2/templates/usermanager/user_view.html b/lumi2/templates/usermanager/user_view.html index 7387093..c73ec08 100644 --- a/lumi2/templates/usermanager/user_view.html +++ b/lumi2/templates/usermanager/user_view.html @@ -2,26 +2,26 @@ {% block content %}
-
+
profile picture for user {{ user.username }}
-
+
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, + )