diff --git a/examples/mas-dt/instruction_set.json b/examples/mas-dt/instruction_set.json new file mode 100644 index 0000000000000000000000000000000000000000..9f2de4f9146e7b2d75050924a32737816508b951 --- /dev/null +++ b/examples/mas-dt/instruction_set.json @@ -0,0 +1,32 @@ +{ + "header":{ + "message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd", + "timestamp": "2024-09-03T00:00:00Z", + "version": 1, + "source": "ori", + "destination": "internal.noc.slocum.unit_111.to_platform.instruction_set", + "delivery_type": "publish", + "encoded": true + }, + "payload":{ + "message_type": "instruction_set", + "categories": { + "speed": "slow", + "data_transmission": "normal" + }, + "files": [ + { + "name": "yo95.ma", + "content": "YmVoYXZpb3JfbmFtZT15bw0KIyB5bzM1Lm1hDQojIFN0YW5kYXJkIFlPIEZpbGUgZmlsZSBnMiBvciBnMyBOT0MgZ2xpZGVycw0KIyAgMSBZTw0KIyAgMzBtIGRlcHRoDQojICBBbHRpbWV0ZXIgT24gYXQgbWF4aW11biBzcGVlZA0KIyAgQXV0b2JhbGxhc3Qgb24gLSBGdWxsIEJ1b3lhbmN5DQojICBCYXR0ZXJ5IE1vZGUgU2Vydm8gMjYgZGVlZ3JlZXMNCiMgU2VlIC9kb2NvL2h3LWl0LXdvcmtzL2F1dG9iYWxsYXN0LnR4dCBhbmQgbWFzdGVyZGF0YSBmb3IgZnVsbCBsaXN0IG9mIGJfYXJncy4NCiMgMjIgLSBBdWd1c3QgMjAxNiBhbHZhcm8ubG9yZW56b0Bub2MuYWMudWsNCiMgMDIgLSBEZWMgMjAyMSBiZW4uYWxsc3VwQG5vYyBjbGVhbiB1cCBmb3IgZzMgYW5kIHRocnVzdGVyIHVzYWdlDQoNCjxzdGFydDpiX2FyZz4JDQojICAgIGJfYXJnOiBudW1faGFsZl9jeWNsZXNfdG9fZG8obm9kaW0pIDIgCQkJIyBOdW1iZXIgb2YgZGl2ZS9jbGltYnMgdG8gcGVyZm9ybQ0KCQkJCQkJCQkJCQkJCQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQojIGFyZ3VtZW50cyBmb3IgZGl2ZV90bw0KICAgIGJfYXJnOiBkX2JwdW1wX3ZhbHVlKFgpIAkgICAgICAJMzAwLjAgCQkjIHRvdGFsIGRyaXZlIHZvbHVtZSBmb3IgYXV0b2JhbGxhc3QNCiAgICBiX2FyZzogZF9waXRjaF92YWx1ZShYKSAgIAkgICAgICAJLTAuMzQ5ICAJIyAtMjAgZGVnDQogICANCiMgYXJndW1lbnRzIGZvciBjbGltYl90bw0KICAgIGJfYXJnOiBjX3BpdGNoX3ZhbHVlKFgpICAgICAJCTAuMzQ5ICAgICAgICMgKzIwIGRlZw0KDQo8ZW5kOmJfYXJnPg0K" + }, + { + "name": "tbdlist.dat", + "content": "IyMjIG1hbmRhdG9yeSB0aW1lIGluZm9ybWF0aW9uIGF0IGZ1bGwgcmVzb2x1dGlvbg0KU0NJX01fUFJFU0VOVF9USU1FDQpTQ0lfTV9QUkVTRU5UX1NFQ1NfSU5UT19NSVNTSU9ODQoNCiMjIyMjIyMjIyBzdGFuZGFyZCBDVEQgaW5mb3JtYXRpb24gIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyByZWNvbW1lbmRlZCBzYW1wbGUgcmF0ZSA6IDwgMTAgc2Vjb25kcw0KU0NJX1dBVEVSX0NPTkQgICAgICAgICAxMCAjIHRvIHNhbXBsZSBldmVyeSBvdGhlciB5byBvbiBkb3duY2FzdCBvbmx5LCB1c2UgMTAgMSAtMSAyDQpTQ0lfV0FURVJfVEVNUCAgICAgICAgIDEwDQpTQ0lfV0FURVJfUFJFU1NVUkUgICAgIDEwDQojU0NJX0NURDQxQ1BfVElNRVNUQU1QICAxMA==" + }, + { + "name": "sample99.ma", + "content": "YmVoYXZpb3JfbmFtZT1zYW1wbGUNCjxzdGFydDpiX2FyZz4NCiAgICBiX2FyZzogbnRoX3lvX3RvX3NhbXBsZShub2RpbSkgICAgICAgICAgICAJMiAgCSAjIENoZWNrIG1hc3RlcmRhdGENCiAgICBiX2FyZzogbWF4X2RlcHRoKG0pICAgICAgICAgICAgICAgICAgIAkgMjAwMCAgICAjIENoZWNrIG1hc3RlcmRhdGENCjxlbmQ6Yl9hcmc+DQo=" + } + ] + } +} \ No newline at end of file diff --git a/formats/instruction_set.py b/formats/instruction_set.py new file mode 100644 index 0000000000000000000000000000000000000000..0dc59d086b37affa4c891a9040c40d7eb6e23847 --- /dev/null +++ b/formats/instruction_set.py @@ -0,0 +1,50 @@ +""" + schemas: Instruction set message containing a collection of configuration files +""" + +config_file_schema = { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of file", + "example": "yo95.ma", + }, + "content": { + "type": "string", + "description": "Base64 encoded file content", + "example": "SDQke4uwyP/YQQAgAhA2AND/nu8nvQAAAAAAAAAACtejPa5HHUGkcB" + + "AAAAIAAAAQAAAAAAAAAA9P2cP166ab+9cg==", + }, + "mime_type": { + "type": "string", + "description": "MIME type", + "example": "text/plain", + } + }, + "required": ["name", "content"], +} + + +instruction_set_schema = { + "type": "object", + "properties": { + "message_type": { + "type": "string", + "description": "Type of message", + "example": "instruction_set", + "enum": ["instruction_set"], + }, + "categories": { + "type": "object", + }, + "files": { + "type": "array", + "items": config_file_schema, + }, + }, + "required": [ + "message_type", + "files", + ], +} diff --git a/formats/payload.py b/formats/payload.py index 062527f48de04a9642655b9a0b7ea8caeeccff79..0868657e81a5208ed8e9a4cbe0cd278777655db7 100644 --- a/formats/payload.py +++ b/formats/payload.py @@ -3,6 +3,7 @@ payload_schema = { "propertyName": "message_type", "mapping": { "alert": "#/components/schemas/alert", + "instruction_set": "#/components/schemas/instruction_set", "mission_plan": "#/components/schemas/mission_plan", "mission_plan_encoded": "#/components/schemas/" + "mission_plan_encoded", "observation": "#/components/schemas/observation", @@ -20,6 +21,7 @@ payload_schema = { "oneOf": [ {"$ref": "#/components/schemas/alert"}, {"$ref": "#/components/schemas/acknowledgement"}, + {"$ref": "#/components/schemas/instruction_set"}, {"$ref": "#/components/schemas/mission_plan"}, {"$ref": "#/components/schemas/mission_plan_encoded"}, {"$ref": "#/components/schemas/observation"}, diff --git a/generate_schema_config.py b/generate_schema_config.py index 57cadb697866fbdfe092e63a9dfc2417e5b82236..3c0f530a8635479c1af949877718cc11afa89f21 100644 --- a/generate_schema_config.py +++ b/generate_schema_config.py @@ -12,6 +12,7 @@ from formats.survey import survey_schema from formats.survey_encoded import survey_encoded_schema from formats.acknowledgement import acknowledgement_schema from formats.alert import alert_schema +from formats.instruction_set import config_file_schema, instruction_set_schema from flasgger import Swagger from flask import Flask @@ -71,6 +72,8 @@ def get_swagger_config(reload=False): "survey_encoded": survey_encoded_schema, "acknowledgement": acknowledgement_schema, "alert": alert_schema, + "instruction_set": instruction_set_schema, + "config_file": config_file_schema, } }, } diff --git a/project/soar/swagger.json b/project/soar/swagger.json index e76d2ff1c94467e82b7a9715f077b451543ffed1..6580aaf335632b423902b062dbf0d0fccc0dd103 100644 --- a/project/soar/swagger.json +++ b/project/soar/swagger.json @@ -111,6 +111,30 @@ ], "type": "object" }, + "config_file": { + "properties": { + "content": { + "description": "Base64 encoded file content", + "example": "SDQke4uwyP/YQQAgAhA2AND/nu8nvQAAAAAAAAAACtejPa5HHUGkcBAAAAIAAAAQAAAAAAAAAA9P2cP166ab+9cg==", + "type": "string" + }, + "mime_type": { + "description": "MIME type", + "example": "text/plain", + "type": "string" + }, + "name": { + "description": "Name of file", + "example": "yo95.ma", + "type": "string" + } + }, + "required": [ + "name", + "content" + ], + "type": "object" + }, "geojson.org.schema.Feature.json": { "properties": { "bbox": { @@ -1446,6 +1470,53 @@ ], "type": "object" }, + "instruction_set": { + "properties": { + "categories": { + "type": "object" + }, + "files": { + "items": { + "properties": { + "content": { + "description": "Base64 encoded file content", + "example": "SDQke4uwyP/YQQAgAhA2AND/nu8nvQAAAAAAAAAACtejPa5HHUGkcBAAAAIAAAAQAAAAAAAAAA9P2cP166ab+9cg==", + "type": "string" + }, + "mime_type": { + "description": "MIME type", + "example": "text/plain", + "type": "string" + }, + "name": { + "description": "Name of file", + "example": "yo95.ma", + "type": "string" + } + }, + "required": [ + "name", + "content" + ], + "type": "object" + }, + "type": "array" + }, + "message_type": { + "description": "Type of message", + "enum": [ + "instruction_set" + ], + "example": "instruction_set", + "type": "string" + } + }, + "required": [ + "message_type", + "files" + ], + "type": "object" + }, "mission_plan": { "properties": { "autonomy_engine_plan_ID": { @@ -1730,6 +1801,7 @@ "mapping": { "acknowledgement": "#/components/schemas/acknowledgement", "alert": "#/components/schemas/alert", + "instruction_set": "#/components/schemas/instruction_set", "mission_plan": "#/components/schemas/mission_plan", "mission_plan_encoded": "#/components/schemas/mission_plan_encoded", "observation": "#/components/schemas/observation", @@ -1743,11 +1815,14 @@ "propertyName": "message_type" }, "oneOf": [ + { + "$ref": "#/components/schemas/acknowledgement" + }, { "$ref": "#/components/schemas/alert" }, { - "$ref": "#/components/schemas/acknowledgement" + "$ref": "#/components/schemas/instruction_set" }, { "$ref": "#/components/schemas/mission_plan"