From c09aff49df4198f8e5eb443f6a0b93dffd6f5435 Mon Sep 17 00:00:00 2001 From: Thomas Stallinger Date: Tue, 1 Sep 2026 17:54:02 +0200 Subject: [PATCH] devices: archivierte/deprovisionierte Geraete bei Reaktivierung entsperren MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit load_or_create_device() aktualisierte bei einem bekannten device_fingerprint bisher nur hostname/last_seen - archived_at/deprovisioned_at blieben unangetastet. Live gefunden (02.09.2026, echter Hardware-Test): ein per "Gerät löschen" archiviertes Geraet (archive_device(), Soft Delete - Historie bleibt erhalten) blieb nach einer frischen Neuinstallation derselben physischen Hardware (gleicher device_fingerprint, neue /api/v1/activate-Anfrage) dauerhaft aus fetch_devices_for_organization() verschwunden, weil archived_at nie zurueckgesetzt wurde - fuer den Nutzer sah es aus, als waere das neu registrierte Geraet nie angekommen. Ein erfolgreicher /api/v1/activate-Aufruf ist der eindeutigste mögliche Beweis, dass ein Geraet wieder aktiv genutzt wird - setzt jetzt beide Felder explizit auf NULL zurueck. --- app.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/app.py b/app.py index e940390..d9d0f39 100644 --- a/app.py +++ b/app.py @@ -275,12 +275,24 @@ def load_or_create_device( raise RuntimeError( "Das Gerät ist bereits einer anderen Organization zugeordnet." ) + # archived_at/deprovisioned_at explizit mit zuruecksetzen (nicht + # nur hostname/last_seen): live gefunden (02.09.2026) - ein per + # "Gerät löschen" archiviertes Geraet (archive_device(), Soft + # Delete) blieb nach einer frischen Neuinstallation derselben + # physischen Hardware (gleicher device_fingerprint) dauerhaft aus + # fetch_devices_for_organization() verschwunden, weil load_or_ + # create_device() den bestehenden Datensatz zwar fand und + # aktualisierte, archived_at dabei aber unangetastet liess - ein + # erfolgreicher /api/v1/activate-Aufruf ist der eindeutigste + # mögliche Beweis, dass das Geraet wieder aktiv genutzt wird. cur.execute( """ UPDATE devices SET hostname = %s, - last_seen = CURRENT_TIMESTAMP + last_seen = CURRENT_TIMESTAMP, + archived_at = NULL, + deprovisioned_at = NULL WHERE id = %s RETURNING id,