Add FileFlows ApiKey guard against [REDACTED] key corruption
Die FileFlows-API liefert ApiKey-Felder im GET als [REDACTED]. Ein Save aus der Web-UI (oder GET->PUT-Roundtrip) schreibt diesen Platzhalter in die DB, wodurch alle vier Arr-Manual-Import-Nodes still mit 401 fehlschlagen. Der n8n-Handoff bleibt auf processing, movetdarr.sh pollt weiter und der SAB-Job haengt bis zum 24h-Timeout in der Queue. Negativtest bestaetigt: ein sabotierter Key korrumpiert alle vier, weil der GET alle vier als [REDACTED] ausliefert. Guard prueft die FileFlows-SQLite auf ApiKeys != 32 Zeichen und schreibt die echten Keys via Butler-Proxy zurueck. Laeuft als systemd-Timer alle 15min auf tdarr (cron dort inaktiv).
This commit is contained in:
parent
bb90021adc
commit
18e123bdb2
2 changed files with 192 additions and 0 deletions
87
fileflows/guard/README.md
Normal file
87
fileflows/guard/README.md
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
# FileFlows ApiKey Guard
|
||||
|
||||
## Problem
|
||||
|
||||
Die FileFlows-API liefert `ApiKey`-Felder in Flow-Parts beim `GET` grundsätzlich
|
||||
als Literal `[REDACTED]` aus. Wird ein Flow danach gespeichert — aus der Web-UI
|
||||
oder über einen `GET → PUT`-Roundtrip (Scripts, Automationen) — landet dieser
|
||||
Platzhalter in der Datenbank.
|
||||
|
||||
Folge: die Nodes `Sonarr - Trigger Manual Import` und
|
||||
`Radarr - Trigger Manual Import` authentisieren sich mit `[REDACTED]`, die Arr
|
||||
antwortet **401**, der Node bricht **still** ab.
|
||||
|
||||
Fehlerbild in der Kette:
|
||||
|
||||
```
|
||||
SABnzbd (movetdarr.sh) → FileFlows → Arr Manual Import
|
||||
↑ 401, still
|
||||
```
|
||||
|
||||
- n8n Media-Handoff bleibt auf `processing` stehen
|
||||
- `movetdarr.sh` pollt den Handoff-Lease weiter → SAB-Job hängt in der Queue
|
||||
bis zum 24-h-Timeout
|
||||
- Symptom beim Nutzer: "hängt seit Stunden in der Queue"
|
||||
|
||||
**Ein einziger UI-Save zerschießt alle vier Keys gleichzeitig**, weil der GET
|
||||
alle vier als `[REDACTED]` ausliefert (verifiziert per Negativtest: 1 Key
|
||||
sabotiert → 4 Keys in der DB defekt).
|
||||
|
||||
## Lösung
|
||||
|
||||
`ff-apikey-guard.sh` prüft alle Flows in der FileFlows-SQLite auf ApiKeys mit
|
||||
Länge != 32 und schreibt die echten Keys via Butler-Proxy
|
||||
(`PUT /fileflows/api/flow`) zurück.
|
||||
|
||||
Keys kommen aus einer lokalen Map, nie aus Git.
|
||||
|
||||
## Deployment (tdarr, 10.2.1.104)
|
||||
|
||||
```bash
|
||||
sudo install -m 750 fileflows/guard/ff-apikey-guard.sh \
|
||||
/app-config/ff-guard/ff-apikey-guard.sh
|
||||
|
||||
# Butler-Token
|
||||
printf '%s' '<butler-token>' | sudo tee /app-config/ff-guard/butler.token
|
||||
sudo chmod 600 /app-config/ff-guard/butler.token
|
||||
|
||||
# Key-Map: "<port> <apikey>" pro Zeile, Keys aus den Arr-config.xml auf 10.2.1.100
|
||||
# 8989 sonarrUHD / 8990 sonarrFHD / 7878 radarrUHD / 7879 radarrFHD
|
||||
sudo chmod 600 /app-config/ff-guard/arr-keys.map
|
||||
```
|
||||
|
||||
Läuft als systemd-Timer alle 15 Minuten (`cron` ist auf tdarr inaktiv):
|
||||
|
||||
```
|
||||
/etc/systemd/system/ff-apikey-guard.service Type=oneshot
|
||||
/etc/systemd/system/ff-apikey-guard.timer OnUnitActiveSec=15min
|
||||
```
|
||||
|
||||
```bash
|
||||
sudo systemctl enable --now ff-apikey-guard.timer
|
||||
```
|
||||
|
||||
## Betrieb
|
||||
|
||||
```bash
|
||||
# Log
|
||||
sudo tail /app-config/ff-guard/guard.log
|
||||
|
||||
# Manuell prüfen/reparieren
|
||||
sudo systemctl start ff-apikey-guard.service
|
||||
|
||||
# Timer-Status
|
||||
systemctl list-timers ff-apikey-guard.timer
|
||||
```
|
||||
|
||||
Logzeilen (Datum TT.MM.JJJJ):
|
||||
|
||||
- `OK: alle Flow-ApiKeys 32 Zeichen` — nichts zu tun
|
||||
- `WARNUNG: defekte ApiKeys in Flow <uid> — repariere`
|
||||
- `Flow <uid> repariert: N Key(s) zurueckgeschrieben (HTTP 200)`
|
||||
|
||||
## Nach einem UI-Save immer prüfen
|
||||
|
||||
Wer einen Flow in der FileFlows-UI speichert, sollte danach den Guard anstoßen
|
||||
oder maximal 15 Minuten auf den Timer warten. Vorher schlagen alle
|
||||
Arr-Importe still fehl.
|
||||
Loading…
Add table
Add a link
Reference in a new issue