feat(usermanager): add User delete view
This commit is contained in:
parent
7cb519a89f
commit
851a180815
35
lumi2/templates/usermanager/user_delete.html
Normal file
35
lumi2/templates/usermanager/user_delete.html
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="row justify-content-sm-center">
|
||||||
|
<div class="col-sm text-center align-self-center m-2">
|
||||||
|
<p><b>Are you sure</b> you want to <b class="text-danger">delete</b> the user '{{ username }}'?</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% if deleted_groups %}
|
||||||
|
<div class="row justify-content-sm-center border border-warning rounded m-2">
|
||||||
|
<div class="col-sm text-center align-self-center m-2">
|
||||||
|
<p><u class="text-warning">Warning:</u> Since {{ username }} is their only member, the following <b>groups</b> will be deleted as well:</p>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm text-center align-self-center m-2">
|
||||||
|
<ul class="list-group">
|
||||||
|
{% for groupname in deleted_groups %}
|
||||||
|
<li class="list-group-item">{{ groupname }}</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
<div class="row justify-content-sm-center">
|
||||||
|
<div class="col-sm text-center align-self-center m-2">
|
||||||
|
<a class="btn btn-secondary"
|
||||||
|
href="{{ url_for('usermanager.user_view', username=username) }}"
|
||||||
|
role="button">No, take me back</a>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm text-center align-self-center m-2">
|
||||||
|
<form method="post">
|
||||||
|
<input class="btn btn-danger" type="submit" value="Yes, delete this user">
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock content %}
|
@ -13,6 +13,7 @@
|
|||||||
Create a new user
|
Create a new user
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
{% if users %}
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
<table class="table table-striped table-hover">
|
<table class="table table-striped table-hover">
|
||||||
<thead>
|
<thead>
|
||||||
@ -47,4 +48,9 @@
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
{% else %}
|
||||||
|
<div class="text-center">
|
||||||
|
<p class="text-muted">There are currently no users.</p>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
@ -2,26 +2,26 @@
|
|||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="row justify-content-sm-center">
|
<div class="row justify-content-sm-center">
|
||||||
<div class="col-sm-4 text-center align-self-center m-2">
|
<div class="col-sm-2 text-center align-self-center m-2">
|
||||||
<img src="{{ url_for('static', filename='images/users/' + user.username + '/full.jpg') }}"
|
<img src="{{ url_for('static', filename='images/users/' + user.username + '/full.jpg') }}"
|
||||||
alt="profile picture for user {{ user.username }}"
|
alt="profile picture for user {{ user.username }}"
|
||||||
class="img-thumbnail"
|
class="img-thumbnail"
|
||||||
style="max-width: 150px"
|
style="max-width: 150px"
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-auto vstack gap-1 align-self-center m-2">
|
<div class="col-sm-4 vstack gap-1 align-self-center m-2">
|
||||||
<div><b>Username:</b> {{ user.username }}</div>
|
<div><b>Username:</b> {{ user.username }}</div>
|
||||||
<div><b>Email:</b> {{ user.email }}</div>
|
<div><b>Email:</b> {{ user.email }}</div>
|
||||||
<div><b>First Name:</b> {{ user.first_name }}</div>
|
<div><b>First Name:</b> {{ user.first_name }}</div>
|
||||||
<div><b>Last Name:</b> {{ user.last_name }}</div>
|
<div><b>Last Name:</b> {{ user.last_name }}</div>
|
||||||
<div><b>Nickname:</b> {{ user.display_name }}</div>
|
<div><b>Nickname:</b> {{ user.display_name }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-4 vstack gap-1 align-self-center m-2">
|
<div class="col-sm-auto vstack gap-1 align-self-center m-2">
|
||||||
<a class="btn btn-primary"
|
<a class="btn btn-primary"
|
||||||
href="{{ url_for('usermanager.user_update', username=user.username) }}"
|
href="{{ url_for('usermanager.user_update', username=user.username) }}"
|
||||||
role="button">Edit</a>
|
role="button">Edit</a>
|
||||||
<a class="btn btn-danger"
|
<a class="btn btn-danger"
|
||||||
href="#"
|
href="{{ url_for('usermanager.user_delete', username=user.username) }}"
|
||||||
role="button">Delete</a>
|
role="button">Delete</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -259,3 +259,44 @@ def user_update(username: str):
|
|||||||
heading=f"Edit user: {user.username}",
|
heading=f"Edit user: {user.username}",
|
||||||
is_update=True,
|
is_update=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@bp.route("/users/delete/<string:username>", 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,
|
||||||
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user