Přeskočit obsah

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.