From 46a11ebda272a50b2ed58be4fb0ba3ee5c02884d Mon Sep 17 00:00:00 2001 From: stephb9959 Date: Fri, 27 May 2022 07:11:16 -0700 Subject: [PATCH] Framework update. --- build | 2 +- src/framework/ConfigurationValidator.cpp | 187 ++++++++++++++++++++++- 2 files changed, 180 insertions(+), 9 deletions(-) diff --git a/build b/build index afbe847..405e057 100644 --- a/build +++ b/build @@ -1 +1 @@ -126 \ No newline at end of file +127 \ No newline at end of file diff --git a/src/framework/ConfigurationValidator.cpp b/src/framework/ConfigurationValidator.cpp index f73c63a..e643fa7 100644 --- a/src/framework/ConfigurationValidator.cpp +++ b/src/framework/ConfigurationValidator.cpp @@ -13,9 +13,10 @@ namespace OpenWifi { - static const std::string GitUCentralJSONSchemaFile{"https://raw.githubusercontent.com/blogic/ucentral-schema/main/ucentral.schema.json"}; +static const std::string GitUCentralJSONSchemaFile{ + "https://raw.githubusercontent.com/blogic/ucentral-schema/main/ucentral.schema.json"}; - static json DefaultUCentralSchema = R"( +static json DefaultUCentralSchema = R"( { "$id": "https://openwrt.org/ucentral.schema.json", @@ -518,7 +519,7 @@ namespace OpenWifi { "maximum": 4050 }, "proto": { - "decription": "The L2 vlan tag that shall be added (1q,1ad) ", + "decription": "The L2 vlan tag that shall be added (1q,1ad ) ", "type": "string", "enum": [ "802.1ad", @@ -669,6 +670,47 @@ namespace OpenWifi { } } }, + "interface.ipv4.port-forward": { + "type": "object", + "properties": { + "protocol": { + "type": "string", + "enum": [ + "tcp", + "udp", + "any" + ], + "default": "any" + }, + "external-port": { + "type": [ + "integer", + "string" + ], + "minimum": 0, + "maximum": 65535, + "format": "uc-portrange" + }, + "internal-address": { + "type": "string", + "format": "ipv4", + "example": "0.0.0.120" + }, + "internal-port": { + "type": [ + "integer", + "string" + ], + "minimum": 0, + "maximum": 65535, + "format": "uc-portrange" + } + }, + "required": [ + "external-port", + "internal-address" + ] + }, "interface.ipv4": { "type": "object", "properties": { @@ -722,6 +764,12 @@ namespace OpenWifi { "items": { "$ref": "#/$defs/interface.ipv4.dhcp-lease" } + }, + "port-forward": { + "type": "array", + "items": { + "$ref": "#/$defs/interface.ipv4.port-forward" + } } } }, @@ -751,6 +799,96 @@ namespace OpenWifi { } } }, + "interface.ipv6.port-forward": { + "type": "object", + "properties": { + "protocol": { + "type": "string", + "enum": [ + "tcp", + "udp", + "any" + ], + "default": "any" + }, + "external-port": { + "type": [ + "integer", + "string" + ], + "minimum": 0, + "maximum": 65535, + "format": "uc-portrange" + }, + "internal-address": { + "type": "string", + "format": "ipv6", + "example": "::1234:abcd" + }, + "internal-port": { + "type": [ + "integer", + "string" + ], + "minimum": 0, + "maximum": 65535, + "format": "uc-portrange" + } + }, + "required": [ + "external-port", + "internal-address" + ] + }, + "interface.ipv6.traffic-allow": { + "type": "object", + "properties": { + "protocol": { + "type": "string", + "default": "any" + }, + "source-address": { + "type": "string", + "format": "uc-cidr6", + "example": "2001:db8:1234:abcd::/64", + "default": "::/0" + }, + "source-ports": { + "type": "array", + "minItems": 1, + "items": { + "type": [ + "integer", + "string" + ], + "minimum": 0, + "maximum": 65535, + "format": "uc-portrange" + } + }, + "destination-address": { + "type": "string", + "format": "ipv6", + "example": "::1000" + }, + "destination-ports": { + "type": "array", + "minItems": 1, + "items": { + "type": [ + "integer", + "string" + ], + "minimum": 0, + "maximum": 65535, + "format": "uc-portrange" + } + } + }, + "required": [ + "destination-address" + ] + }, "interface.ipv6": { "type": "object", "properties": { @@ -782,6 +920,18 @@ namespace OpenWifi { }, "dhcpv6": { "$ref": "#/$defs/interface.ipv6.dhcpv6" + }, + "port-forward": { + "type": "array", + "items": { + "$ref": "#/$defs/interface.ipv6.port-forward" + } + }, + "traffic-allow": { + "type": "array", + "items": { + "$ref": "#/$defs/interface.ipv6.traffic-allow" + } } } }, @@ -866,7 +1016,7 @@ namespace OpenWifi { }, "gateway-fqdn": { "type": "string", - "format": "fqdn", + "format": "uc-fqdn", "default": "ucentral.splash" }, "max-clients": { @@ -901,6 +1051,7 @@ namespace OpenWifi { "psk", "psk2", "psk-mixed", + "psk2-radius", "wpa", "wpa2", "wpa-mixed", @@ -961,6 +1112,10 @@ namespace OpenWifi { "type": "boolean", "default": false }, + "reduced-neighbor-reporting": { + "type": "boolean", + "default": false + }, "lci": { "type": "string" }, @@ -1527,6 +1682,11 @@ namespace OpenWifi { "decription": "This option allows embedding custom vendor specific IEs inside the beacons of a BSS in AP mode.", "type": "string" }, + "fils-discovery-interval": { + "type": "integer", + "default": 20, + "maximum": 10000 + }, "encryption": { "$ref": "#/$defs/interface.ssid.encryption" }, @@ -2087,6 +2247,10 @@ namespace OpenWifi { "auto-channel": { "type": "boolean", "default": false + }, + "ipv6": { + "type": "boolean", + "default": false } } }, @@ -2193,7 +2357,7 @@ namespace OpenWifi { "properties": { "fqdn": { "type": "string", - "format": "fqdn" + "format": "uc-fqdn" }, "suffix-matching": { "type": "boolean", @@ -2444,8 +2608,7 @@ namespace OpenWifi { } } } - - )"_json; +)"_json; class custom_error_handler : public nlohmann::json_schema::basic_error_handler { @@ -2461,8 +2624,16 @@ namespace OpenWifi { if(Initialized_) return; std::string GitSchema; + + if(MicroService::instance().ConfigGetBool("ucentral.datamodel.internal",true)) { + RootSchema_ = DefaultUCentralSchema; + Logger().information("Using uCentral validation from built-in default."); + return; + } + try { - if(Utils::wgets(GitUCentralJSONSchemaFile, GitSchema)) { + auto GitURI = MicroService::instance().ConfigGetString("ucentral.datamodel.uri",GitUCentralJSONSchemaFile); + if(Utils::wgets(GitURI, GitSchema)) { RootSchema_ = json::parse(GitSchema); Logger().information("Using uCentral validation schema from GIT."); } else {