From fc858a3eed3ed2adc6d678d1cb66245f7537ae82 Mon Sep 17 00:00:00 2001 From: Snuffy2 Date: Tue, 17 Sep 2024 21:35:28 -0400 Subject: [PATCH 1/2] Move system_halt and system_reboot to REST API --- .../opnsense/pyopnsense/__init__.py | 44 +++++-------------- 1 file changed, 11 insertions(+), 33 deletions(-) diff --git a/custom_components/opnsense/pyopnsense/__init__.py b/custom_components/opnsense/pyopnsense/__init__.py index 4e1a2e9..a32ccbc 100644 --- a/custom_components/opnsense/pyopnsense/__init__.py +++ b/custom_components/opnsense/pyopnsense/__init__.py @@ -11,7 +11,6 @@ import time from typing import Any from urllib.parse import quote_plus, urlparse -from xml.parsers.expat import ExpatError import xmlrpc.client import zoneinfo @@ -983,41 +982,20 @@ async def arp_get_mac_by_ip(self, ip, do_ping=True): return None @_log_errors - async def system_reboot(self) -> None: - script: str = r""" -// /usr/local/opnsense/mvc/app/library/OPNsense/Core/Backend.php -use OPNsense\Core\Backend; - -$backend = new Backend(); -$backend->configdRun('system reboot', true); - -$toreturn = [ - "data" => true, -]; -""" - try: - await self._exec_php(script) - except ExpatError: - # ignore response failures because the system is going down - pass + async def system_reboot(self) -> bool: + response: Mapping[str, Any] | list = await self._post("/api/core/system/reboot") + _LOGGER.debug(f"[system_reboot] response: {response}") + if isinstance(response, Mapping) and response.get("status", "") == "ok": + return True + return False @_log_errors async def system_halt(self) -> None: - script: str = r""" -use OPNsense\Core\Backend; - -$backend = new Backend(); -$backend->configdRun('system halt', true); - -$toreturn = [ - "data" => true, -]; -""" - try: - await self._exec_php(script) - except ExpatError: - # ignore response failures because the system is going down - pass + response: Mapping[str, Any] | list = await self._post("/api/core/system/halt") + _LOGGER.debug(f"[system_halt] response: {response}") + if isinstance(response, Mapping) and response.get("status", "") == "ok": + return True + return False @_log_errors async def send_wol(self, interface, mac) -> Mapping[str, Any]: From 2e9ce60148b053c6b25269c476133dee4c2b51d7 Mon Sep 17 00:00:00 2001 From: Snuffy2 Date: Tue, 17 Sep 2024 21:52:39 -0400 Subject: [PATCH 2/2] Update function_method.md --- function_method.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/function_method.md b/function_method.md index cb80187..b3a3b38 100644 --- a/function_method.md +++ b/function_method.md @@ -32,8 +32,6 @@ | Get Carp Interfaces | Yes | Yes | | | Delete ARP Entry | Yes | | | | Get MAC by IP | Yes | Yes | Doesn't appear to be used anymore. Probably just remove altogether. | -| System Reboot | Yes | Yes | | -| System Halt | Yes | Yes | | | Send WOL | Yes | Yes | | | Are Notices Pending | Yes | Yes | | | Get Notices | Yes | Yes | | @@ -58,3 +56,5 @@ | Upgrade Firmware | /api/core/firmware/update
/api/core/firmware/upgrade | 2018 | | | Firmware Upgrade Status | /api/core/firmware/upgradestatus | 2018 | | | Firmware Changelog | /api/core/firmware/changelog/ | 2018 | | +| System Reboot | /api/core/system/reboot | 20.1 | | +| System Halt | /api/core/system/halt | 20.1 | |