diff --git a/front/plugins/omada_sdn_openapi/script.py b/front/plugins/omada_sdn_openapi/script.py index 685413b1..57d8c275 100755 --- a/front/plugins/omada_sdn_openapi/script.py +++ b/front/plugins/omada_sdn_openapi/script.py @@ -293,7 +293,7 @@ class OmadaAPI: self.active_sites_dict = {} self.access_token = None self.refresh_token = None - self.controller_version = 0 + self.controller_version = None OmadaHelper.verbose("OmadaAPI initialized") @@ -364,35 +364,56 @@ class OmadaAPI: return OmadaHelper.response("error", f"Authentication failed - error: {response.get('response_message', 'Not provided')}") def get_controller_status(self) -> Dict[str, Any]: - """Make an endpoint request to get all online clients on a site.""" + """Make an endpoint request to get controller status.""" OmadaHelper.verbose(f"Retrieving controller status for CID: {getattr(self, 'omada_id')}") endpoint = f"/openapi/v1/{getattr(self, 'omada_id')}/system/setting/controller-status" response = self._make_request("GET", endpoint) if response.get("response_type") == "success": - response_result = response.get("response_result") - self.controller_version = response_result.get("result").get("controllerVersion") - OmadaHelper.debug(f"Controller status: {response}") - return OmadaHelper.response("success", "Successfully retrieved controller status") + response_result = response.get("response_result") or {} + result = response_result.get("result") or {} + self.controller_version = result.get("controllerVersion") + if not self.controller_version: + self.controller_version = None + OmadaHelper.debug(f"Controller status: {response}") + return OmadaHelper.response("error", "Controller status response did not include controllerVersion") + else: + return OmadaHelper.response("success", "Successfully retrieved controller status") OmadaHelper.debug(f"Controller status: {response}") - return OmadaHelper.response("error", "Failed to retrieve controller status") + return OmadaHelper.response("error", "Failed to call controller status endpoint") def get_clients(self, site_id: str) -> Dict[str, Any]: """Make an endpoint request to get all online clients on a site.""" OmadaHelper.verbose(f"Retrieving clients for site: {site_id}") - if OmadaHelper.version_check(self.controller_version, "6.2.0.0", ">="): - endpoint = f"/openapi/v2/{getattr(self, 'omada_id')}/sites/{site_id}/clients" - payload = { - "page": 1, - "pageSize": getattr(self, 'page_size'), - "scope": 1 - } - return self._make_request("POST", endpoint, json=payload) - else: - endpoint = f"/openapi/v1/{getattr(self, 'omada_id')}/sites/{site_id}/clients?page=1&pageSize={getattr(self, 'page_size')}" + page_size = getattr(self, 'page_size') + omada_id = getattr(self, 'omada_id') + + def call_v2(): + endpoint = f"/openapi/v2/{omada_id}/sites/{site_id}/clients" + payload = { + "page": 1, + "pageSize": page_size, + "scope": 1 + } + return self._make_request("POST", endpoint, json=payload) + + def call_v1(): + endpoint = f"/openapi/v1/{omada_id}/sites/{site_id}/clients?page=1&pageSize={page_size}" return self._make_request("GET", endpoint) + + if self.controller_version is None: + OmadaHelper.verbose("Controller version unknown, trying v2 then v1") + resp = call_v2() + if resp and resp.get("response_type") == "success": + return resp + return call_v1() + + if OmadaHelper.version_check(self.controller_version, "6.2.0.0", ">="): + return call_v2() + + return call_v1() def get_devices(self, site_id: str) -> Dict[str, Any]: """Make an endpoint request to get all online devices on a site.""" @@ -516,8 +537,11 @@ class OmadaData: return plugin_objects # Controller status - omada_api.get_controller_status() - OmadaHelper.verbose(f"Controller version: {omada_api.controller_version}") + status_result = omada_api.get_controller_status() + if status_result["response_type"] == "error": + OmadaHelper.verbose(f"Controller version lookup failed: {status_result['response_message']}") + else: + OmadaHelper.verbose(f"Controller version: {omada_api.controller_version}") # Populate sites sites_result = omada_api.populate_sites()