diff --git a/packages/tesm-core/pyproject.toml b/packages/tesm-core/pyproject.toml index f4c5c4e..3f4366b 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.8.7" +version = "2.8.8" 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/static/tesm_core/js/screen.js b/packages/tesm-core/src/tesm_core/static/tesm_core/js/screen.js index 99f85f8..bbff37c 100644 --- a/packages/tesm-core/src/tesm_core/static/tesm_core/js/screen.js +++ b/packages/tesm-core/src/tesm_core/static/tesm_core/js/screen.js @@ -11,25 +11,18 @@ import RFB from "../vendor/novnc/core/rfb.js"; -// Sicherheitsverfahren, die ohne Zugangsdaten auskommen. Bietet der Server -// eines davon an und haben wir keine, nehmen wir es -- auch wenn der Server -// ein anderes zuerst nennt. +// Zwei Eingriffe in private Methoden der mitgelieferten Bibliothek -- beide +// nur, um zu *erfahren*, was schiefging; keiner greift in die Verhandlung ein. +// Bewusst hier und nicht in der Bibliothek selbst: eine neue Fassung von noVNC +// laesst sich dann austauschen, ohne eine Aenderung nachzupflegen -- faellt +// eine Methode weg, entfaellt nur die Auskunft, nicht die Sitzung. // -// Warum das noetig ist: noVNC waehlt "das erste, das ich kann, in der -// Reihenfolge des Servers". Ein RealVNC Server nennt RA2ne vor "ohne -// Authentifizierung"; der Browser liefe also in eine Passwortabfrage, obwohl -// daneben ein Weg offensteht, den auch der RealVNC Viewer nimmt. Wer ein -// Passwort hinterlegt hat, behaelt die Reihenfolge des Servers -- dann ist -// der angemeldete Weg der bessere. -const OHNE_ZUGANGSDATEN = new Set([1]); - -// Drei Eingriffe in private Methoden der mitgelieferten Bibliothek. Bewusst -// hier und nicht in der Bibliothek selbst: eine neue Fassung von noVNC laesst -// sich dann austauschen, ohne eine Aenderung nachzupflegen -- faellt eine -// Methode weg, greift der jeweilige Eingriff nicht mehr, und die Sitzung -// laeuft wieder wie ohne ihn. Kein stiller Bruch. -const istUnterstuetzt = RFB.prototype._isSupportedSecurityType; - +// Es stand hier einmal ein dritter, der die Wahl des Sicherheitsverfahrens +// umbog: ohne hinterlegte Zugangsdaten sollte ein Verfahren ohne Anmeldung +// gewinnen, weil der Server RA2ne zuerst nennt. Gut gemeint und falsch -- +// genau dieser Griff hat eine Sitzung, die lief, zum Abbruch gebracht: der +// RealVNC Server bietet "ohne Authentifizierung" zwar an, legt bei dieser Wahl +// aber auf. Die Reihenfolge des Servers ist seine Entscheidung, nicht unsere. // Den *Grund* eines Fehlschlags kennt nur ``_fail`` -- das Ereignis // "disconnect" traegt ihn nicht, und der Weg ueber die Protokollausgabe // funktioniert nicht: die Bibliothek bindet ``console.error`` beim Laden, also @@ -126,21 +119,6 @@ function starten(wurzel) { letzterGrund = ""; letzterCode = 0; - // Vorauswahl nur, wenn wir nichts anzubieten haben: dann zaehlt der Weg, - // der ohne Zugangsdaten auskommt -- sofern der Server ihn anbietet. - const hatZugangsdaten = Boolean(zugang && (zugang.password || zugang.username)); - const angeboten = (wurzel.dataset.verfahren || "") - .split(",") - .map((wert) => parseInt(wert, 10)) - .filter((wert) => !Number.isNaN(wert)); - const ohnePasswortMoeglich = angeboten.some((wert) => OHNE_ZUGANGSDATEN.has(wert)); - RFB.prototype._isSupportedSecurityType = function (typ) { - if (!hatZugangsdaten && ohnePasswortMoeglich) { - return OHNE_ZUGANGSDATEN.has(typ); - } - return istUnterstuetzt.call(this, typ); - }; - rfb = new RFB(leinwand, adresse, { credentials: zugang, // Eine Bildschirmsitzung soll nicht nebenbei die Zwischenablage des