#ifndef AdminSettingsService_h #define AdminSettingsService_h #include class AdminSettingsService : public SettingsService { public: AdminSettingsService(AsyncWebServer* server, FS* fs, SecurityManager* securityManager, char const* servicePath, char const* filePath) : SettingsService(server, fs, servicePath, filePath), _securityManager(securityManager) { } protected: // will validate the requests with the security manager SecurityManager* _securityManager; void fetchConfig(AsyncWebServerRequest* request) { // verify the request against the predicate Authentication authentication = _securityManager->authenticateRequest(request); if (!getAuthenticationPredicate()(authentication)) { request->send(401); return; } // delegate to underlying implemetation SettingsService::fetchConfig(request); } void updateConfig(AsyncWebServerRequest* request, JsonDocument& jsonDocument) { // verify the request against the predicate Authentication authentication = _securityManager->authenticateRequest(request); if (!getAuthenticationPredicate()(authentication)) { request->send(401); return; } // delegate to underlying implemetation SettingsService::updateConfig(request, jsonDocument); } // override this to replace the default authentication predicate, IS_ADMIN AuthenticationPredicate getAuthenticationPredicate() { return AuthenticationPredicates::IS_ADMIN; } }; #endif // end AdminSettingsService