From 8e34c38e1021297bcc4a0d8822c649d2f7bbd78e Mon Sep 17 00:00:00 2001 From: Jacob Boddey Date: Fri, 5 Jul 2024 17:54:22 +0100 Subject: [PATCH 1/3] Prevent duplicate mf and model --- framework/python/src/api/api.py | 11 ++++++++++- framework/python/src/common/session.py | 5 +++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/framework/python/src/api/api.py b/framework/python/src/api/api.py index e001a4a16..8e2bc61eb 100644 --- a/framework/python/src/api/api.py +++ b/framework/python/src/api/api.py @@ -449,8 +449,17 @@ async def save_device(self, request: Request, response: Response): response.status_code = status.HTTP_400_BAD_REQUEST return self._generate_msg(False, "Invalid request received") + # Check if device with same MAC exists device = self._session.get_device(device_json.get(DEVICE_MAC_ADDR_KEY)) + if device is None: + + # Check if device with same manufacturer and model exists + device = self._session.get_device_by_make_and_model( + device_json.get(DEVICE_MANUFACTURER_KEY), + device_json.get(DEVICE_MODEL_KEY) + ) + if device is None: # Create new device @@ -468,7 +477,7 @@ async def save_device(self, request: Request, response: Response): response.status_code = status.HTTP_409_CONFLICT return self._generate_msg( - False, "A device with that " + "MAC address already exists") + False, "A device with that MAC address or name already exists") return device.to_config_json() diff --git a/framework/python/src/common/session.py b/framework/python/src/common/session.py index f39fd9148..b5c8e336a 100644 --- a/framework/python/src/common/session.py +++ b/framework/python/src/common/session.py @@ -268,6 +268,11 @@ def get_device_by_name(self, device_name): return device return None + def get_device_by_make_and_model(self, make, model): + for device in self._device_repository: + if device.manufacturer == make and device.model == model: + return device + def get_device_repository(self): return self._device_repository From ab458f086916f0332f9f6fa8f31b523fceafb8a4 Mon Sep 17 00:00:00 2001 From: Jacob Boddey Date: Mon, 8 Jul 2024 19:18:11 +0100 Subject: [PATCH 2/3] Change error message to be more precise --- framework/python/src/api/api.py | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/framework/python/src/api/api.py b/framework/python/src/api/api.py index 8e2bc61eb..8cc9fbaad 100644 --- a/framework/python/src/api/api.py +++ b/framework/python/src/api/api.py @@ -454,11 +454,15 @@ async def save_device(self, request: Request, response: Response): if device is None: - # Check if device with same manufacturer and model exists - device = self._session.get_device_by_make_and_model( - device_json.get(DEVICE_MANUFACTURER_KEY), - device_json.get(DEVICE_MODEL_KEY) - ) + response.status_code = status.HTTP_409_CONFLICT + return self._generate_msg( + False, "A device with that MAC address already exists") + + # Check if device with same manufacturer and model exists + device = self._session.get_device_by_make_and_model( + device_json.get(DEVICE_MANUFACTURER_KEY), + device_json.get(DEVICE_MODEL_KEY) + ) if device is None: @@ -477,7 +481,7 @@ async def save_device(self, request: Request, response: Response): response.status_code = status.HTTP_409_CONFLICT return self._generate_msg( - False, "A device with that MAC address or name already exists") + False, "A device with that manufacturer and model already exists") return device.to_config_json() @@ -552,14 +556,17 @@ async def get_report(self, response: Response, device_name, timestamp): device = self._session.get_device_by_name(device_name) # 1.3 file path - file_path = os.path.join(DEVICES_PATH, device_name, "reports", timestamp,'test', - device.mac_addr.replace(':',''), + file_path = os.path.join( + DEVICES_PATH, + device_name, + "reports", + timestamp,"test", + device.mac_addr.replace(":",""), "report.pdf") if not os.path.isfile(file_path): # pre 1.3 file path file_path = os.path.join(DEVICES_PATH, device_name, "reports", timestamp, "report.pdf") - LOGGER.debug(f"Received get report request for {device_name} / {timestamp}") if os.path.isfile(file_path): From 09b39a66ff4d5201b380df081ca76d35f278089a Mon Sep 17 00:00:00 2001 From: Jacob Boddey Date: Mon, 8 Jul 2024 21:07:42 +0100 Subject: [PATCH 3/3] Fix logic --- framework/python/src/api/api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/python/src/api/api.py b/framework/python/src/api/api.py index 8cc9fbaad..f3c77e6d9 100644 --- a/framework/python/src/api/api.py +++ b/framework/python/src/api/api.py @@ -452,7 +452,7 @@ async def save_device(self, request: Request, response: Response): # Check if device with same MAC exists device = self._session.get_device(device_json.get(DEVICE_MAC_ADDR_KEY)) - if device is None: + if device is not None: response.status_code = status.HTTP_409_CONFLICT return self._generate_msg(