166 Commits
Author SHA1 Message Date
adminandClaude Opus 5.5 a798040847 Aktivitäten: Zeitraum per seit_tagen/vor_tagen abrufbar
Nutzer-Wunsch 29.10.2026: Die Oberfläche zeigt nur die letzten 30 Tage,
Älteres auf Nachfrage.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 07:38:01 +01:00
adminandClaude Opus 5.5 86bde64fe6 Installationsmedium: auch Verlängern höchstens 90 Tage ab heute (Härtung Schritt 4)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 14:29:10 +01:00
adminandClaude Opus 5.5 7b61344d1b Aktivierung: Codes und Medien laufen immer ab, Hinweis bei erneuter Aktivierung (Härtung Schritt 4)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 08:26:44 +01:00
adminandClaude Opus 5.5 e81a9c01c7 Migration 0081: unbegrenzte Aktivierungscodes laufen in 30 Tagen ab
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 08:26:44 +01:00
adminandClaude Opus 5.5 6302c87640 Veyon-Schlüssel je OE erneuern (Härtung Agent-Zugang Schritt 3)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 07:35:13 +01:00
adminandClaude Opus 5.5 6b797b7d40 Home-Verschlüsselung: Einstellung je Organisation, Wahl beim Einlösen, Feld für den Agenten
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 06:45:11 +01:00
adminandClaude Opus 5.5 93d762ca35 Migration 0080: Home-Verschlüsselung je Organisation und Konto
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 06:45:02 +01:00
adminandClaude Opus 5.5 41ea505391 Agent-Bootstrap: Fingerprint als Nachweis, ohne ihn vorerst nur protokolliert
Bisher genügte die device_id für ein neues Agent-Secret. Passt ein
mitgeschickter Fingerprint nicht, wird abgelehnt; fehlt er, wird bis
TUXFLOTTE_AGENT_BOOTSTRAP_FINGERPRINT_PFLICHT=1 nur protokolliert.
platform-docs roadmap/agent-zugang-haertung.md

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 21:17:27 +01:00
adminandClaude Opus 5.5 536fb47e66 Prüfroutine Secure Boot: Firmware-Stand aus Installer und Agent, Einstufung secure_boot_stufe()
Migration 0079: Setup Mode und Drittanbieter-CA im Hardware-Snapshot,
firmware_* an devices aus dem Agent-Check-in. Gerätelisten und
Hardware-Endpunkt liefern firmware + secure_boot_stufe.
platform-docs roadmap/secure-boot-verschluesselung.md Schritt 3

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 18:47:04 +01:00
adminandClaude Opus 5.5 8c9c2ce040 Migration 0078: Merkmal Kiosk (Mint, Debian)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 13:52:14 +01:00
adminandClaude Opus 5.5 ec0ea8a777 Migration 0077: elf neue App-Merkmale, Teams als Webapp-Vorlage
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 09:25:03 +01:00
adminandClaude Opus 5.5 2e855f3572 Neue Organisationen: Gerätenamen-Präfix aus dem Namen, zwei Stellen
Erstkontakt-Probelauf 25.10.2026: neue Organisationen hatten kein Präfix,
Geräte hießen tuxflotte-0001. Jetzt beim Anlegen hostname_praefix aus dem
Namen (Kleinbuchstaben, Umlaute ausgeschrieben, a-z0-9-, höchstens 20
Zeichen) und hostname_stellen 2 (Nutzerwunsch, vorerst). Bestehende
Organisationen unverändert. Neuinstallation erkennt jetzt auch Namen mit
mehr Ziffern als "stellen" (ab dem 100. Gerät), statt umzubenennen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 17:33:11 +01:00
adminandClaude Opus 5.5 917054bf00 Organisation archivieren (Entscheidung A, 25.10.2026)
Bisher ließen sich Organisationen gar nicht entfernen. Jetzt archivieren:
nur ohne aktive Geräte; Medien (enrollment_sessions) widerrufen,
Aktivierungscodes deaktiviert, laufende Einladungen zur Personalisierung
zurückgezogen; die Organisation fehlt danach in der Liste und im
Admin-Dashboard. Daten bleiben erhalten (Migration 0076, archived_at).
Endgültiges Löschen später als eigener Punkt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 17:28:33 +01:00
adminandClaude Opus 5.5 d76fdad01a Personalisierung: Sperre durch eine Neu-Einladung endet mit der Einladung
Befund Erstkontakt 25.10.2026: Eine neue Einladung ohne "Bestehenden
Zugang behalten" sperrte das Konto sofort (auch am Bildschirmschoner einer
laufenden Sitzung); Zurückziehen hob die Sperre nicht auf. Jetzt merkt sich
das Konto die sperrende Einladung (Migration 0075, gesperrt_durch). Wird
sie zurückgezogen, ersetzt, läuft ab oder scheitert am Gerät, ist das
Konto wieder frei; eine ersetzende Einladung übernimmt die Sperre. Von
Hand gesperrte Konten bleiben gesperrt. Die Liste meldet
gesperrt_durch_einladung.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 16:31:41 +01:00
adminandClaude Opus 5.5 a6f5021d40 Spiegel: Schlüssel stabil/vorab statt der Ausrollstufen testing/vorab
Seit 5210186 (Ausrollstufe stabil heißt testing) prüften Spiegel-Bau und
stand.json-Laden gegen AUSROLLSTUFEN. Der Spiegel heißt aber weiter
"stabil", sein Archiv wurde nicht mehr gebaut und Geräte von
Testing-Organisationen fielen auf den Git-Weg (ansible-content-stabil über
Gitea) zurück. Gefunden am frisch installierten Gerät im
Erstkontakt-Probelauf (ansible_weg=git).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 15:46:01 +01:00
adminandClaude Opus 5.5 a4d9d7e2fe Gelöschtes Gerät einer anderen Organisation gibt den Fingerabdruck frei
Beim Erstkontakt-Probelauf blockierte das in Liebherr archivierte
Liebherr-83 die Neuinstallation derselben Hardware für eine neue
Organisation. Der alte Datensatz bleibt als Verlauf, sein Fingerabdruck
bekommt das Suffix :archiv:<id>. Aktive Geräte anderer Organisationen
bleiben weiterhin gesperrt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 15:30:37 +01:00
adminandClaude Opus 5.5 9a7b20b6a5 Einstieg Schritt 4: Dashboard-Angaben für Erste Schritte, Meldungen mit Standort/Zweck statt OE
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 12:47:34 +01:00
adminandClaude Opus 5.5 efb2c0b65f Einstieg Schritt 3: Installation (Bereitstellungsvorlage) aus der Ziel-OE wählen, wenn keine angegeben
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 12:44:19 +01:00
adminandClaude Opus 5.5 dd5c5629f3 Einstieg Schritt 2: WLAN der Organisation als Einstellung, an alle Geräte (Rolle org-wlan)
Migration 0074: organizations.org_wlan (Optionen der Rolle, Passwort
verschlüsselt). GET/PUT /api/v1/organizations/{id}/org-wlan; im
Auftragskatalog gilt es für org-wlan, solange OE/Gruppe nichts festlegt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 12:41:05 +01:00
adminandClaude Opus 5.5 5210186126 Einstieg Schritt 1: Art der Organisation bringt Standard-Workspace mit, Ausrollstufe stabil heißt testing
Migration 0073: kundengruppen.standard_workspace_id (Schule: Schulcomputer
(Mint)); neue Organisationen bekommen Bereitstellungsvorlage und Workspace an
"Neue Geräte". Ausrollstufe 'stabil' -> 'testing' (Repo/Spiegel bleiben).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 12:36:55 +01:00
adminandClaude Opus 5.5 2a734497ed Passwort vergessen: Konto aus dem QR-Code (ADR-0041, 25.10.2026)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 10:36:06 +01:00
adminandClaude Opus 5.5 da44fd1c6a Passwort vergessen per Adresse (ADR-0041, 24.10.2026)
Je eingerichtetem Konto mit der Adresse ein Link, auch auf mehreren
Geräten; Begrenzung je Konto mit dem Kiosk-Weg geteilt, Konten an der
Grenze still übergangen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 11:09:56 +02:00
adminandClaude Opus 5.5 bcfe411290 Personalisierung per Einladung statt Aktivierungscode (ADR-0041, 24.10.2026)
Kunden-Admin trägt die Adresse ein (nur mit Merkmal), der Link (7 Tage,
einmalig) führt zu Anmeldename und Passwort; Stand-Seite per abgeleitetem
Token. Migration 0072: Stand eingeladen, Code-Spalten optional, laufende
Codes zurückgezogen. Code-Endpunkte entfernt; Passwort-vergessen-Kiosk
bleibt bis zur Umstellung der Rolle.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 10:52:14 +02:00
adminandClaude Opus 5.5 2f6dfd585b Ausgegebene Medien löschen, Gerät löschen deprovisioniert zusätzlich
DELETE /api/v1/organizations/<org>/enrollment-sessions/<id> entfernt nur
nicht mehr nutzbare Medien (widerrufen, abgelaufen, aufgebraucht).
archive_device() entzieht jetzt auch das Agent-Secret: ein gelöschtes Gerät
checkte bisher weiter ein (Liebherr-47, 03.10.2026).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 07:49:53 +02:00
adminandClaude Opus 5.5 5284bb470b README: Deploy über die anode-Wrapper, Plattform-Ereignisse
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 17:32:46 +02:00
adminandClaude Opus 5.5 844faa2aec Dashboard: Ampel je Gerät, Plattform-Ereignisse (Migration 0071)
_geraete_ampel(): rot bei Fehlern im letzten gemeldeten Lauf oder Platte
>= 95 %, gelb bei knappen Ressourcen oder länger/nie nicht gemeldet, mit
Gründen; für Kunden- und Admin-Dashboard. Tabelle plattform_ereignisse:
neue Stände vorab/stabil schreibt der Spiegel-Thread, Deploy/Migration/
Boot-Medium die Wrapper auf anode. Admin-Dashboard liefert die letzten 30.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 17:23:03 +02:00
adminandClaude Opus 5.5 10f5030995 Webapps standardmäßig nur im Menü, Desktop-Symbol per Häkchen
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 15:01:53 +02:00
adminandClaude Opus 5.5 fe72c401c4 Migration 0069: Beschreibung des Merkmals Veyon für Kunden
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 11:30:09 +02:00
adminandClaude Opus 5.5 b8f3b25bda Agent-Fassung "freigegeben": die in der Ausrollstufe festgelegte (ADR-0046 Schritt 3)
Für postinstall.sh: liest tuxflotte_agent_commit aus roles/agent/defaults/main.yml
im aktuellen Spiegel-Stand der Stufe des Geräts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 09:52:50 +02:00
adminandClaude Opus 5.5 999b197dd5 Check-in speichert ansible_weg (ADR-0046 Schritt 2), Migration 0068
Der Agent meldet seit 54f76f1, ob er den Ansible-Stand als Archiv von
anode, per Git oder per Git-Rückfall bezogen hat. Nur die drei bekannten
Werte werden gespeichert; Gerätelisten liefern das Feld mit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 09:40:42 +02:00
adminandClaude Opus 5.5 4e1fae12d0 Spiegel: geladenen Stand beim Start melden
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 19:30:27 +02:00
adminandClaude Opus 5.5 a54c21c7b2 Spiegel-Meldungen sofort ins Journal (stdout ist unter systemd gepuffert)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 19:30:20 +02:00
adminandClaude Opus 5.5 2fae14cfe0 ADR-0046 Schritt 1: Spiegel auf anode, Archiv je Stand, ansible_stand im Check-in
- Hintergrund-Thread spiegelt ansible-content (vorab), -stabil und
  provisioning-agent alle 60 s nach data/spiegel, Archiv (tar.gz + SHA-256)
  je Stand, die letzten drei je Stufe bleiben abrufbar
