Neue Sektion 'Mein Konto' auf der bestehenden /organisation-Seite. Jeder eingeloggte Nutzer darf sein eigenes Passwort ändern (kein require_org_admin nötig, anders als bei /organisation/konten für fremde Konten). Prüft aktuelles Passwort per user_manager.authenticate() (gleiches Muster wie der Login), validiert das neue Passwort explizit gegen die bestehende Policy (>=12 Zeichen, nicht gleich der E-Mail) aus der Sicherheitshärtung vom 25.08.2026, zeigt Fehler inline auf derselben Seite statt als nackte HTTPException. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
94 lines
3.7 KiB
HTML
94 lines
3.7 KiB
HTML
{% extends "base.html" %}
|
|
{% block title %}Organisation — Tuxflotte{% endblock %}
|
|
{% block content %}
|
|
<h2>Organisation</h2>
|
|
|
|
<form method="post" action="/organisation">
|
|
<label for="name">Name</label>
|
|
<input type="text" id="name" name="name" value="{{ organization.name }}" required>
|
|
|
|
<label for="kontakt_name">Ansprechpartner:in</label>
|
|
<input type="text" id="kontakt_name" name="kontakt_name" value="{{ organization.kontakt_name or '' }}">
|
|
|
|
<label for="adresse">Adresse</label>
|
|
<input type="text" id="adresse" name="adresse" value="{{ organization.adresse or '' }}">
|
|
|
|
<label for="telefon">Telefon</label>
|
|
<input type="text" id="telefon" name="telefon" value="{{ organization.telefon or '' }}">
|
|
|
|
<label for="kontakt_email">Kontakt-E-Mail</label>
|
|
<input type="email" id="kontakt_email" name="kontakt_email" value="{{ organization.kontakt_email or '' }}">
|
|
|
|
<label for="notizen">Notizen</label>
|
|
<textarea id="notizen" name="notizen" rows="3">{{ organization.notizen or '' }}</textarea>
|
|
|
|
<button type="submit">Speichern</button>
|
|
</form>
|
|
|
|
<section>
|
|
<h3>Mein Konto</h3>
|
|
{% if passwort_fehler %}<p><mark>{{ passwort_fehler }}</mark></p>{% endif %}
|
|
<form method="post" action="/organisation/passwort">
|
|
<label for="aktuelles_passwort">Aktuelles Passwort</label>
|
|
<input type="password" id="aktuelles_passwort" name="aktuelles_passwort" required>
|
|
|
|
<label for="neues_passwort">Neues Passwort</label>
|
|
<input type="password" id="neues_passwort" name="neues_passwort" required minlength="12">
|
|
<small>Mindestens 12 Zeichen, darf nicht der E-Mail-Adresse entsprechen.</small>
|
|
|
|
<label for="neues_passwort_wiederholung">Neues Passwort (Wiederholung)</label>
|
|
<input type="password" id="neues_passwort_wiederholung" name="neues_passwort_wiederholung" required minlength="12">
|
|
|
|
<button type="submit">Passwort ändern</button>
|
|
</form>
|
|
</section>
|
|
|
|
<section>
|
|
<h3>Kolleg:innen</h3>
|
|
{% if not benutzer %}
|
|
<p>Keine Konten gefunden.</p>
|
|
{% else %}
|
|
<figure>
|
|
<table>
|
|
<thead><tr><th>E-Mail</th><th>Org-Admin</th><th>Angelegt</th>{% if user.is_superuser or user.ist_organisationsadmin %}<th></th>{% endif %}</tr></thead>
|
|
<tbody>
|
|
{% for b in benutzer %}
|
|
<tr>
|
|
<td>{{ b.email }}</td>
|
|
<td>{{ "ja" if b.ist_organisationsadmin else "nein" }}</td>
|
|
<td>{{ b.created_at }}</td>
|
|
{% if user.is_superuser or user.ist_organisationsadmin %}
|
|
<td>
|
|
{% if b.id != user.id|string %}
|
|
<form method="post" action="/organisation/konten/{{ b.id }}/loeschen">
|
|
<button type="submit" class="outline secondary">Löschen</button>
|
|
</form>
|
|
{% endif %}
|
|
</td>
|
|
{% endif %}
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
</figure>
|
|
{% endif %}
|
|
|
|
{% if user.is_superuser or user.ist_organisationsadmin %}
|
|
<details>
|
|
<summary role="button" class="secondary outline">Neues Konto anlegen</summary>
|
|
<form method="post" action="/organisation/konten">
|
|
<label for="konto_email">E-Mail</label>
|
|
<input type="email" id="konto_email" name="email" required>
|
|
<label for="konto_password">Passwort</label>
|
|
<input type="password" id="konto_password" name="password" required>
|
|
<label>
|
|
<input type="checkbox" name="ist_organisationsadmin">
|
|
Admin dieser Organisation (darf Kolleg:innen-Konten verwalten)
|
|
</label>
|
|
<button type="submit">Anlegen</button>
|
|
</form>
|
|
</details>
|
|
{% endif %}
|
|
</section>
|
|
{% endblock %}
|