diff --git a/homeassistant/components/fully_kiosk/diagnostics.py b/homeassistant/components/fully_kiosk/diagnostics.py new file mode 100644 index 00000000000..89a894d5353 --- /dev/null +++ b/homeassistant/components/fully_kiosk/diagnostics.py @@ -0,0 +1,64 @@ +"""Provides diagnostics for Fully Kiosk Browser.""" +from __future__ import annotations + +from typing import Any + +from homeassistant.components.diagnostics.util import async_redact_data +from homeassistant.config_entries import ConfigEntry +from homeassistant.core import HomeAssistant +from homeassistant.helpers import device_registry as dr + +from .const import DOMAIN + +DEVICE_INFO_TO_REDACT = { + "serial", + "Mac", + "ip6", + "hostname6", + "ip4", + "hostname4", + "deviceID", + "startUrl", + "currentPage", + "SSID", + "BSSID", +} +SETTINGS_TO_REDACT = { + "startURL", + "mqttBrokerPassword", + "mqttBrokerUsername", + "remoteAdminPassword", + "wifiKey", + "authPassword", + "authUsername", + "mqttBrokerUrl", + "kioskPin", + "wifiSSID", + "screensaverWallpaperURL", + "barcodeScanTargetUrl", + "launcherBgUrl", + "clientCaUrl", + "urlWhitelist", + "alarmSoundFileUrl", + "errorURL", + "actionBarIconUrl", + "kioskWifiPin", + "knoxApnConfig", + "injectJsCode", + "mdmApnConfig", + "mdmProxyConfig", + "wifiEnterpriseIdentity", + "sebExamKey", + "sebConfigKey", + "kioskPinEnc", +} + + +async def async_get_device_diagnostics( + hass: HomeAssistant, entry: ConfigEntry, device: dr.DeviceEntry +) -> dict[str, Any]: + """Return device diagnostics.""" + coordinator = hass.data[DOMAIN][entry.entry_id] + data = coordinator.data + data["settings"] = async_redact_data(data["settings"], SETTINGS_TO_REDACT) + return async_redact_data(data, DEVICE_INFO_TO_REDACT) diff --git a/tests/components/fully_kiosk/test_diagnostics.py b/tests/components/fully_kiosk/test_diagnostics.py new file mode 100644 index 00000000000..8136147fb6a --- /dev/null +++ b/tests/components/fully_kiosk/test_diagnostics.py @@ -0,0 +1,43 @@ +"""Test the Fully Kiosk Browser diagnostics.""" +from unittest.mock import MagicMock + +from aiohttp import ClientSession + +from homeassistant.components.diagnostics.const import REDACTED +from homeassistant.components.fully_kiosk.const import DOMAIN +from homeassistant.components.fully_kiosk.diagnostics import ( + DEVICE_INFO_TO_REDACT, + SETTINGS_TO_REDACT, +) +from homeassistant.core import HomeAssistant +from homeassistant.helpers import device_registry as dr + +from tests.common import MockConfigEntry +from tests.components.diagnostics import get_diagnostics_for_device + + +async def test_diagnostics( + hass: HomeAssistant, + hass_client: ClientSession, + mock_fully_kiosk: MagicMock, + init_integration: MockConfigEntry, +) -> None: + """Test Fully Kiosk diagnostics.""" + + device_registry = dr.async_get(hass) + device = device_registry.async_get_device({(DOMAIN, "abcdef-123456")}) + + diagnostics = await get_diagnostics_for_device( + hass, hass_client, init_integration, device + ) + + assert diagnostics + for key in DEVICE_INFO_TO_REDACT: + if hasattr(diagnostics, key): + assert diagnostics[key] == REDACTED + for key in SETTINGS_TO_REDACT: + if hasattr(diagnostics["settings"], key): + assert ( + diagnostics["settings"][key] == REDACTED + or diagnostics["settings"][key] == "" + )