- Check-in liefert zusätzlich ansible_stand {commit, sha256}; ansible_repo
  bleibt als Rückfall
- GET /api/v1/agent/ansible/<commit>.tar.gz und
  /api/v1/agent/fassung/<commit>/<datei> nur mit Agent-Secret
  (Authorization + X-Tuxflotte-Geraet), nur zustehende Stände

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 19:28:15 +02:00
adminandClaude Opus 5.5 d90ce99180 Org-Ressourcen für alle Organisationen freischalten
Rollen sind in ansible-content-stabil (c219e3b) freigegeben.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 19:19:46 +02:00
adminandClaude Opus 5.5 a7d22412b8 API-Doku (/docs, /redoc, /openapi.json) abschalten, Fedora-Kickstart-Endpunkt entfernen
Beides war über anode.tuxflotte.de ohne Anmeldung erreichbar (Durchsicht
18.10.2026, ADR-0046 Abschnitt 'Unabhängig davon'). Health-Check des
Deploys läuft seit infra 7c7069b über /health.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 18:20:14 +02:00
adminandClaude Opus 5.5 fc4e2c34b2 Merge branch 'passwort-vergessen'
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 10:30:17 +02:00
adminandClaude Opus 5.5 46b875ea7e Personalisierung: Passwort vergessen per Mail-Link, Modus im Check-in, Admin-Reset ohne Änderungszwang (Migration 0067, ADR-0041 18.10.)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 10:26:35 +02:00
adminandClaude Opus 5.5 7d889b9a61 Merge branch 'passwort-reset'
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 10:00:22 +02:00
adminandClaude Opus 5.5 6ea1f876e5 Personalisierung: Passwort-Reset durch die Verwaltung (Migration 0066, ADR-0041 18.10.)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 09:57:54 +02:00
adminandClaude Opus 5.5 2a8514a1a0 Merge branch 'personalisierung-ausblenden'
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 09:35:58 +02:00
adminandClaude Opus 5.5 7d4812b3dc Personalisierung: Option anmeldung_anbieten im Check-in (ADR-0041, 18.10.)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 09:32:50 +02:00
adminandClaude Opus 5.5 53b60ad05a Merge branch 'personalisierung-merkmal'
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 17:02:33 +02:00
adminandClaude Opus 5.5 b4c77689fd Personalisierung Schritt 3: Konten im Check-in, Rückmeldung des Agents, Sperren, Neuinstallation
Check-in liefert persoenliche_konten (anlegen mit Hash, aktiv, sperren,
entfernen). /api/v1/agent/persoenliche-konten nimmt die Ergebnisse an:
angelegt löscht den Hash und merkt ohne "Bestehenden Zugang behalten" die
übrigen Konten zum Entfernen vor. Ein Code ohne Kästchen sperrt bestehende
Konten sofort. Sperren/Entsperren je Konto. Eine Neuinstallation beendet
alle Personalisierungen des Geräts. Migration 0065 um gesperrt, entfernen,
geraet_meldung und Status fehlgeschlagen ergänzt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 15:55:51 +02:00
adminandClaude Opus 5.5 e12f2206a4 Personalisierung: Code prüfen ohne Verbrauch (für das zweistufige Formular)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 15:32:08 +02:00
adminandClaude Opus 5.5 327bf948df Personalisierung Schritt 2: Aktivierungscode, Einreichen, Bestätigen, E-Mail-Domänen (Migration 0065)
Code je Gerät (7 Tage, nur Hash gespeichert), Einreichen mit Domänen- und
Anmeldenamenprüfung (Passwort kommt nur als SHA-512-crypt), Bestätigung
binnen einer Stunde, verfallene Vorgänge verlieren Hash und Adresse. Die
Platzhalterseite /personalisierung entfällt, das Formular liegt in der
Kundenplattform.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 15:28:18 +02:00
adminandClaude Opus 5.5 90586094f0 Migration Personalisierung auf 0064 (0062/0063 inzwischen auf main belegt)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 15:01:27 +02:00
adminandClaude Opus 5.5 e72d9da725 Merkmal personalisierung (Migration 0062) und Hinweisseite /personalisierung
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 15:01:27 +02:00
admin 46ec2f5151 Merge branch 'veyon-schluessel' 2026-10-15 14:06:41 +02:00
adminandClaude Opus 5.5 960c4cb092 Migration 0063: Merkmal fileserver heisst Gemeinsame Ablage (eingebunden)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 13:58:16 +02:00
adminandClaude Opus 5.5 a49252a81a Veyon: Schluesselpaar je OE, Check-in reichert Optionen an (Migration 0063)
Bauplan Schritt 1 (platform-docs roadmap/veyon-schluesselverteilung-
diskussion-2026-10-14.md). Paar beim ersten Bedarf erzeugt (RSA 4096,
PKCS#8/SPKI-PEM wie veyon-cli), privat Fernet-verschluesselt. Optionen:
veyon_schluesselname, veyon_public_pem, veyon_raum, veyon_lehrer; nur
Lehrergeraete zusaetzlich veyon_private_pem und veyon_rechner
(<hostname>.local, ohne sich selbst). Lehrer = Haekchen veyon_lehrer an
irgendeiner aktiven Gruppe. Fehler brechen den Check-in nicht ab.
Getestet gegen eine Wegwerf-Datenbank mit allen Migrationen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 13:55:51 +02:00