From fe98fa5d64b1ac816753b8c4de93c68b6c33c0e4 Mon Sep 17 00:00:00 2001 From: stephb9959 Date: Tue, 14 Sep 2021 17:06:50 -0700 Subject: [PATCH] Adding configuration validation. --- src/RESTAPI_configurations_handler.cpp | 9 +++ test_scripts/curl/cli | 10 +++ test_scripts/curl/test-config-1.json | 96 ++++++++++++++++++++++++++ 3 files changed, 115 insertions(+) create mode 100644 test_scripts/curl/test-config-1.json diff --git a/src/RESTAPI_configurations_handler.cpp b/src/RESTAPI_configurations_handler.cpp index 5666919..7a59dcc 100644 --- a/src/RESTAPI_configurations_handler.cpp +++ b/src/RESTAPI_configurations_handler.cpp @@ -107,16 +107,25 @@ namespace OpenWifi{ std::string Arg; if(HasParameter("validateOnly",Arg) && Arg=="true") { + std::cout << __LINE__ << std::endl; auto Body = ParseStream(); + std::cout << __LINE__ << std::endl; if(!Body->has("configuration")) { + std::cout << __LINE__ << std::endl; BadRequest("Must have 'configuration' element."); return; } + std::cout << __LINE__ << std::endl; auto Config=Body->get("configuration").toString(); + std::cout << __LINE__ << std::endl; Poco::JSON::Object Answer; + std::cout << __LINE__ << std::endl; auto Res = ValidateUCentralConfiguration(Config); + std::cout << __LINE__ << std::endl; Answer.set("valid",Res); + std::cout << __LINE__ << std::endl; ReturnObject(Answer); + std::cout << __LINE__ << std::endl; return; } diff --git a/test_scripts/curl/cli b/test_scripts/curl/cli index f719c1c..8f1ea52 100755 --- a/test_scripts/curl/cli +++ b/test_scripts/curl/cli @@ -380,6 +380,15 @@ adddeviceconfig() { jq < ${result_file} } +validateconfig() { + curl ${FLAGS} -X POST "https://${OWPROV}/api/v1/configurations/1?validateOnly=true" \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer ${token}" \ + -H "accept: application/json" \ + -d @"$1" > ${result_file} + jq < ${result_file} +} + shopt -s nocasematch case "$1" in "login") login; help ; logout ;; @@ -413,6 +422,7 @@ case "$1" in "adddeviceconfig") login; adddeviceconfig "$2" "$3"; logout;; "addconfigmetrics") login; addconfigmetrics "$2" ; logout;; "addconfigfile") login; addconfigfile "$2" ; logout;; + "validateconfig") login; validateconfig "$2"; logout;; *) help ;; esac diff --git a/test_scripts/curl/test-config-1.json b/test_scripts/curl/test-config-1.json new file mode 100644 index 0000000..ceac1fa --- /dev/null +++ b/test_scripts/curl/test-config-1.json @@ -0,0 +1,96 @@ +{ + "configuration" : { + "radios": [ + { + "band": "5G", + "channel": 52, + "channel-mode": "HE", + "channel-width": 80, + "country": "CA" + }, + { + "band": "2G", + "channel": 11, + "channel-mode": "HE", + "channel-width": 20, + "country": "CA" + } + ], + + "interfaces": [ + { + "name": "WAN", + "role": "upstream", + "services": [ "lldp" ], + "ethernet": [ + { + "select-ports": [ + "WAN*" + ] + } + ], + "ipv4": { + "addressing": "dynamic" + } + }, + { + "name": "LAN", + "role": "downstream", + "services": [ "ssh", "lldp" ], + "ethernet": [ + { + "select-ports": [ + "LAN*" + ] + } + ], + "ipv4": { + "addressing": "static", + "subnet": "192.168.1.1/24", + "dhcp": { + "lease-first": 10, + "lease-count": 100, + "lease-time": "6h" + } + }, + "ssids": [ + { + "name": "OpenWifi", + "role": "downstream", + "wifi-bands": [ + "2G", "5G" + ], + "bss-mode": "ap", + "encryption": { + "proto": "psk2", + "key": "OpenWifi", + "ieee80211w": "optional" + } + } + ] + + } + ], + "metrics": { + "statistics": { + "interval": 120, + "types": [ "ssids", "lldp", "clients" ] + }, + "health": { + "interval": 120 + }, + "wifi-frames": { + "filters": [ "probe", "auth" ] + } + }, + "services": { + "lldp": { + "describe": "uCentral", + "location": "universe" + }, + "ssh": { + "port": 22 + } + } + } +}