]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
datamodel: policy: section created
authorAleš <ales.mrazek@nic.cz>
Mon, 22 Nov 2021 18:11:50 +0000 (19:11 +0100)
committerAleš Mrázek <ales.mrazek@nic.cz>
Fri, 8 Apr 2022 14:17:53 +0000 (16:17 +0200)
manager/knot_resolver_manager/datamodel/config_schema.py
manager/knot_resolver_manager/datamodel/policy_schema.py [new file with mode: 0644]

index 41e25e9fb9bcd745f5611fb9017141a8cad1662a..bc39471ed1b1177dddd256723da9626d0dd4942f 100644 (file)
@@ -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 (file)
index 0000000..5c53c85
--- /dev/null
@@ -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