Files
d4rk_media/tools/proxy-pruefen.ps1
D4rkst3randClaude Opus 5 463a821199 feat: der Dienst heisst media.d4rkst3r.de -- beide Namen liefern weiter aus
PUBLIC_URL umgestellt. FILES_HOST ist leer, der Dienst achtet also gar nicht
auf den Hostnamen, und in NPM stehen beide auf DEMSELBEN Host -- die drei
^~-Bloecke gelten damit fuer beide. Nachgemessen: unter beiden Namen health 200
und dasselbe Bild, bytegleich.

Nachgezogen:

    7 Stellen in den Ressourcen   d4rk_phone/config.lua (2)
                                  d4rk_photostudio/config.upload.lua
                                  d4rk_photostudio/config.upload.example.lua (2)
                                  d4rk_photostudio/settings.json (2)
    2 Watchdog-Eintraege im Bot   inklusive Anzeigename
   16 Stellen in Doku/Werkzeugen  README, docs/API.md, Home.md,
                                  npm-advanced.conf, proxy-pruefen.ps1,
                                  uebernehmen.ps1, .env.example

Die Freigabe-Links zeigen von selbst auf den neuen Namen -- sie werden aus
PUBLIC_URL gebaut und stehen nirgends gespeichert. Die alten funktionieren
weiter.

DIE ROADMAP BEHAELT DEN ALTEN NAMEN, an sechzehn Stellen und mit Absicht: dort
steht die Geschichte, warum er ueberhaupt "fivemanage" hiess. Sie zu ersetzen
machte aus einer Begruendung Unsinn.

ZWEI DINGE, DIE DABEI AUFFIELEN.

Cloudflare stand vor dem neuen Namen und brach die WebP-Auslieferung: der
Cache-Schluessel kennt Accept nicht, also bekam ein Aufrufer OHNE
"Accept: image/webp" die WebP-Fassung aus dem Zwischenspeicher -- unsere
eigenen Bytes unter einem .png-Namen. Nach dem Umstellen auf DNS-only gemessen
und in Ordnung: ohne Accept image/png 12295 B, mit Accept image/webp 2270 B,
Server: openresty, vary: Accept, dreimal hintereinander stabil.

Und der Lua-Syntaxtest schlug bei d4rk_phone/config.lua fehl -- an Zeile 93,
`customModel = \`prop_player_phone_02\``. Das ist kein Schaden, sondern eine
CfxLua-Erweiterung: Backticks sind dort ein joaat-Hash und in Standard-Lua 5.4
ein Syntaxfehler. 85 davon stecken in der Datei. luac -p taugt fuer
CfxLua-Dateien also nicht; geprueft wurde stattdessen, dass genau die zwei
URL-Zeilen anders sind.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 01:02:28 +02:00

115 lines
4.9 KiB
PowerShell

