From 902d1a6932a729d5d0f2806471bfc7ac000a3948 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Ale=C5=A1?= Date: Mon, 22 Nov 2021 19:11:50 +0100 Subject: [PATCH] datamodel: policy: section created --- .../datamodel/config_schema.py | 3 ++ .../datamodel/policy_schema.py | 33 +++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 manager/knot_resolver_manager/datamodel/policy_schema.py diff --git a/manager/knot_resolver_manager/datamodel/config_schema.py b/manager/knot_resolver_manager/datamodel/config_schema.py index 41e25e9fb..bc39471ed 100644 --- a/manager/knot_resolver_manager/datamodel/config_schema.py +++ b/manager/knot_resolver_manager/datamodel/config_schema.py @@ -11,6 +11,7 @@ from knot_resolver_manager.datamodel.logging_config import LoggingSchema from knot_resolver_manager.datamodel.lua_schema import LuaSchema from knot_resolver_manager.datamodel.network_schema import NetworkSchema from knot_resolver_manager.datamodel.options_schema import OptionsSchema +from knot_resolver_manager.datamodel.policy_schema import PolicySchema from knot_resolver_manager.datamodel.server_schema import ServerSchema from knot_resolver_manager.datamodel.static_hints_schema import StaticHintsSchema from knot_resolver_manager.datamodel.stub_zone_schema import StubZoneSchema @@ -37,6 +38,7 @@ class KresConfig(SchemaNode): network: NetworkSchema = NetworkSchema() static_hints: StaticHintsSchema = StaticHintsSchema() views: Optional[List[ViewSchema]] = None + policy: Optional[List[PolicySchema]] = None stub_zones: Optional[List[StubZoneSchema]] = None forward_zones: Optional[List[ForwardZoneSchema]] = None cache: CacheSchema = CacheSchema() @@ -52,6 +54,7 @@ class KresConfig(SchemaNode): network: NetworkSchema static_hints: StaticHintsSchema views: Optional[List[ViewSchema]] + policy: Optional[List[PolicySchema]] stub_zones: Optional[List[StubZoneSchema]] forward_zones: Optional[List[ForwardZoneSchema]] cache: CacheSchema diff --git a/manager/knot_resolver_manager/datamodel/policy_schema.py b/manager/knot_resolver_manager/datamodel/policy_schema.py new file mode 100644 index 000000000..5c53c857f --- /dev/null +++ b/manager/knot_resolver_manager/datamodel/policy_schema.py @@ -0,0 +1,33 @@ +from typing import List, Optional +from knot_resolver_manager.datamodel.types import IPAddressPort + +from knot_resolver_manager.datamodel.view_schema import FlagsEnum +from knot_resolver_manager.utils import SchemaNode +from knot_resolver_manager.utils.types import LiteralEnum + +# TODO: add all other options +ActionEnum = LiteralEnum["deny", "pass", "mirror"] + + +class FilterSchema(SchemaNode): + suffix: Optional[str] = None + pattern: Optional[str] = None + query_type: Optional[str] = None + + +class AnswerSchema(SchemaNode): + pass + + +class PolicySchema(SchemaNode): + id: str + action: ActionEnum + mirror: Optional[List[IPAddressPort]] = None + filters: Optional[List[FilterSchema]] = None + message: Optional[str] = None + answer: Optional[AnswerSchema] = None + views: Optional[List[str]] = None + options: Optional[List[FlagsEnum]] = None + + def _validate(self) -> None: + pass -- 2.47.3