Version 2.8.23: nicht das teure Verfahren zuerst
This commit is contained in:
1 parent
1c90251b0f
commit
91711a51fc
2 files changed
+48
-9
No files matched your search
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "tesm-core"
|
name = "tesm-core"
|
||||||
version = "2.8.12"
|
version = "2.8.13"
|
||||||
description = "Gemeinsames Anwendungsgeruest (Auth, RBAC, Navigation, Design-System, Migrationen) fuer TESM und TESM-Lizenzserver"
|
description = "Gemeinsames Anwendungsgeruest (Auth, RBAC, Navigation, Design-System, Migrationen) fuer TESM und TESM-Lizenzserver"
|
||||||
requires-python = ">=3.11"
|
requires-python = ">=3.11"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
|||||||
@@ -66,6 +66,24 @@ const HOECHSTENS = 2;
|
|||||||
//: jedes Ereignis, und die Seite stuende stumm bis zum Seitenwechsel.
|
//: jedes Ereignis, und die Seite stuende stumm bis zum Seitenwechsel.
|
||||||
const AUFBAU_GRENZE = 12000;
|
const AUFBAU_GRENZE = 12000;
|
||||||
|
|
||||||
|
//: Verfahren, die im Browser keinen Schluesseltausch kosten.
|
||||||
|
//:
|
||||||
|
//: Der Grund steht in der Bibliothek, `core/ra2.js`: fuer RA2ne erzeugt der
|
||||||
|
//: **Browser** bei jeder Sitzung ein eigenes 2048-Bit-RSA-Schluesselpaar, in
|
||||||
|
//: JavaScript. Die Primzahlsuche dafuer dauert ein bis drei Minuten -- genau
|
||||||
|
//: die Zeit, die zwischen Klick und Bild lag. "Ohne Authentifizierung" (1)
|
||||||
|
//: kostet davon nichts.
|
||||||
|
//:
|
||||||
|
//: Deshalb kommt es zuerst, **wenn der Server es anbietet** und wir nicht
|
||||||
|
//: ohnehin schon wissen, was hier traegt. Das ist nicht dieselbe Vorauswahl
|
||||||
|
//: wie in 2.8.14: die war geraten, diese steht auf einer Messung. Traegt sie
|
||||||
|
//: nicht, nimmt der zweite Anlauf die Reihenfolge des Servers -- dann dauert
|
||||||
|
//: es eben.
|
||||||
|
const OHNE_SCHLUESSELTAUSCH = new Set([1]);
|
||||||
|
|
||||||
|
//: RA2ne. Wird es ausgehandelt, ist die Wartezeit erklaerbar und kein Fehler.
|
||||||
|
const RA2NE = 6;
|
||||||
|
|
||||||
//: Tastenkombinationen, die der Arbeitsplatz selbst abfaengt und die deshalb
|
//: Tastenkombinationen, die der Arbeitsplatz selbst abfaengt und die deshalb
|
||||||
//: einen Knopf brauchen. X11-Keysyms.
|
//: einen Knopf brauchen. X11-Keysyms.
|
||||||
const ALT_LINKS = 0xffe9;
|
const ALT_LINKS = 0xffe9;
|
||||||
@@ -196,6 +214,17 @@ export function starteSitzung(wurzel, quelle) {
|
|||||||
versuche += 1;
|
versuche += 1;
|
||||||
window.clearTimeout(aufbauUhr);
|
window.clearTimeout(aufbauUhr);
|
||||||
aufbauUhr = window.setTimeout(() => {
|
aufbauUhr = window.setTimeout(() => {
|
||||||
|
// Ein ausgehandeltes RA2ne ist kein Fehler, sondern Rechenzeit: der
|
||||||
|
// Browser erzeugt dafuer gerade einen 2048-Bit-Schluessel. Das zu
|
||||||
|
// melden ist das Gegenteil einer Warnung -- es nimmt die Sorge.
|
||||||
|
if (rfb && rfb._rfbAuthScheme === RA2NE) {
|
||||||
|
melden(
|
||||||
|
"Der Server verlangt RA2ne (RSA-AES). Dafür erzeugt der Browser ein " +
|
||||||
|
"2048-Bit-Schlüsselpaar – das dauert ein bis drei Minuten. Bitte warten.",
|
||||||
|
"warnung",
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
melden("Es kommt keine Antwort. Wird geprüft, woran es liegt …", "warnung");
|
melden("Es kommt keine Antwort. Wird geprüft, woran es liegt …", "warnung");
|
||||||
streckeTesten().then((steht) => {
|
streckeTesten().then((steht) => {
|
||||||
melden(
|
melden(
|
||||||
@@ -212,18 +241,28 @@ export function starteSitzung(wurzel, quelle) {
|
|||||||
});
|
});
|
||||||
}, AUFBAU_GRENZE);
|
}, AUFBAU_GRENZE);
|
||||||
|
|
||||||
// Zwei Regeln, beide aus Erfahrung und keine aus Vermutung:
|
// Drei Regeln, alle aus Messung und keine aus Vermutung:
|
||||||
//
|
//
|
||||||
// 1. Was schon einmal getragen hat, kommt zuerst -- aber nur beim ersten
|
// 1. Was schon einmal getragen hat, kommt zuerst.
|
||||||
// Anlauf. Ohne das faengt jede Sitzung wieder mit der ersten Wahl des
|
// 2. Sonst das Verfahren ohne Schluesseltausch -- aber nur, wenn der
|
||||||
// Servers an, die hier schon abgerissen ist, und ein sperrender
|
// Server es nachweislich anbietet (sonst faende noVNC gar keines und
|
||||||
// RealVNC Server laesst sich mit der Absage Minuten Zeit.
|
// scheiterte sofort). RA2ne kostet sonst ein bis drei Minuten
|
||||||
// 2. Was abgerissen ist, wird nicht noch einmal gewaehlt.
|
// Rechenzeit im Browser, jedes Mal.
|
||||||
|
// 3. Was abgerissen ist, wird nicht noch einmal gewaehlt.
|
||||||
|
//
|
||||||
|
// Beides gilt nur fuer den **ersten** Anlauf; danach zaehlt die
|
||||||
|
// Reihenfolge des Servers, abzueglich dessen, was schon abgerissen ist.
|
||||||
const bewaehrt = daten.bewaehrt || 0;
|
const bewaehrt = daten.bewaehrt || 0;
|
||||||
const zuerst = versuche === 1 && bewaehrt > 0 && !gescheitert.has(bewaehrt);
|
const angeboten = daten.verfahren || [];
|
||||||
|
const schnell = angeboten.filter((typ) => OHNE_SCHLUESSELTAUSCH.has(typ));
|
||||||
|
let bevorzugt = 0;
|
||||||
|
if (versuche === 1) {
|
||||||
|
if (bewaehrt > 0 && !gescheitert.has(bewaehrt)) bevorzugt = bewaehrt;
|
||||||
|
else if (schnell.length && !gescheitert.has(schnell[0])) bevorzugt = schnell[0];
|
||||||
|
}
|
||||||
RFB.prototype._isSupportedSecurityType = function (typ) {
|
RFB.prototype._isSupportedSecurityType = function (typ) {
|
||||||
if (gescheitert.has(typ)) return false;
|
if (gescheitert.has(typ)) return false;
|
||||||
if (zuerst) return typ === bewaehrt;
|
if (bevorzugt) return typ === bevorzugt;
|
||||||
return istUnterstuetzt.call(this, typ);
|
return istUnterstuetzt.call(this, typ);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user