Christian Mueller d5d5160257 ui: Azure-Felder an Azure-Portal-Bezeichnungen anpassen
- "Client ID" -> "Anwendungs-ID (Client)"
- "Tenant ID" -> "Verzeichnis-ID (Mandant)"
- "Auth Tenant" und "Client Secret" ausgeblendet (nicht noetig)
- Hilfstexte mit Azure-Portal-Pfaden hinzugefuegt
- Auth Tenant wird automatisch aus Tenant ID gesetzt

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-03 09:32:00 +02:00

135 lines
6.8 KiB
HTML

{% extends "base.html" %}
{% block title %}Einstellungen - Busylight{% endblock %}
{% block content %}
<h4 class="mb-4">Einstellungen</h4>
{% if request.query_params.get('saved') %}
<div class="alert alert-success alert-dismissible fade show">
<i class="bi bi-check-circle"></i> Einstellungen gespeichert.
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
</div>
{% endif %}
<form method="post" action="/api/settings">
<div class="row g-4">
<!-- Azure AD -->
<div class="col-lg-6">
<div class="card">
<div class="card-header">
<h6 class="mb-0"><i class="bi bi-microsoft"></i> Microsoft Entra ID (Azure AD)</h6>
</div>
<div class="card-body">
<div class="mb-3">
<label class="form-label">Anwendungs-ID (Client)</label>
<input type="text" name="azure_client_id" class="form-control font-monospace"
value="{{ settings.azure_client_id }}"
placeholder="z.B. b19325df-9905-4e93-8419-30639376277d">
<small class="text-muted">Azure Portal > App-Registrierungen > Uebersicht > Anwendungs-ID (Client)</small>
</div>
<div class="mb-3">
<label class="form-label">Verzeichnis-ID (Mandant)</label>
<input type="text" name="azure_tenant_id" class="form-control font-monospace"
value="{{ settings.azure_tenant_id }}"
placeholder="z.B. 6a0349fc-7bb3-4868-a711-27a0d1c58c83">
<input type="hidden" name="azure_auth_tenant" value="{{ settings.azure_tenant_id }}">
<input type="hidden" name="azure_client_secret" value="{{ settings.azure_client_secret }}">
<small class="text-muted">Azure Portal > App-Registrierungen > Uebersicht > Verzeichnis-ID (Mandant)</small>
</div>
<div class="mb-3">
<label class="form-label">Graph API Berechtigungen</label>
<input type="text" name="azure_scopes" class="form-control"
value="{{ settings.azure_scopes }}"
placeholder="User.Read User.Read.All Presence.Read Presence.Read.All">
<small class="text-muted">Standard: User.Read User.Read.All Presence.Read Presence.Read.All</small>
</div>
<div class="border rounded p-3 bg-light">
{% if authenticated %}
<i class="bi bi-check-circle text-success"></i>
<strong class="text-success">Authentifiziert</strong>
{% else %}
<i class="bi bi-x-circle text-danger"></i>
<strong class="text-danger">Nicht authentifiziert</strong>
<p class="small text-muted mt-2 mb-0">
Fuehre auf dem Server aus:<br>
<code>python app.py --auth</code>
</p>
{% endif %}
</div>
</div>
</div>
</div>
<!-- Polling & AIDA -->
<div class="col-lg-6">
<div class="card mb-4">
<div class="card-header">
<h6 class="mb-0"><i class="bi bi-clock"></i> Polling</h6>
</div>
<div class="card-body">
<div class="mb-3">
<label class="form-label">Abfrage-Intervall (Sekunden)</label>
<input type="number" name="poll_interval" class="form-control"
value="{{ settings.poll_interval }}" min="5" max="300">
</div>
</div>
</div>
<div class="card mb-4">
<div class="card-header">
<h6 class="mb-0"><i class="bi bi-shield-lock"></i> Zugangsschutz</h6>
</div>
<div class="card-body">
<div class="mb-3">
<label class="form-label">Admin-Passwort</label>
<input type="password" name="admin_password" class="form-control"
placeholder="Neues Passwort eingeben (leer = nicht aendern)">
{% if settings.admin_password %}
<small class="text-success"><i class="bi bi-check-circle"></i> Passwort ist gesetzt</small>
{% else %}
<small class="text-warning"><i class="bi bi-exclamation-triangle"></i> Kein Passwort gesetzt - alle Seiten sind frei zugaenglich</small>
{% endif %}
</div>
</div>
</div>
<div class="card">
<div class="card-header">
<h6 class="mb-0"><i class="bi bi-file-earmark-spreadsheet"></i> AIDA Zeiterfassung</h6>
</div>
<div class="card-body">
<div class="mb-3">
<label class="form-label">CSV-Pfad</label>
<input type="text" name="aida_csv_path" class="form-control font-monospace"
value="{{ settings.aida_csv_path }}"
placeholder="/mnt/zeiterfassung/Status.csv">
<small class="text-muted">Auf Linux z.B. via SMB-Mount</small>
</div>
<div class="mb-3">
<label class="form-label">Status: Anwesend</label>
<input type="text" name="aida_status_anwesend" class="form-control"
value="{{ settings.aida_status_anwesend }}">
</div>
<div class="mb-3">
<label class="form-label">Status: Abwesend</label>
<input type="text" name="aida_status_abwesend" class="form-control"
value="{{ settings.aida_status_abwesend }}">
</div>
<div class="mb-3">
<label class="form-label">Status: Homeoffice</label>
<input type="text" name="aida_status_homeoffice" class="form-control"
value="{{ settings.aida_status_homeoffice }}">
</div>
</div>
</div>
</div>
</div>
<div class="mt-4">
<button type="submit" class="btn btn-primary">
<i class="bi bi-check-lg"></i> Einstellungen speichern
</button>
</div>
</form>
{% endblock %}