Damit Anrufe auch in Netzen zustande kommen, die keine direkte Verbindung zulassen (15-25 % der Faelle). coturn ist installiert, steht aber still, bis die Konfiguration liegt -- ein coturn mit Werkseinstellung ist ein offenes Relais. KEIN FESTES PASSWORT. Es laege dauerhaft im Browser jedes Team-Mitglieds und liesse sich nie entziehen. Der Server rechnet stattdessen bei jeder Abfrage Zugangsdaten, die nach zwoelf Stunden verfallen (server/workspace-turn.js, coturns `use-auth-secret`). Das Geheimnis liegt in einer Datei, nicht in der Datenbank: einstellung- Setzen() schreibt Werte ins Protokoll, und coturn braucht denselben Wert ohnehin in /etc. Die Oberflaeche frischt die Daten vor jedem Anruf auf. Der Chat ist eine App, die tagelang offen bleibt -- wer nur beim Laden holt, telefoniert am zweiten Tag ohne Vermittlung, und es faellt nicht auf: Es scheitern nur die, die sie gebraucht haetten. DIE WICHTIGSTE ZEILE DER KONFIGURATION ist die Sperrliste. Gemessen: dreizehn Dienste lauschen auf diesem Server nur oertlich, darunter Caddys Verwaltung auf 127.0.0.1:2019 -- wer sie erreicht, kann jede Website umleiten. Ohne Sperrliste waere der Vermittlungsserver die Tuer dorthin, und die Anfrage saehe fuer Caddy aus wie von localhost. Geprueft: pruef-anruf.mjs 51 -> 73 Pruefungen. Gegenprobe (Geheimnis als Passwort ausliefern + fremde Zugangsdaten ueberschreiben) macht genau 5 rot, darunter "das Geheimnis steht NIRGENDS in der Antwort". tools/turn-probelauf.sh beweist am echten coturn, was ein fester Vergleichswert nicht kann: dass coturn unsere Rechnung akzeptiert. Beide Seiten koennten sonst konsequent falsch rechnen und jede Pruefung waere gruen. Seine eigene Gegenprobe war zweimal zu Recht rot -- der erste Aufbau mass wegen `-y` gar nicht das Ziel, das er zu messen behauptete, sondern coturns eingebauten Loopback-Schutz. Co-Authored-By: Claude Opus 5 <[email protected]>
120 lines
5.2 KiB
HTML
120 lines
5.2 KiB
HTML
<!doctype html>
|
||
<html lang="de">
|
||
<head>
|
||
<meta charset="utf-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
|
||
<title>Talente · Spicy & Dogi</title>
|
||
<meta name="robots" content="noindex, nofollow" />
|
||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||
<meta name="theme-color" content="#06090f" />
|
||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609181521" />
|
||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609181521" />
|
||
<link rel="stylesheet" href="assets/css/gate.css?v=202609181521" />
|
||
<link rel="stylesheet" href="assets/css/start.css?v=202609181521" />
|
||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609181521" />
|
||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609181521" />
|
||
<!-- Wegen des Kastens „Anfragen“ ueber der Liste. Eine eigene Kopie
|
||
der Regel hier waere die zweite Stelle, an der dieselbe Sache
|
||
anders aussieht. -->
|
||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609181521" />
|
||
<link rel="stylesheet" href="assets/css/module.css?v=202609181521" />
|
||
<link rel="stylesheet" href="assets/css/haus.css?v=202609181521" />
|
||
</head>
|
||
|
||
<body class="start">
|
||
|
||
<div class="schleier" aria-hidden="true"></div>
|
||
|
||
<header class="kopfleiste">
|
||
<button type="button" class="zurueck-knopf" id="zurueck" hidden>
|
||
<svg class="zurueck-knopf__pfeil" viewBox="0 0 24 24" aria-hidden="true">
|
||
<path d="M14.5 5.5 8 12l6.5 6.5" />
|
||
</svg>
|
||
<span class="zurueck-knopf__text">Zurück</span>
|
||
</button>
|
||
<p class="marke"><span class="marke__text"><a class="zurueck" href="start.html">Team Dogi</a> · Talente</span></p>
|
||
<div class="kopfleiste__rechts">
|
||
<span class="wer" id="wer">…</span>
|
||
<button type="button" class="abmelden" id="abmelden">Abmelden</button>
|
||
</div>
|
||
</header>
|
||
|
||
<main class="inhalt inhalt--breit">
|
||
|
||
<section class="kopf-zeile">
|
||
<div>
|
||
<p class="marke">Entwicklung & Nachwuchs</p>
|
||
<h1 class="titel">Talente</h1>
|
||
<p class="unterzeile">
|
||
Zuschauer, die ins Team passen könnten. Ein Trichter, keine Liste –
|
||
jede Stufe hat genau einen nächsten Schritt.
|
||
</p>
|
||
</div>
|
||
</section>
|
||
|
||
<p class="fehler" id="fehler" role="alert" aria-live="polite"></p>
|
||
|
||
<!-- DIE ANFRAGEN GEHOEREN AN DEN ANFANG DIESES TRICHTERS.
|
||
|
||
Wer sich selbst meldet, ist ein Kandidat wie jeder andere -- nur
|
||
dass er die erste Frage ("besteht ueberhaupt Interesse?") schon
|
||
beantwortet hat. Deshalb steht der Weg dorthin auf DIESER Seite
|
||
und nicht als eigene Kachel daneben: Sonst waere aus einem Weg
|
||
zwei Seiten geworden, die man abwechselnd aufmacht.
|
||
|
||
Der Kasten steht ueber der Liste, weil eine unbeantwortete
|
||
Anfrage dringender ist als ein Kandidat, der seit Wochen
|
||
beobachtet wird. -->
|
||
<section id="anfragen-tor" class="bw-tor" hidden></section>
|
||
|
||
<!-- ==================================================================
|
||
HIER STEHEN NAMEN VON MENSCHEN, DIE NICHTS DAVON WISSEN.
|
||
|
||
Diese Seite gehört DogFather und der rechten Hand — sonst niemand,
|
||
keine Agentur, und ganz sicher nicht die Community. Durchgesetzt
|
||
wird das in der Rechtetafel UND in workspace-entwicklung.js; der
|
||
Satz hier ist nur die Erinnerung daran, warum.
|
||
|
||
Deshalb gibt es auch keine Rückmeldung an einen Kandidaten und
|
||
keinen heimlichen Test mit einem Zweitkonto. Wer beobachtet wird,
|
||
ohne es zu wissen, hat ein Recht darauf, dass daraus nichts
|
||
Öffentliches wird.
|
||
============================================================== -->
|
||
|
||
<!-- DER ZUGANGSCODE STEHT AUSSERHALB DER LISTE, und das ist kein
|
||
Schönheitsgrund. Die Liste wird nach jeder Änderung neu
|
||
gezeichnet – stünde der Kasten darin, wäre der Code in genau dem
|
||
Moment wieder weg, in dem er entsteht: wenn die Karte auf „Im
|
||
Team“ springt.
|
||
|
||
DERSELBEN KLASSEN WIE IN „PERSONEN & ZUGÄNGE“. Ein Geheimnis
|
||
sieht im ganzen Haus gleich aus – zwei Gestaltungen für dieselbe
|
||
Sache wären zwei Gelegenheiten, eine davon falsch zu machen. -->
|
||
<div class="code-kasten" id="code-kasten" hidden role="status" aria-live="polite">
|
||
<p class="code-kasten__schild">Zugangscode für <span id="code-name"></span></p>
|
||
<p class="code-kasten__code" id="code-wert"></p>
|
||
<p class="code-kasten__hinweis">
|
||
Dieser Code wird <strong>nur jetzt</strong> angezeigt und ist danach nicht mehr
|
||
abrufbar. Persönlich weitergeben und in Bitwarden ablegen.
|
||
</p>
|
||
<div class="t-text__knoepfe">
|
||
<button type="button" class="knopf knopf--klein" id="code-kopieren">Kopieren</button>
|
||
<button type="button" class="abmelden" id="code-schliessen">Verstanden, schließen</button>
|
||
</div>
|
||
</div>
|
||
|
||
<section id="trichter" class="t-trichter" aria-busy="true"></section>
|
||
|
||
<section id="liste" class="t-liste" aria-busy="true">
|
||
<p class="leise">wird geladen …</p>
|
||
</section>
|
||
|
||
</main>
|
||
|
||
<script src="assets/js/wahl.js?v=202609181521" defer></script>
|
||
<script src="assets/js/bereiche.js?v=202609181521" defer></script>
|
||
<script src="assets/js/kopf.js?v=202609181521" defer></script>
|
||
<script src="assets/js/talente.js?v=202609181521" defer></script>
|
||
</body>
|
||
</html>
|