From ce22239d789a49bd80154779cb02b4686fb1e2fc Mon Sep 17 00:00:00 2001 From: Tim Eertmoed Date: Fri, 11 Sep 2026 23:45:17 +0200 Subject: [PATCH] Version 2.7.3: Zeugenvermerk einmal und in den Dokumenteigenschaften --- apps/tesm/pyproject.toml | 2 +- apps/tesm/src/tesm/settings_spec.py | 9 +++--- .../tesm/templates/tesm/settings_system.html | 4 ++- packages/tesm-core/pyproject.toml | 2 +- .../tesm-core/src/tesm_core/app_factory.py | 2 +- .../tesm_core/static/tesm_core/js/viewer.js | 28 +++++++++++++++++-- packages/tesm-licensing/pyproject.toml | 2 +- 7 files changed, 38 insertions(+), 11 deletions(-) diff --git a/apps/tesm/pyproject.toml b/apps/tesm/pyproject.toml index 55d9273..6b2827e 100644 --- a/apps/tesm/pyproject.toml +++ b/apps/tesm/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "tesm" -version = "2.7.2" +version = "2.7.3" description = "TESM -- Verwaltung und Ueberwachung von PoE-Endgeraeten und Aruba-Switchen" requires-python = ">=3.11" dependencies = [ diff --git a/apps/tesm/src/tesm/settings_spec.py b/apps/tesm/src/tesm/settings_spec.py index 499dc86..acd260c 100644 --- a/apps/tesm/src/tesm/settings_spec.py +++ b/apps/tesm/src/tesm/settings_spec.py @@ -104,10 +104,11 @@ TESM_SETTINGS: tuple[SettingSpec, ...] = ( True, "bool", "Unterschriften mit dem ablegenden Konto bezeugen", - hint="Unter jede Unterschrift kommt eine Zeile, wer das Dokument in TESM abgelegt " - "hat. Der Name in der Unterschrift ist eine Angabe des Unterschreibenden – wie " - "auf Papier; das Konto daneben ist belegt. Eine Passwortabfrage gibt es dafür " - "nicht.", + hint="Eine Zeile unter der **ersten** Unterschrift nennt das Konto, das das " + "Dokument in TESM abgelegt hat. In den Dokumenteigenschaften und im " + "Änderungsprotokoll steht es ohnehin, unabhängig von diesem Schalter. Der Name in " + "der Unterschrift ist eine Angabe des Unterschreibenden – wie auf Papier; das " + "Konto ist belegt. Eine Passwortabfrage gibt es dafür nicht.", section="fileshare", ), # -- Terminal ----------------------------------------------------------- # diff --git a/apps/tesm/src/tesm/templates/tesm/settings_system.html b/apps/tesm/src/tesm/templates/tesm/settings_system.html index 42b1ee1..f7623f0 100644 --- a/apps/tesm/src/tesm/templates/tesm/settings_system.html +++ b/apps/tesm/src/tesm/templates/tesm/settings_system.html @@ -84,7 +84,9 @@
{{ icon('pencil', size=17) }} Unterschriften
Der Name in der Unterschrift ist eine Angabe des Unterschreibenden – wie auf - Papier. Wer das Dokument in TESM abgelegt hat, ist dagegen belegt. + Papier. Wer das Dokument abgelegt hat, ist dagegen belegt: in den + Dokumenteigenschaften und im Änderungsprotokoll, auf Wunsch zusätzlich + sichtbar unter der ersten Unterschrift.
diff --git a/packages/tesm-core/pyproject.toml b/packages/tesm-core/pyproject.toml index ff78d42..8c9888f 100644 --- a/packages/tesm-core/pyproject.toml +++ b/packages/tesm-core/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "tesm-core" -version = "2.7.2" +version = "2.7.3" description = "Gemeinsames Anwendungsgeruest (Auth, RBAC, Navigation, Design-System, Migrationen) fuer TESM und TESM-Lizenzserver" requires-python = ">=3.11" dependencies = [ diff --git a/packages/tesm-core/src/tesm_core/app_factory.py b/packages/tesm-core/src/tesm_core/app_factory.py index c884e33..32aae1c 100644 --- a/packages/tesm-core/src/tesm_core/app_factory.py +++ b/packages/tesm-core/src/tesm_core/app_factory.py @@ -148,7 +148,7 @@ def create_base_app( #: Wortmarke, ohne Zeile darunter; die Marke selbst zeigen beide #: Anwendungen. auth_tagline: str = "", - app_version: str = "2.7.2", + app_version: str = "2.7.3", built_in_trusted_keys: tuple[str, ...] = (), enable_license: bool = True, template_folder: str | None = None, diff --git a/packages/tesm-core/src/tesm_core/static/tesm_core/js/viewer.js b/packages/tesm-core/src/tesm_core/static/tesm_core/js/viewer.js index cd40a37..748832b 100644 --- a/packages/tesm-core/src/tesm_core/static/tesm_core/js/viewer.js +++ b/packages/tesm-core/src/tesm_core/static/tesm_core/js/viewer.js @@ -280,7 +280,13 @@ async function nachbearbeiten( const hoehe = (png.height / png.width) * breite; seite.drawImage(png, { x: eintrag.x, y: eintrag.y, width: breite, height: hoehe }); const zeilen = [`${eintrag.name} | ${eintrag.zeit}`]; - if (zeuge) zeilen.push(`In TESM abgelegt durch ${zeuge}`); + // Der Zeugenvermerk gehoert zum Dokument, nicht zu jeder Unterschrift: + // unter drei Unterschriften stand dreimal derselbe Satz. Sichtbar + // erscheint er deshalb nur unter der ersten -- fest steht er ohnehin in + // den Dokumenteigenschaften und im Aenderungsprotokoll. + if (zeuge && eintrag === unterschriften[0]) { + zeilen.push(`In TESM abgelegt durch ${zeuge}`); + } // Die Schrift waechst mit der Unterschrift: wer sie kleiner zieht, will // den ganzen Block kleiner haben, nicht eine Zeichnung mit einer // Bildunterschrift in Originalgroesse daneben. @@ -311,6 +317,20 @@ async function nachbearbeiten( } } + if (unterschriften.length) { + // In den Dokumenteigenschaften -- dort sucht man so etwas, und dort steht + // es einmal statt unter jeder Unterschrift. Jeder Betrachter zeigt das + // an, auch ausserhalb von TESM. + const namen = unterschriften.map((eintrag) => eintrag.name); + const wann = unterschriften[unterschriften.length - 1].zeit; + dokument.setAuthor(namen.join(", ")); + dokument.setSubject( + `Unterschrieben am ${wann}` + (zeuge ? ` | in TESM abgelegt durch ${zeuge}` : "") + ); + dokument.setProducer("TESM"); + dokument.setModificationDate(new Date()); + } + if (abschliessen) { // Alle Felder werden Teil der Seite. Danach gibt es kein Formular mehr -- // gewollt: so kann niemand mehr etwas verstellen. @@ -664,7 +684,9 @@ async function pdfBetrachter(behaelter, seiten, url, basis, { formulare = true } const text = document.createElement("div"); text.className = "viewer__unterschrifttext"; text.textContent = `${eintrag.name} | ${eintrag.zeit}`; - if (zeuge) text.textContent += ` / In TESM abgelegt durch ${zeuge}`; + if (zeuge && eintrag === unterschriften[0]) { + text.textContent += ` / In TESM abgelegt durch ${zeuge}`; + } const griff = document.createElement("button"); griff.type = "button"; griff.className = "viewer__unterschriftgriff"; @@ -834,6 +856,8 @@ export function initFilePreview(wurzel = document) { const padAbbrechen = stueck("signabbrechen"); const padHinweis = stueck("signhinweis"); const basis = rumpf.dataset.viewerPdfjs || ""; + // Der Anmeldename, nicht der volle Name: er ist eindeutig, und genau das + // soll die Zeile belegen. const konto = rumpf.dataset.viewerKonto || ""; const bezeugen = rumpf.dataset.viewerZeuge === "1"; // Die Uhr des Servers, nicht die des Tablets: eine verstellte Uhr am Geraet diff --git a/packages/tesm-licensing/pyproject.toml b/packages/tesm-licensing/pyproject.toml index 4db17e5..523725c 100644 --- a/packages/tesm-licensing/pyproject.toml +++ b/packages/tesm-licensing/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "tesm-licensing" -version = "2.7.2" +version = "2.7.3" description = "Ed25519-basiertes Lizenz- und Aktivierungsprotokoll fuer TESM und TESM-Lizenzserver" requires-python = ">=3.11" dependencies = ["cryptography>=42"]