Systémová nastavení¶
Entity: SystemSettings (tabulka system_settings)
Prověřeno proti commitu: f1da785 (21. 9. 2026)
Testy: backend/tests/Feature/Audit/SystemSettingsAuditTest.php
Routy¶
| Routa | Perimetr | Ochrana | Controller |
|---|---|---|---|
GET/POST/PUT/DELETE /api/systemSettings |
interní | oprávnění payments, invoice_settings nebo calendar_settings |
EntityCrudController CRUD |
GET /api/public/systemSettings |
veřejný | žádná | EntityCrudController::publicList |
Kdo to volá z Reactu¶
pages/InvoiceSettings.jsx, pages/NotificationSettings.jsx, components/settings/ComgateSettings.jsx.
Všechno jsou to stránky administrace. Na veřejnou routu se dostanou záložním pokusem
v base44Client.js, když interní vrátí 401/403 (viz PRU-03).
Nálezy¶
SET-01 — Tajné klíče integrací jsou veřejně bez přihlášení (kritická)¶
Stav: otevřený
Test: SET-01: veřejný list systémových nastavení nevrací tajné klíče
Ověřený fakt — systemSettings má v EntityCrudController.php public_list => true.
Veřejný list vrací SELECT *, tedy i comgate_secret, pohoda_auth_token, telephony_api_key
a telephony_webhook_secret. Test potvrdil, že je vrátí požadavek bez jakékoli cookie.
Dopad — s Comgate secretem lze podvrhnout potvrzení platby, s tokenem Pohody zapisovat do účetnictví, s webhook secretem podvrhnout události telefonie.
Odvozeno — veřejná část potřebuje nanejvýš pár neškodných polí (název firmy, logo). Ta patří do vlastního endpointu s výčtem polí, ne do obecného listu celé tabulky. Klíče, které už byly v produkci nastavené, je po opravě potřeba vyměnit.