Chybova hlaseni konektoru rikaji, co se stalo, a kam to slo

Duvod od sluzby jde primo do hlasky: z tela odpovedi se vytahne detail,
error_description, message, title, error i seznam missingHeaders. Retezec,
ktery vypada jako JSON, se rozbaluje dal - sluzba iDoklad presne takhle
predava telo od iDokladu samotneho. Kdyz sluzba nenapsala nic, rekne se to.

401 a 403 uz nejsou jedna hlaska. 401 = udaje sluzba dostala a neuznala je.
403 = tvar udaju je v poradku, zakazuje se samo volani.

V kazde hlasce je cela adresa vcetne serveru (ScriptRequestInfo.url),
bez query - v query muze byt tajemstvi. Zaklad adresy je z konfigurace
a konektor ho smi prepsat, takze se neda odvodit z toho, kde je nasazeny
portal. Adresa je videt i na karte konektoru a v odpovedi na test, i kdyz
overeni projde.

Tlacitko Logy na karte konektoru a historie poslednich peti overeni.
Odpoved sluzby dosud existovala jen v odpovedi na test, tedy do prekresleni
stranky, a v logu containeru. Do logu containeru se nikdo divat nechodi.
Zaznam se uklada i pri uspechu, jinak by neslo poznat, jestli konektor nesel
nikdy, nebo prestal jit ve chvili, kdy nekdo sahnul na udaje.

Migrace 003_connector_checks.sql, endpoint GET /connectors/:id/checks.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
JiriUhlir
2026-08-25 07:06:14 +02:00
co-authored by Claude Opus 5
parent 6297bbf480
commit 5a124a53d8
14 changed files with 648 additions and 54 deletions
+49
View File
@@ -2,6 +2,55 @@
Nejnovejsi nahore.
## 2026-08-25 - chybova hlaseni konektoru rikaji, co se stalo
"Pristup zamitnut: GET /apps/idoklad/account/agenda vratilo HTTP 403.
Zkontrolujte pristupove udaje." Tahle hlaska je k nicemu. 403 muze byt
nepovolena IP adresa i spatne udaje a veta radi presne to, co v tu chvili
nepomuze. Duvod pritom sluzba do tela odpovedi napsala, jen se zahodil.
### Zmeneno
- **Duvod od sluzby jde primo do hlasky.** `src/scripts/http.ts` vytahne
z tela odpovedi `detail`, `error_description`, `message`, `title`, `error`
i seznam `missingHeaders`. Retezec, ktery vypada jako JSON, se rozbaluje
dal - nase sluzba iDoklad presne takhle predava telo od iDokladu samotneho.
Kdyz sluzba nenapsala nic, hlaska to rekne, misto aby to zamlcela.
- **401 a 403 uz nejsou jedna hlaska.** 401 = udaje sluzba dostala a neuznala,
IP adresa s tim nema co delat. 403 = tvar udaju je v poradku, zakazuje se
samo volani, tedy IP adresa, opravneni uctu nebo aplikace, pod kterou se vola.
- **Cela odpoved sluzby je u overeni konektoru rozbalena rovnou**
(`ErrorDetail` ma novy `defaultOpen`). U chyby, kterou nikdo necekal,
je slozeny toggle to same jako zadny detail.
### Pridano
- **Cela adresa vcetne serveru v kazde hlasce.** `ScriptRequestInfo` ma nove
`url` (origin a cesta, bez query - v query muze byt tajemstvi). Do te doby
hlaska rikala jen `/apps/idoklad/account/agenda`, coz nerekne, jestli se to
trefilo na spravny stroj, nebo to zaridla cizi proxy cestou. Zaklad adresy
je z konfigurace a konektor ho smi prepsat, takze se neda odvodit z toho,
kde je nasazeny portal. Adresa je videt i na karte konektoru, v hlavicce
dialogu Logy a v odpovedi na test i kdyz projde (`baseUrl`).
- **Tlacitko Logy na karte konektoru a historie poslednich peti overeni.**
Dosud odpoved sluzby existovala jen v odpovedi na test, tedy do prekresleni
stranky, a v logu containeru. Do logu containeru se nikdo divat nechodi.
Zaznam se uklada i pri uspechu, jinak by neslo poznat, jestli konektor nesel
nikdy, nebo prestal jit ve chvili, kdy nekdo sahnul na udaje.
Migrace `003_connector_checks.sql`, endpoint
`GET /api/dashboard/connectors/:id/checks`.
### Nedoreseno
Proc iDoklad vraci 403, zatim nevime. Vylouceno je to, co posilame: zadna
kombinace hlavicek (`Idempotency-Key`, `Accept`, User-Agent) 403 nevyvola,
sluzba na ne odpovida 401 jako na cokoliv jineho. Zbyva **zdrojova IP adresa
naseho containeru** nebo **403 od iDokladu samotneho**, ktere sluzba jen
predava dal. Rozhodne to telo te odpovedi, ktere je nove v portalu pod Logy.
Sonda na `/health` vedle overeni byla spatny napad a je pryc: `/health`
povoleni IP adresy nevyzaduje, takze z toho, ze projde, o IP nic neplyne.
## 2026-08-20 - vystup z vetve plati i za podminkou
Pri stavbe cesty "objednavka -> faktura" vyslo najevo, ze se bezny postup neda