# Sitzt der NPM-Block? Eine Antwort, keine Vermutung.
#
# pwsh -File tools\proxy-pruefen.ps1
#
# Nach dem Einfuegen von docs\npm-advanced.conf und "Save" in NPM ausfuehren.
# Das Skript AENDERT NICHTS -- es misst nur, was ueber die Leitung kommt.
#
# WARUM ES DAS GIBT: der Block wurde schon einmal fuer eingefuegt gehalten und
# war es nicht. Die Kopfzeile sagt es eindeutig, aber man muss sie eben ansehen.
param(
[string]$Basis = 'https://media.d4rkst3r.de',
# Fuer die API-Messung. Ohne ihn wird sie uebersprungen -- sie braucht einen
# gueltigen Token, um "mit" und "ohne" unterscheiden zu koennen.
[string]$Token = ''
)
$ErrorActionPreference = 'Continue'
$fehler = 0
function Kopf([string]$url, [hashtable]$header = @{}) {
try {
$a = Invoke-WebRequest -Uri $url -Method Head -Headers $header -SkipHttpErrorCheck `
-MaximumRedirection 0 -ErrorAction Stop
return @{ code = [int]$a.StatusCode; kopf = $a.Headers }
} catch {
return @{ code = 0; kopf = @{}; fehler = $_.Exception.Message }
}
}
function Wert($kopf, [string]$name) {
foreach ($k in $kopf.Keys) {
if ($k -ieq $name) { return ($kopf[$k] -join ', ') }
}
return ''
}
function Zeile([string]$was, [bool]$gut, [string]$gemessen) {
$zeichen = if ($gut) { ' [ok] ' } else { ' [!!] ' }
$farbe = if ($gut) { 'Green' } else { 'Red' }
Write-Host ($zeichen + $was.PadRight(42) + $gemessen) -ForegroundColor $farbe
if (-not $gut) { $script:fehler++ }
}
Write-Host ''
Write-Host "Messe $Basis" -ForegroundColor Cyan
Write-Host ''
# -- 1. Die Dateien ------------------------------------------------------------
#
# Unsere Vorgabe ist "public, max-age=300". Kommt etwas anderes an, hat
# assets.conf sie ueberschrieben -- dann fehlt der Block.
$f = Kopf "$Basis/f/vehicles/adder.webp"
$cc = Wert $f.kopf 'Cache-Control'
Zeile '/f/ Cache-Control' ($cc -match 'max-age=300') $(if ($cc) { $cc } else { '(keine)' })
# -- 2. Die Vorschaubilder -----------------------------------------------------
$t = Kopf "$Basis/t/vehicles/adder.webp"
$cc = Wert $t.kopf 'Cache-Control'
Zeile '/t/ Cache-Control' ($cc -match 'max-age=60\b') $(if ($cc) { $cc } else { '(keine)' })
# -- 3. Die API, und das ist die entscheidende ---------------------------------
#
# EIN EINZELNER AUFRUF TAUGT HIER NICHT, und das ist beim Schreiben dieses
# Skripts aufgefallen: "ohne Token -> 401" sah nach Erfolg aus, war aber nur
# ein zwischengespeicherter 401, den der Proxy an ALLE ausliefert -- gemessen
# gab er ihn sogar Aufrufern MIT gueltigem Token.
#
# Verlaesslich ist nur das Paar auf einer FRISCHEN Adresse, die noch in keinem
# Zwischenspeicher liegt:
#
# mit Token -> 200 (der Dienst antwortet)
# ohne Token -> 401 (der Proxy hat NICHT weggelegt) <- gut
# ohne Token -> 200 (er hat weggelegt) <- Block fehlt
#
# Die Adresse endet auf ".webp", damit sie ueberhaupt in die assets.conf-Regel
# faellt -- ohne diese Endung wuerde die Messung nichts messen.
if (-not $Token) {
Write-Host ' [--] /api/ (uebersprungen) kein -Token uebergeben' -ForegroundColor DarkGray
Write-Host ' Dashboard -> Token -> einen anlegen, dann:' -ForegroundColor DarkGray
Write-Host ' pwsh -File tools\proxy-pruefen.ps1 -Token d4rk_...' -ForegroundColor DarkGray
} else {
$zufall = -join ((1..12) | ForEach-Object { 'abcdefghijklmnopqrstuvwxyz0123456789'[(Get-Random -Max 36)] })
$probe = "$Basis/api/exists/probe-$zufall.webp"
$mit = Kopf $probe @{ Authorization = "Bearer $Token" }
Zeile '/api/ mit Token -> 200' ($mit.code -eq 200) "HTTP $($mit.code)"
$ohne = Kopf $probe
Zeile '/api/ dieselbe Adresse ohne Token -> 401' ($ohne.code -eq 401) `
$(if ($ohne.code -eq 200) { 'HTTP 200 — der Proxy gibt sie weiter!' } else { "HTTP $($ohne.code)" })
}
# Die Abfrageform ist von sich aus dicht -- sie muss auch OHNE den Block 401
# geben. Faellt SIE durch, stimmt etwas am Dienst und nicht am Proxy.
$b = Kopf "$Basis/api/exists?pfad=vehicles/adder.webp"
Zeile '/api/exists?pfad ohne Token -> 401' ($b.code -eq 401) "HTTP $($b.code)"
Write-Host ''
if ($fehler -eq 0) {
Write-Host ' Der Block sitzt. Nichts weiter zu tun.' -ForegroundColor Green
} else {
Write-Host " $fehler Messung(en) sagen: der Block ist NICHT wirksam." -ForegroundColor Red
Write-Host ''
Write-Host ' Naechste Schritte:' -ForegroundColor Yellow
Write-Host ' 1. In NPM den Proxy-Host oeffnen -> Advanced -> Inhalt von'
Write-Host ' docs\npm-advanced.conf einfuegen -> SAVE druecken.'
Write-Host ' 2. Gegenpruefen, was NPM daraus gemacht hat:'
Write-Host ' docker exec npm sh -c "grep -n ''location'' /data/nginx/proxy_host/9.conf"'
Write-Host ' Stehen dort ^~ /f/, ^~ /t/ und ^~ /api/, ist gespeichert worden.'
Write-Host ' 3. Dieses Skript erneut ausfuehren.'
}
Write-Host ''
exit $(if ($fehler -eq 0) { 0 } else { 1 })