From f0f0d05e19d7f8bfc8de71afef4d8cb5a6ebe02a Mon Sep 17 00:00:00 2001 From: Tim Eertmoed Date: Wed, 16 Sep 2026 22:47:00 +0200 Subject: [PATCH] Lizenzserver 2.8.16: kein Abgleich in die Vergangenheit --- apps/tesm-license/pyproject.toml | 2 +- .../src/tesm_license/services/issuance.py | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/apps/tesm-license/pyproject.toml b/apps/tesm-license/pyproject.toml index 1bb1307..fb057ec 100644 --- a/apps/tesm-license/pyproject.toml +++ b/apps/tesm-license/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "tesm-license" -version = "2.8.15" +version = "2.8.16" description = "TESM-Lizenzserver -- Kunden, Tickets, Lizenzen, Aktivierung" requires-python = ">=3.11" dependencies = [ diff --git a/apps/tesm-license/src/tesm_license/services/issuance.py b/apps/tesm-license/src/tesm_license/services/issuance.py index c6df816..f7ffa7c 100644 --- a/apps/tesm-license/src/tesm_license/services/issuance.py +++ b/apps/tesm-license/src/tesm_license/services/issuance.py @@ -970,6 +970,24 @@ def lizenz_auf_ticket_setzen( # gibt etwas -- hier ist nichts zurueckzunehmen. changes: dict[str, Any] = {"lifetime": True} else: + # Ein Abgleich, der in die Vergangenheit zeigt, ist kein Abgleich: er + # laesst die Lizenz beim naechsten Heartbeat sofort ablaufen. Das mag + # gewollt sein -- dann heisst es Widerruf und hat einen eigenen Knopf, + # eine eigene Rueckfrage und einen eigenen Eintrag. Hier wird es + # abgewiesen, denn wer "auf die Ticketlaufzeit setzen" drueckt, will + # zwei Angaben zur Deckung bringen und nicht eine Installation + # stilllegen. + # Verglichen wird auf Zeitpunkten, nicht auf Zeichenketten: die + # Lizenzdaten enden auf "Z", ``_now()`` schreibt "+00:00" -- als Text + # sortiert sich das falsch herum. + if lic.parse_iso(str(abweichung["grenze"])) <= datetime.now(timezone.utc): + raise IssuanceError( + "Die Ticketlaufzeit ist bereits abgelaufen " + f"({lic.parse_iso(str(abweichung['grenze'])).strftime('%d.%m.%Y')}) -- ein " + "Abgleich würde diese Lizenz sofort ungültig machen. Verlängern Sie zuerst " + "das Ticket, oder widerrufen Sie die Lizenz bewusst." + ) + # Auch aus einer unbefristeten Lizenz wird hier wieder eine befristete. # Das ist die schaerfste Ruecknahme, die dieses System kennt, und # genau deshalb hat sie einen eigenen Knopf mit eigener Rueckfrage --