Lizenzserver 2.8.14: die Ticketgrenze wandert nicht mit den Revisionen

This commit is contained in:
alientim committed 2026-09-16 22:26:30 +02:00
1 parent 98c2b2aa14
commit 34a4923304
3 files changed
+22 -4

No files matched your search

+1 -1
View File
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "tesm-license"
version = "2.8.13"
version = "2.8.14"
description = "TESM-Lizenzserver -- Kunden, Tickets, Lizenzen, Aktivierung"
requires-python = ">=3.11"
dependencies = [
+12 -1
View File
@@ -315,7 +315,18 @@ CREATE UNIQUE INDEX IF NOT EXISTS idx_one_open_license_per_ticket_art
"""
LICENSE_MIGRATIONS: tuple[Migration, ...] = (
Migration(version=1, name="baseline", sql=V1, allow_integrity_error=True),
Migration(
version=1,
name="baseline",
sql=V1,
allow_integrity_error=True,
geaendert_weil=(
"Der eindeutige Index ueber offene Lizenzen zaehlt seit 2.8.12 die Art mit "
"(Testlizenz neben Volllizenz). Eine frische Installation soll ihn gleich "
"richtig anlegen und nicht erst ueber tesm_license/5 umbauen; auf "
"bestehenden Installationen erledigt das die Migration 5."
),
),
Migration(version=2, name="revision-timestamp", sql=V2),
Migration(version=3, name="funktionsgruppe-fuer-admins", fn=uebergang_funktionsgruppe),
Migration(version=4, name="standardgruppen-aufraeumen", fn=uebergang_standardgruppen),
@@ -663,9 +663,16 @@ def ticket_grenze(conn: sqlite3.Connection, license_id: str) -> str | None:
# Eine Testlizenz lebt nach ihren eigenen Regeln und nicht nach dem Ticket.
if str(row["type"]) == "trial":
return None
document = json.loads(str(row["license_document"]))
# Die Spalte, nicht das Dokument. ``resign_license`` setzt im Dokument bei
# **jeder** Revision ein neues ``issued_at`` -- eine Grenze, die darauf
# rechnet, wandert also mit jeder Neusignatur nach vorn. Wer oft genug neu
# signiert, verlaengert damit den Anspruch, ohne das Ticket anzufassen:
# genau die Luecke, die diese Funktion schliessen soll. Live gemessen --
# Zeile 12.09. 17:45, Dokument nach zwei Revisionen 16.09. 20:20.
#
# Die Spalte ``issued_at`` bleibt bei der ersten Ausstellung stehen.
return lic.iso(
lic.parse_iso(str(document["issued_at"])) + timedelta(days=int(ticket["valid_days"]))
lic.parse_iso(str(row["issued_at"])) + timedelta(days=int(ticket["valid_days"]))
)