From 1fb8f3b237c879288d319c97191c05bf459dc367 Mon Sep 17 00:00:00 2001 From: kkedziak Date: Tue, 17 Dec 2024 14:36:20 +0100 Subject: [PATCH 1/2] REST handlers schema --- .../schema/schema.json | 198 ++++++++++++++++++ tests/unit/test_schema.py | 43 ++++ 2 files changed, 241 insertions(+) diff --git a/splunk_add_on_ucc_framework/schema/schema.json b/splunk_add_on_ucc_framework/schema/schema.json index 74271bbe4..99c675020 100644 --- a/splunk_add_on_ucc_framework/schema/schema.json +++ b/splunk_add_on_ucc_framework/schema/schema.json @@ -2341,6 +2341,201 @@ ] } }, + "OpenApiType": { + "type": "object", + "description": "OpenAPI request or response param type.", + "oneOf": [ + { + "properties": { + "type": { + "type": "string", + "enum": ["string", "number", "integer", "boolean"] + }, + "nullable": { + "type": "boolean", + "default": false + } + }, + "additionalProperties": false, + "required": [ + "type" + ] + }, + { + "properties": { + "type": { + "type": "string", + "const": "array" + }, + "items": { + "$ref": "#/definitions/OpenApiType" + }, + "nullable": { + "type": "boolean", + "default": false + } + }, + "additionalProperties": false, + "required": [ + "type", + "items" + ] + }, + { + "properties": { + "type": { + "type": "string", + "const": "object" + }, + "properties": { + "type": "object", + "patternProperties": { + "^.+$": { + "$ref": "#/definitions/OpenApiType" + } + } + } + }, + "additionalProperties": false, + "required": [ + "type", + "properties" + ] + }, + { + "properties": { + "anyOf": { + "type": "array", + "items": { + "$ref": "#/definitions/OpenApiType" + } + }, + "nullable": { + "type": "boolean", + "default": false + } + }, + "additionalProperties": false, + "required": [ + "anyOf" + ] + }, + { + "properties": { + "oneOf": { + "type": "array", + "items": { + "$ref": "#/definitions/OpenApiType" + } + }, + "nullable": { + "type": "boolean", + "default": false + } + }, + "additionalProperties": false, + "required": [ + "oneOf" + ] + } + ] + }, + "RestHandlerActionParams": { + "type": "object", + "description": "Request or response parameters for a particular action.", + "additionalProperties": false, + "patternProperties": { + "^.+$": { + "$ref": "#/definitions/OpenApiType" + } + } + }, + "RestHandlerParams": { + "type": "object", + "description": "Request or response parameters.", + "additionalProperties": false, + "properties": { + "list": { + "$ref": "#/definitions/RestHandlerActionParams" + }, + "edit": { + "$ref": "#/definitions/RestHandlerActionParams" + }, + "create": { + "$ref": "#/definitions/RestHandlerActionParams" + }, + "remove": { + "$ref": "#/definitions/RestHandlerActionParams" + } + } + }, + "RestHandler": { + "type": "object", + "description": "Rest handlers not automatically generated by UCC.", + "properties": { + "endpoint": { + "type": "string", + "description": "The endpoint for the custom rest handler." + }, + "handlerType": { + "type": "string", + "description": "The type of the handler.", + "enum": ["EAI"] + }, + "registerHandler": { + "type": "object", + "description": "Parameters needed to register the endpoint in web.conf and restmap.conf", + "properties": { + "file": { + "type": "string", + "description": "The file where the custom rest handler is located." + }, + "actions": { + "type": "array", + "description": "The actions that the custom rest handler supports.", + "items": { + "type": "string", + "description": "The action that the custom rest handler supports.", + "enum": ["list", "edit", "create", "remove"] + } + } + }, + "additionalProperties": false, + "required": [ + "file", + "actions" + ] + }, + "requestParameters": { + "type": "object", + "description": "The parameters that the custom rest handler supports.", + "$ref": "#/definitions/RestHandlerParams" + }, + "responseParameters": { + "type": "object", + "description": "The parameters that the custom rest handler returns.", + "$ref": "#/definitions/RestHandlerParams" + } + }, + "additionalProperties": false, + "required": [ + "endpoint", + "handlerType" + ] + }, + "Options": { + "type": "object", + "description": "Additional options for the addon", + "properties": { + "customRestHandlers": { + "type": "array", + "items": { + "$ref": "#/definitions/RestHandler" + } + } + }, + "additionalProperties": false + }, "Pages": { "type": "object", "description": "Definition of addon pages (configuration, inputs, dashboard)", @@ -3407,6 +3602,9 @@ "$ref": "#/definitions/Alerts" }, "minItems": 1 + }, + "options": { + "$ref": "#/definitions/Options" } }, "required": [ diff --git a/tests/unit/test_schema.py b/tests/unit/test_schema.py index 85c288e08..34b81f9d1 100644 --- a/tests/unit/test_schema.py +++ b/tests/unit/test_schema.py @@ -107,3 +107,46 @@ def test_interval_entity_options(schema_validate, config): } ) ) + + +def test_rest_handler_without_ui(schema_validate, config): + crh = { + "endpoint": "some_endpoint", + "handlerType": "EAI", + "requestParameters": { + "create": { + "some_param": {"type": "string"}, + "other_param": {"type": "number"}, + "other_param_nullable": { + "type": "number", + "nullable": True, + }, + }, + "list": { + "array_param": { + "type": "array", + "items": {"type": "string"}, + }, + "obj_param": { + "type": "object", + "properties": { + "key": {"type": "string"}, + }, + }, + }, + }, + "responseParameters": { + "list": { + "some_param": {"type": "string"}, + }, + }, + } + config.setdefault("options", {})["customRestHandlers"] = [crh] + schema_validate(config) + + crh["registerHandler"] = { + "file": "my_handler.py", + "actions": ["list", "create", "edit", "remove"], + } + + schema_validate(config) From 34e35b880997747fd68c86eac051488b8818655b Mon Sep 17 00:00:00 2001 From: kkedziak Date: Tue, 17 Dec 2024 14:44:24 +0100 Subject: [PATCH 2/2] REST handlers schema --- splunk_add_on_ucc_framework/schema/schema.json | 2 +- tests/unit/test_schema.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/splunk_add_on_ucc_framework/schema/schema.json b/splunk_add_on_ucc_framework/schema/schema.json index 99c675020..5a45511e9 100644 --- a/splunk_add_on_ucc_framework/schema/schema.json +++ b/splunk_add_on_ucc_framework/schema/schema.json @@ -2527,7 +2527,7 @@ "type": "object", "description": "Additional options for the addon", "properties": { - "customRestHandlers": { + "restHandlers": { "type": "array", "items": { "$ref": "#/definitions/RestHandler" diff --git a/tests/unit/test_schema.py b/tests/unit/test_schema.py index 34b81f9d1..cba1ca77b 100644 --- a/tests/unit/test_schema.py +++ b/tests/unit/test_schema.py @@ -141,7 +141,7 @@ def test_rest_handler_without_ui(schema_validate, config): }, }, } - config.setdefault("options", {})["customRestHandlers"] = [crh] + config.setdefault("options", {})["restHandlers"] = [crh] schema_validate(config) crh["registerHandler"] = {