From 580ddf89326995ea960c423c7b4b79ffb90dd3bd Mon Sep 17 00:00:00 2001 From: Corvo <60719165+brothercorvo@users.noreply.github.com> Date: Tue, 7 Oct 2025 16:15:49 -0300 Subject: [PATCH] Ensure emergency service routes enforce payload schema --- .../Server/service_emergency.py | 47 +++++++++++++++++-- 1 file changed, 43 insertions(+), 4 deletions(-) diff --git a/examples/EmergencyManagement/Server/service_emergency.py b/examples/EmergencyManagement/Server/service_emergency.py index 07bc285..d1c4afe 100644 --- a/examples/EmergencyManagement/Server/service_emergency.py +++ b/examples/EmergencyManagement/Server/service_emergency.py @@ -1,3 +1,7 @@ +from typing import Any +from typing import Dict +from typing import Final + from reticulum_openapi.service import LXMFService from examples.EmergencyManagement.Server.controllers_emergency import ( EmergencyController, @@ -9,6 +13,25 @@ ) +_EAM_CALLSIGN_SCHEMA: Final[Dict[str, Any]] = { + "type": "string", + "minLength": 1, + "description": "Callsign identifying the emergency action message.", +} + +_EVENT_IDENTIFIER_SCHEMA: Final[Dict[str, Any]] = { + "oneOf": [ + {"type": "integer"}, + { + "type": "string", + "pattern": r"^-?\\d+$", + "description": "Numeric identifier encoded as a string.", + }, + ], + "description": "Unique identifier for the event record.", +} + + class EmergencyService(LXMFService): """Service with routes for the emergency management example.""" @@ -24,17 +47,33 @@ def __init__(self, *args, **kwargs): eamc.CreateEmergencyActionMessage, EmergencyActionMessage, ) - self.add_route("DeleteEmergencyActionMessage", eamc.DeleteEmergencyActionMessage) + self.add_route( + "DeleteEmergencyActionMessage", + eamc.DeleteEmergencyActionMessage, + payload_schema=_EAM_CALLSIGN_SCHEMA, + ) self.add_route("ListEmergencyActionMessage", eamc.ListEmergencyActionMessage) self.add_route( "PutEmergencyActionMessage", eamc.PutEmergencyActionMessage, EmergencyActionMessage, ) - self.add_route("RetrieveEmergencyActionMessage", eamc.RetrieveEmergencyActionMessage) + self.add_route( + "RetrieveEmergencyActionMessage", + eamc.RetrieveEmergencyActionMessage, + payload_schema=_EAM_CALLSIGN_SCHEMA, + ) self.add_route("CreateEvent", evc.CreateEvent, Event) - self.add_route("DeleteEvent", evc.DeleteEvent) + self.add_route( + "DeleteEvent", + evc.DeleteEvent, + payload_schema=_EVENT_IDENTIFIER_SCHEMA, + ) self.add_route("ListEvent", evc.ListEvent) self.add_route("PutEvent", evc.PutEvent, Event) - self.add_route("RetrieveEvent", evc.RetrieveEvent) + self.add_route( + "RetrieveEvent", + evc.RetrieveEvent, + payload_schema=_EVENT_IDENTIFIER_SCHEMA, + )