3 Authentifizierung
ppfeiffer edited this page 2026-04-19 18:32:43 +02:00
This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Benutzerverwaltung & Authentifizierung

Das MeshCore Dashboard ist durch ein dreistufiges Benutzerkonzept geschützt. Alle Seiten außer Dashboard, Mesh Graph und Contacts erfordern eine Anmeldung.


Rollenkonzept

Rolle Zugriff
Admin Voller Zugriff Einstellungen, Scheduler, Benutzerverwaltung, alle Schreiboperationen
Trusted Lesen + Scheduler & Einstellungen bearbeiten (kein Zugriff auf Benutzerverwaltung)
Guest Nur lesend Dashboard, Contacts, Cache, Mesh Graph, Realtime, Radio, Services, Telemetry

Öffentlich zugänglich (ohne Login): Dashboard, Mesh Graph, Contacts, Nachrichten-Analyse, Sicherheit & Zugriff


Ersteinrichtung (Setup-Wizard)

Beim ersten Start ohne angelegten Benutzer wird automatisch auf /setup weitergeleitet.

  1. Benutzernamen eingeben (min. 3 Zeichen)
  2. Passwort setzen (min. 8 Zeichen) und wiederholen
  3. Admin-Account erstellen klicken

Der erste Account erhält automatisch die Rolle Admin.


Anmeldung

Aufruf über /login oder automatische Weiterleitung bei geschützten Seiten.

Accounts mit Status pending (selbst registriert, noch nicht freigeschaltet) erhalten beim Login-Versuch einen entsprechenden Hinweis.


Registrierung (OTP per E-Mail)

Neue Benutzer können sich selbst registrieren. Der Ablauf ist zweistufig:

Schritt 1 Daten eingeben

Aufruf über /register (auch vom Login-Link erreichbar).

  • Benutzername (min. 3 Zeichen)
  • Gültige E-Mail-Adresse für den Bestätigungscode

Nach dem Absenden wird ein 6-stelliger OTP-Code per E-Mail zugestellt (gültig 15 Minuten).

Schritt 2 Code bestätigen & Passwort setzen

  • OTP-Code aus der E-Mail eingeben
  • Passwort setzen und wiederholen
  • Registrierung abschließen klicken

Bei abgelaufenem oder falschem Code: Erneut senden schickt einen neuen Code.

Status nach Registrierung

Ohne Einladungslink landet der neue Account im Status Pending und kann sich noch nicht anmelden:

Ein Admin muss den Account in der Benutzerverwaltung freischalten (siehe Ausstehende Accounts).


Admins können Einladungslinks erstellen. Wer einen solchen Link öffnet, überspringt die Admin-Genehmigung und erhält die in der Einladung festgelegte Rolle direkt nach der Registrierung.

Einladung erstellen

In der Benutzerverwaltung (Einstellungen → Benutzerverwaltung) auf Einladung erstellen klicken:

Feld Beschreibung
Rolle Rolle die der eingeladene Benutzer erhält (Guest / Trusted / Admin)
Gültigkeit 24 Std / 3 Tage / 7 Tage / 30 Tage
Notiz Optionaler interner Hinweis (z.B. Name oder Zweck)
E-Mail E-Mail-Adresse des Eingeladenen (optional — löst automatischen E-Mail-Versand aus)
Persönliche Nachricht Freitext der in der Einladungsmail erscheint

Wird eine E-Mail-Adresse angegeben, wird die Einladung automatisch versendet. Der erste Admin mit gesetzter E-Mail-Adresse erhält die E-Mail als CC.

Nach dem Erstellen wird der vollständige Einladungslink angezeigt und kann per Klick kopiert werden:

Der Link hat die Form:

https://dashboard.meshdresden.eu/register?invite=TOKEN

Einladungsregistrierung

Der eingeladene Benutzer öffnet den Link und sieht die voreingestellte Rolle:

Nach OTP-Verifizierung und Passwortsetzung ist der Account sofort aktiv und der Benutzer wird direkt eingeloggt.


Navbar & Sichtbarkeit

Die Navigationsleiste zeigt je nach Login-Status unterschiedliche Einträge:

Nicht eingeloggt:

Eingeloggt als Guest:

Eingeloggt als Trusted:

Eingeloggt als Admin:

Das User-Dropdown (Klick auf den Benutzernamen rechts) enthält:

  • Mein Profil/settings/password — E-Mail, Notiz, Passwort ändern (alle Rollen)
  • Einladung erstellen/settings/users (nur Admin)
  • Abmelden

Benutzerverwaltung (Admin)

Erreichbar über Einstellungen → Benutzerverwaltung oder direkt /settings/users.

Tab: Benutzer

Zeigt alle aktiven Benutzer. Pro Zeile:

  • Bearbeiten (Stift-Icon): Rolle, Passwort, E-Mail und Notizen ändern
  • Löschen (Papierkorb-Icon): Account entfernen (eigener Account nicht löschbar)

Der eigene Account ist mit einem Du-Badge markiert.

Neuen Benutzer anlegen

Über den Button Neuer Benutzer oben rechts:

Tab: Ausstehend

