# Stationen und Medien prüfen `npm run moderate` zeigt unter jeder Strecke eine Tabelle mit Stations-ID, Platz (ab 1, sortiert nach `sequence, id`), Beschreibung und Erstelldatum. Bei leerer Beschreibung erscheint der Titel. Zeilenumbrüche werden nur für die Tabellenanzeige zusammengefasst. Die Datenbank wird lesend geöffnet. ## Dauerhafte Prüflinks In `.env` ergänzen: ```dotenv MODERATION_REVIEW_URL=https://wegwichtel.de/moderation/api ``` Die Tabelle zeigt für jedes Bild und jede Tonaufnahme einen eigenen Link. Gelöschte Strecken erhalten keine Links. Ohne diese Einstellung bleibt die Linkspalte leer. Zugangsdaten gehören nicht in URLs oder `.env`. Es gibt keine Einmal-Tokens, keine zusätzliche Datenbanktabelle und kein PHP. Eine Datenbank-Neuinitialisierung ist für diese Änderung nicht nötig. ## Anmeldung mit Nginx und htpasswd `nginx/moderation-review.location.conf` in den bestehenden HTTPS-server-Block aufnehmen. Der geschützte Pfad `/moderation/api/` nutzt die vorhandene Node-API. GET und HEAD sind erlaubt; schreibende Methoden sind gesperrt. Nginx prüft Benutzername und Passwort und leitet die Zugangsdaten nicht an Node weiter. Die Vorlage verweigert HTTP; die Anmeldung muss über HTTPS erfolgen. Auf Debian/Ubuntu beispielsweise: ```bash sudo apt install apache2-utils sudo htpasswd -c /etc/nginx/wegwichtel-moderation.htpasswd moderator sudo chown root:www-data /etc/nginx/wegwichtel-moderation.htpasswd sudo chmod 640 /etc/nginx/wegwichtel-moderation.htpasswd sudo nginx -t sudo systemctl reload nginx ``` `www-data` gegebenenfalls an den Nginx-Benutzer anpassen. `-c` nur beim ersten Anlegen benutzen, damit bestehende Benutzer nicht überschrieben werden. Beim Öffnen eines Prüflinks erscheint die Anmeldeabfrage des Internetbrowsers. Bilder und Audio nutzen die bestehenden Datei-Endpunkte einschließlich Range-Requests. Die Vorlage ersetzt nicht die vorhandene Server-Konfiguration. Wichtig für den Umfang: Die Authentifizierung schützt den Moderationspfad. Die bisherigen `/api/`-Endpunkte bleiben entsprechend dem bisherigen Verhalten zugänglich, auch für noch nicht freigegebene aktive Strecken. Das entspricht bereits online verfügbaren Daten; es ist keine Zugriffssperre für unveröffentlichte Inhalte. Eine solche Sperre müsste separat für die öffentliche API umgesetzt werden. ## Falls das vorherige Archiv bereits eingebaut wurde Die Dateien `tools/php/moderation-review.php` und `test/php/test_moderation_review.py` sowie den alten PHP-Location-Block entfernen. Den npm-Eintrag `test:php` entfernen und `MODERATION_TOKEN_TTL_SECONDS` aus `.env` löschen. Eine bereits angelegte Tabelle `moderation_review_tokens` wird nicht mehr benutzt; sie kann bestehen bleiben. Die neuen Dateien ersetzen keine Datenbank und löschen keine Strecken. ## Tests Python-Tests prüfen Tabellenreihenfolge, stabile Bild-/Audiolinks, gelöschte Strecken, URL-Konfiguration und dass die Anzeige die SQLite-Datei nicht verändert. Nginx muss auf dem Zielserver mit `nginx -t` und anschließend über HTTP geprüft werden: ohne oder mit falschem Passwort 401, mit gültigem Passwort Dateiabruf; schreibende Methoden dürfen keine Änderung auslösen.