]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
api: cache-clear: validate data, render lua and send cmd
authorAleš Mrázek <ales.mrazek@nic.cz>
Mon, 22 Jan 2024 20:41:31 +0000 (21:41 +0100)
committerAleš Mrázek <ales.mrazek@nic.cz>
Wed, 14 Feb 2024 12:14:30 +0000 (13:14 +0100)
manager/knot_resolver_manager/kresd_controller/registered_workers.py
manager/knot_resolver_manager/server.py

index af3471353fc92269f439cb26a88dd19f4e7e2474..2478fdaefdff4da078a39044c0736bbeabbd8da6 100644 (file)
@@ -2,6 +2,8 @@ import asyncio
 import logging
 from typing import TYPE_CHECKING, Dict, List, Tuple
 
+from knot_resolver_manager.exceptions import SubprocessControllerException
+
 if TYPE_CHECKING:
     from knot_resolver_manager.kresd_controller.interface import KresID, Subprocess
 
index 266a2f060149556f94bf993765eb00c1c7813560..47a11d6d0d97e3b2e469deceb8e9bc31db857dd6 100644 (file)
@@ -23,6 +23,7 @@ from knot_resolver_manager import log, statistics
 from knot_resolver_manager.compat import asyncio as asyncio_compat
 from knot_resolver_manager.config_store import ConfigStore
 from knot_resolver_manager.constants import DEFAULT_MANAGER_CONFIG_FILE, PID_FILE_NAME, init_user_constants
+from knot_resolver_manager.datamodel.cache_schema import CacheClearRPCSchema
 from knot_resolver_manager.datamodel.config_schema import KresConfig, get_rundir_without_validation
 from knot_resolver_manager.datamodel.globals import (
     Context,
@@ -31,11 +32,16 @@ from knot_resolver_manager.datamodel.globals import (
 from knot_resolver_manager.datamodel.management_schema import ManagementSchema
 from knot_resolver_manager.exceptions import CancelStartupExecInsteadException, KresManagerException
 from knot_resolver_manager.kresd_controller import get_best_controller_implementation
+from knot_resolver_manager.kresd_controller.registered_workers import command_single_registered_worker
 from knot_resolver_manager.utils import ignore_exceptions_optional
 from knot_resolver_manager.utils.async_utils import readfile
 from knot_resolver_manager.utils.etag import structural_etag
 from knot_resolver_manager.utils.functional import Result
-from knot_resolver_manager.utils.modeling.exceptions import DataParsingError, DataValidationError
+from knot_resolver_manager.utils.modeling.exceptions import (
+    AggregateDataValidationError,
+    DataParsingError,
+    DataValidationError,
+)
 from knot_resolver_manager.utils.modeling.parsing import DataFormat, try_to_parse
 from knot_resolver_manager.utils.modeling.query import query
 from knot_resolver_manager.utils.modeling.types import NoneType
@@ -243,9 +249,22 @@ class Server:
         )
 
     async def _handler_cache_clear(self, request: web.Request) -> web.Response:
+        data = parse_from_mime_type(await request.text(), request.content_type)
+
+        try:
+            config = CacheClearRPCSchema(data)
+        except (AggregateDataValidationError, DataValidationError) as e:
+            return web.Response(
+                body=e,
+                status=HTTPStatus.BAD_REQUEST,
+                content_type="text/plain",
+                charset="utf8",
+            )
+
+        _, result = await command_single_registered_worker(config.render_lua())
         return web.Response(
-            body="test",
-            content_type="text/plain",
+            body=result,
+            content_type="application/json",
             charset="utf8",
         )