Zeigt selbst registrierte Accounts mit Status pending. Pro Zeile:

  • Freischalten: öffnet Modal zur Rollenzuweisung
  • Ablehnen (×): löscht den Account

Ausstehende Accounts freischalten

Rolle auswählen und Freischalten klicken. Der Account wird sofort auf active gesetzt.

Tab: Einladungen

Übersicht aller erstellten Einladungen mit Status-Badges:

Badge Bedeutung
Aktiv Noch nicht verwendet, nicht abgelaufen
Verwendet Wurde bereits eingelöst
Abgelaufen Gültigkeitsdauer überschritten

Aktive Einladungen haben ein Kopieren-Icon für den Link. Einladungen können jederzeit gelöscht werden.


Mein Profil

Erreichbar über das User-Dropdown → Mein Profil oder direkt /settings/password.

Alle Rollen (Guest, Trusted, Admin) können folgendes selbst bearbeiten:

  • E-Mail-Adresse — wird für OTP-Mails und CC-Einladungen verwendet
  • Notiz — optionales Freitextfeld am Account
  • Passwort — Eingabe des aktuellen Passworts erforderlich

Konfiguration (config.ini)

Alle Auth-Einstellungen befinden sich im Abschnitt [Web_Viewer]:

[Web_Viewer]
# Stabiler Flask Session-Key. Einmalig generieren:
#   python3 -c "import secrets; print(secrets.token_hex(32))"
# Leer = neuer Zufallskey bei jedem Neustart (invalidiert alle Sessions)
secret_key =

# Name der Instanz (erscheint in OTP-E-Mails)
site_name = MeshCore Dashboard

# Standard-Rolle für selbst registrierte Benutzer (ohne Einladung)
# Erlaubte Werte: guest / trusted / admin
registration_default_role = guest

# ── SMTP-Einstellungen für OTP-E-Mails ───────────────────────────────────
smtp_host     = localhost
smtp_port     = 587
smtp_user     =
smtp_password =
smtp_from     = meshcore-bot@localhost

# smtp_tls: STARTTLS verwenden (Port 587, empfohlen für die meisten Anbieter)
smtp_tls      = true

# smtp_ssl: Direktes SSL/TLS (Port 465). Wenn true, wird smtp_tls ignoriert.
smtp_ssl      = false

Empfohlene SMTP-Konfigurationen

Lokaler MTA (z.B. Postfix/Exim auf dem selben Server):

smtp_host     = localhost
smtp_port     = 25
smtp_tls      = false
smtp_ssl      = false

Gmail (App-Passwort erforderlich):

smtp_host     = smtp.gmail.com
smtp_port     = 587
smtp_user     = your@gmail.com
smtp_password = xxxx-xxxx-xxxx-xxxx
smtp_from     = your@gmail.com
smtp_tls      = true

Hetzner / Strato / ionos:

smtp_host     = mail.IHR-DOMAIN.de
smtp_port     = 587
smtp_user     = meshcore@IHR-DOMAIN.de
smtp_password = IHR-PASSWORT
smtp_from     = meshcore@IHR-DOMAIN.de
smtp_tls      = true

Secret Key generieren

Damit Sessions nach einem Neustart des Bots gültig bleiben, sollte ein fester Secret Key gesetzt werden:

python3 -c "import secrets; print(secrets.token_hex(32))"

Den ausgegebenen Wert in die config.ini eintragen:

secret_key = a1b2c3d4e5f6...  # (euer generierter Key)

Sicherheitshinweise

  • Das Web Interface ist für den Einsatz im lokalen Netzwerk konzipiert
  • Für öffentlich erreichbare Instanzen empfiehlt sich ein Reverse Proxy (nginx/Caddy) mit HTTPS
  • host = 127.0.0.1 beschränkt den Zugriff auf localhost (sicherste Option)
  • host = 0.0.0.0 macht das Interface im gesamten Netzwerk erreichbar nur mit aktivierter Auth verwenden
  • Der letzte Admin-Account kann nicht gelöscht oder degradiert werden
  • OTP-Codes sind 15 Minuten gültig und werden nach Verwendung ungültig

Fehlerbehebung

„Internal Server Error" beim ersten Start

Sicherstellen dass die Datenbank schreibbar ist und der Bot mindestens einmal gestartet wurde. Der Setup-Wizard erscheint automatisch wenn keine Benutzer in der DB existieren.

OTP-E-Mail kommt nicht an

  1. SMTP-Einstellungen in config.ini prüfen
  2. Bot-Log auf SMTP-Fehler prüfen:
    journalctl -u meshcore-bot -n 50 | grep -i smtp
    
  3. SMTP-Verbindung manuell testen:
    python3 -c "
    import smtplib
    s = smtplib.SMTP('IHR-SMTP-HOST', 587)
    s.starttls()
    s.login('USER', 'PASS')
    print('OK')
    s.quit()
    "
    

Session läuft nach Neustart ab

Einen festen secret_key in der config.ini setzen (siehe Konfiguration).

Benutzer kann sich trotz richtigem Passwort nicht anmelden

Status des Accounts prüfen möglicherweise ist er noch pending. In der Benutzerverwaltung unter Ausstehend nachsehen und freischalten.