Files
2026-08-30 11:30:09 +02:00

53 lines
2.0 KiB
HTML

{% extends "base.html" %}
{% block title %}Users — MQTT Ingester{% endblock %}
{% block content %}
<h1>Users</h1>
<h2>Create user</h2>
<form method="post" action="/users" class="stack">
<input type="hidden" name="csrf_token" value="{{ identity.csrf_token }}">
<label>Username <input type="text" name="username" required></label>
<label>Password <input type="password" name="password" required minlength="8"></label>
<label>Role
<select name="role">
<option value="user">user</option>
<option value="admin">admin</option>
</select>
</label>
<fieldset>
<legend>Groups</legend>
{% for g in groups %}
<label class="check"><input type="checkbox" name="group_ids" value="{{ g.id }}"> {{ g.name }}</label>
{% endfor %}
</fieldset>
<button type="submit">Create</button>
</form>
<h2>Existing users</h2>
<table>
<thead><tr><th>Username</th><th>Role</th><th>Groups</th><th>Status</th><th></th></tr></thead>
<tbody>
{% for u in users %}
<tr>
<td><a href="/users/{{ u.id }}">{{ u.username }}</a></td>
<td>{{ u.role }}</td>
<td>{{ u.groups | join(', ') if u.groups else '—' }}</td>
<td>
{% if u.disabled_at %}<span class="tag disabled">disabled</span>
{% elif u.must_change_password %}<span class="tag warn">must change pw</span>
{% else %}<span class="tag ok">active</span>{% endif %}
</td>
<td class="actions">
<form method="post" action="/users/{{ u.id }}/{% if u.disabled_at %}enable{% else %}disable{% endif %}">
<input type="hidden" name="csrf_token" value="{{ identity.csrf_token }}">
<button type="submit" class="link">{{ 'enable' if u.disabled_at else 'disable' }}</button>
</form>
<form method="post" action="/users/{{ u.id }}/delete">
<input type="hidden" name="csrf_token" value="{{ identity.csrf_token }}">
<button type="submit" class="link danger">delete</button>
</form>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}