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]>
50 lines
1.2 KiB
JSON
50 lines
1.2 KiB
JSON
{
|
|
"name": "DogFather Universe",
|
|
"short_name": "DogFather",
|
|
"description": "Team Dogi und der Treff an einem Ort. Nur mit persoenlichem Zugangscode.",
|
|
"start_url": "/workspace/start.html",
|
|
"id": "/workspace/start.html",
|
|
"scope": "/workspace/",
|
|
"display": "standalone",
|
|
"orientation": "any",
|
|
"lang": "de",
|
|
"dir": "ltr",
|
|
"background_color": "#0a121e",
|
|
"theme_color": "#06090f",
|
|
"share_target": {
|
|
"action": "/workspace/teilen.html",
|
|
"method": "GET",
|
|
"params": {
|
|
"title": "title",
|
|
"text": "text",
|
|
"url": "url"
|
|
}
|
|
},
|
|
"icons": [
|
|
{
|
|
"src": "/assets/img/app-symbole/crew-192.png?v=202609181521",
|
|
"sizes": "192x192",
|
|
"type": "image/png",
|
|
"purpose": "any"
|
|
},
|
|
{
|
|
"src": "/assets/img/app-symbole/crew-512.png?v=202609181521",
|
|
"sizes": "512x512",
|
|
"type": "image/png",
|
|
"purpose": "any"
|
|
},
|
|
{
|
|
"src": "/assets/img/app-symbole/crew-192-maskable.png?v=202609181521",
|
|
"sizes": "192x192",
|
|
"type": "image/png",
|
|
"purpose": "maskable"
|
|
},
|
|
{
|
|
"src": "/assets/img/app-symbole/crew-512-maskable.png?v=202609181521",
|
|
"sizes": "512x512",
|
|
"type": "image/png",
|
|
"purpose": "maskable"
|
|
}
|
|
]
|
|
}
|