From a6e712c9eaa19ba0ec6ab7cfc74b271ca3cc3000 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Sat, 30 Mar 2019 23:37:11 +0100 Subject: [PATCH 01/17] Bump version 153 --- hassio/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hassio/const.py b/hassio/const.py index 060730837..6c781fcfd 100644 --- a/hassio/const.py +++ b/hassio/const.py @@ -2,7 +2,7 @@ from pathlib import Path from ipaddress import ip_network -HASSIO_VERSION = "152" +HASSIO_VERSION = "153" URL_HASSIO_ADDONS = "https://github.com/home-assistant/hassio-addons" URL_HASSIO_VERSION = "https://s3.amazonaws.com/hassio-version/{channel}.json" From 79669a5d04bc949cceb333e70ffb918f32b468c0 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Mon, 1 Apr 2019 12:49:59 +0200 Subject: [PATCH 02/17] Set up CI with Azure Pipelines [skip ci] --- azure-pipelines.yml | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 azure-pipelines.yml diff --git a/azure-pipelines.yml b/azure-pipelines.yml new file mode 100644 index 000000000..325074af7 --- /dev/null +++ b/azure-pipelines.yml @@ -0,0 +1,44 @@ +# Python package +# Create and test a Python package on multiple Python versions. +# Add steps that analyze code, save the dist with the build record, publish to a PyPI-compatible index, and more: +# https://docs.microsoft.com/azure/devops/pipelines/languages/python + +trigger: +- master + +jobs: + +- job: "Tox" + + pool: + vmImage: 'ubuntu-16.04' + + steps: + - task: UsePythonVersion@0 + displayName: 'Use Python $(python.version)' + inputs: + versionSpec: '3.7' + + - script: pip install tox + displayName: 'Install Tox' + + - script: tox + displayName: 'Run Tox' + + +- job: "JQ" + + pool: + vmImage: 'ubuntu-16.04' + + steps: + - task: UsePythonVersion@0 + displayName: 'Use Python $(python.version)' + inputs: + versionSpec: '$(python.version)' + + - script: apt-get install jq + displayName: 'Install JQ' + + - script: "cat **/*.json | jq" + displayName: 'Run JQ' From bac5f704dcb07076a49ef540214e199f1b4f844f Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Mon, 1 Apr 2019 13:01:37 +0200 Subject: [PATCH 03/17] Update azure-pipelines.yml for Azure Pipelines [skip ci] --- azure-pipelines.yml | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 325074af7..b82070277 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -32,13 +32,8 @@ jobs: vmImage: 'ubuntu-16.04' steps: - - task: UsePythonVersion@0 - displayName: 'Use Python $(python.version)' - inputs: - versionSpec: '$(python.version)' - - script: apt-get install jq displayName: 'Install JQ' - - script: "cat **/*.json | jq" + - bash: "cat **/*.json | jq" displayName: 'Run JQ' From 45de0f2f39d0e65606f58e584ad2d61fd4c31ebd Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Mon, 1 Apr 2019 13:05:23 +0200 Subject: [PATCH 04/17] Update azure-pipelines.yml for Azure Pipelines [skip ci] --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index b82070277..eea4b0456 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -32,7 +32,7 @@ jobs: vmImage: 'ubuntu-16.04' steps: - - script: apt-get install jq + - script: sudo apt-get install -y jq displayName: 'Install JQ' - bash: "cat **/*.json | jq" From 06a2ab26a2446594fff579f5d2cd6a90ec2e88dc Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Mon, 1 Apr 2019 13:56:02 +0200 Subject: [PATCH 05/17] Update azure-pipelines.yml for Azure Pipelines [skip ci] --- azure-pipelines.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index eea4b0456..ff18ac073 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -35,5 +35,7 @@ jobs: - script: sudo apt-get install -y jq displayName: 'Install JQ' - - bash: "cat **/*.json | jq" + - bash: | + shopt -s globstar + cat **/*.json | jq '.' displayName: 'Run JQ' From dee2808cb52952c45cf21f0e08ae4e77123ba320 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Mon, 1 Apr 2019 13:57:42 +0200 Subject: [PATCH 06/17] Delete main.workflow --- .github/main.workflow | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 .github/main.workflow diff --git a/.github/main.workflow b/.github/main.workflow deleted file mode 100644 index 8375d5b87..000000000 --- a/.github/main.workflow +++ /dev/null @@ -1,16 +0,0 @@ -workflow "tox" { - on = "push" - resolves = [ - "Python 3.7", - "Json Files", - ] -} - -action "Python 3.7" { - uses = "home-assistant/actions/py37-tox@master" -} - -action "Json Files" { - uses = "home-assistant/actions/jq@master" - args = "**/*.json" -} From a48e568efc5f5c053bbbfcb3ec4fac38d04150ec Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Mon, 1 Apr 2019 14:01:59 +0200 Subject: [PATCH 07/17] Update azure-pipelines.yml for Azure Pipelines [skip ci] --- azure-pipelines.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index ff18ac073..0c1a6f471 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -5,6 +5,10 @@ trigger: - master +- dev + +pr: +- dev jobs: From 8451020afec36ebbe4c05e05f356a39c25bc853f Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Mon, 1 Apr 2019 14:02:28 +0200 Subject: [PATCH 08/17] Update uvloop 0.12.2 (#988) --- hassio/__main__.py | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/hassio/__main__.py b/hassio/__main__.py index 074849d91..c8bcb62be 100644 --- a/hassio/__main__.py +++ b/hassio/__main__.py @@ -13,7 +13,7 @@ def initialize_event_loop(): """Attempt to use uvloop.""" try: import uvloop - asyncio.set_event_loop_policy(uvloop.EventLoopPolicy()) + uvloop.install() except ImportError: pass diff --git a/requirements.txt b/requirements.txt index 6fc863a39..845b17f01 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,5 +9,5 @@ docker==3.7.0 gitpython==2.1.11 pytz==2018.9 pyudev==0.21.0 -uvloop==0.11.3 +uvloop==0.12.2 voluptuous==0.11.5 From 2ae93ae7b12d7ea521a613064c37cac0552827f1 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Mon, 1 Apr 2019 16:58:58 +0200 Subject: [PATCH 09/17] Update API data for deconz (#989) * Update API data for deconz * Fix tests --- hassio/discovery/const.py | 2 ++ hassio/discovery/services/deconz.py | 9 +++++++-- tests/discovery/test_deconz.py | 7 +++++-- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/hassio/discovery/const.py b/hassio/discovery/const.py index c85f248fd..71ca1b020 100644 --- a/hassio/discovery/const.py +++ b/hassio/discovery/const.py @@ -6,3 +6,5 @@ ATTR_PORT = "port" ATTR_PROTOCOL = "protocol" ATTR_SSL = "ssl" ATTR_USERNAME = "username" +ATTR_API_KEY = "api_key" +ATTR_SERIAL = "serial" diff --git a/hassio/discovery/services/deconz.py b/hassio/discovery/services/deconz.py index d817aac1f..463e8474d 100644 --- a/hassio/discovery/services/deconz.py +++ b/hassio/discovery/services/deconz.py @@ -3,9 +3,14 @@ import voluptuous as vol from hassio.validate import NETWORK_PORT -from ..const import ATTR_HOST, ATTR_PORT +from ..const import ATTR_HOST, ATTR_PORT, ATTR_API_KEY, ATTR_SERIAL SCHEMA = vol.Schema( - {vol.Required(ATTR_HOST): vol.Coerce(str), vol.Required(ATTR_PORT): NETWORK_PORT} + { + vol.Required(ATTR_HOST): vol.Coerce(str), + vol.Required(ATTR_PORT): NETWORK_PORT, + vol.Required(ATTR_SERIAL): vol.Coerce(str), + vol.Required(ATTR_API_KEY): vol.Coerce(str), + } ) diff --git a/tests/discovery/test_deconz.py b/tests/discovery/test_deconz.py index 092cd35cd..4f76db326 100644 --- a/tests/discovery/test_deconz.py +++ b/tests/discovery/test_deconz.py @@ -9,11 +9,14 @@ from hassio.discovery.validate import valid_discovery_config def test_good_config(): """Test good deconz config.""" - valid_discovery_config("deconz", {"host": "test", "port": 3812}) + valid_discovery_config( + "deconz", + {"host": "test", "port": 3812, "api_key": "MY_api_KEY99", "serial": "xyz"}, + ) def test_bad_config(): """Test good deconz config.""" with pytest.raises(vol.Invalid): - valid_discovery_config("deconz", {"host": "test"}) + valid_discovery_config("deconz", {"host": "test", "port": 8080}) From c13a33bf71d2f8fbc52b0f28697d6e4eaa5698c9 Mon Sep 17 00:00:00 2001 From: Stephen Beechen Date: Fri, 5 Apr 2019 02:42:31 -0700 Subject: [PATCH 10/17] Downgrade add-on API access logging to debug (#992) resolves home-assistant/hassio#865 --- hassio/api/proxy.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hassio/api/proxy.py b/hassio/api/proxy.py index 5018999a3..776b10480 100644 --- a/hassio/api/proxy.py +++ b/hassio/api/proxy.py @@ -35,7 +35,7 @@ class APIProxy(CoreSysAttributes): elif not addon.access_homeassistant_api: _LOGGER.warning("Not permitted API access: %s", addon.slug) else: - _LOGGER.info("%s access from %s", request.path, addon.slug) + _LOGGER.debug("%s access from %s", request.path, addon.slug) return raise HTTPUnauthorized() From 1edec61133df4ab131d4027e648faa0fd5e7c769 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Fri, 5 Apr 2019 12:13:44 +0200 Subject: [PATCH 11/17] Add Ingress support (#991) * Add Ingress support to supervisor * Update security * cleanup add-on extraction * update description * fix header part * fix * Fix header check * fix tox * Migrate docker interface typing * Update home assistant to new docker * Migrate supervisor * Fix host add-on problem * Update hassos * Update API * Expose data to API * Check on API ingress support * Add ingress URL * Some cleanups * debug * disable uvloop * Fix issue * test * Fix bug * Fix flow * Fix interface * Fix network * Fix metadata * cleanups * Fix exception * Migrate to token system * Fix webui * Fix update * Fix relaod * Update log messages * Attach ingress url only if enabled * Cleanup ingress url handling * Ingress update * Support check version * Fix raise error * Migrate default port * Fix junks * search error * Fix content filter * Add debug * Update log * Update flags * Update documentation * Cleanup debugs * Fix lint * change default port to 8099 * Fix lint * fix lint --- API.md | 15 +- hassio/__main__.py | 1 + hassio/addons/addon.py | 358 +++++++++++++++++++++++---------- hassio/addons/utils.py | 3 +- hassio/addons/validate.py | 97 +++++++-- hassio/api/__init__.py | 11 + hassio/api/addons.py | 146 +++++++++----- hassio/api/hassos.py | 24 ++- hassio/api/homeassistant.py | 2 + hassio/api/ingress.py | 205 +++++++++++++++++++ hassio/api/security.py | 17 +- hassio/api/supervisor.py | 111 +++++----- hassio/const.py | 11 +- hassio/docker/__init__.py | 81 +++++--- hassio/docker/addon.py | 304 +++++++++++++++------------- hassio/docker/homeassistant.py | 39 ++-- hassio/docker/interface.py | 159 +++++++-------- hassio/docker/network.py | 53 +++-- hassio/docker/supervisor.py | 37 ++-- hassio/exceptions.py | 29 +++ hassio/hassos.py | 75 +++---- hassio/homeassistant.py | 92 +++++---- hassio/snapshots/snapshot.py | 12 +- hassio/supervisor.py | 93 +++++---- hassio/utils/__init__.py | 13 +- pylintrc | 4 + requirements.txt | 2 +- setup.cfg | 2 +- 28 files changed, 1335 insertions(+), 661 deletions(-) create mode 100644 hassio/api/ingress.py diff --git a/API.md b/API.md index e54496400..f279ec6ae 100644 --- a/API.md +++ b/API.md @@ -41,6 +41,7 @@ The addons from `addons` are only installed one. "arch": "armhf|aarch64|i386|amd64", "channel": "stable|beta|dev", "timezone": "TIMEZONE", + "ip_address": "ip address", "wait_boot": "int", "addons": [ { @@ -348,6 +349,7 @@ Load host configs from a USB stick. "last_version": "LAST_VERSION", "arch": "arch", "machine": "Image machine type", + "ip_address": "ip address", "image": "str", "custom": "bool -> if custom image", "boot": "bool", @@ -469,6 +471,7 @@ Get all available addons. "available": "bool", "arch": ["armhf", "aarch64", "i386", "amd64"], "machine": "[raspberrypi2, tinker]", + "homeassistant": "min Home Assistant version", "repository": "12345678|null", "version": "null|VERSION_INSTALLED", "last_version": "LAST_VERSION", @@ -505,7 +508,11 @@ Get all available addons. "audio_input": "null|0,0", "audio_output": "null|0,0", "services_role": "['service:access']", - "discovery": "['service']" + "discovery": "['service']", + "ip_address": "ip address", + "ingress": "bool", + "ingress_entry": "/api/hassio_ingress/slug", + "ingress_url": "/api/hassio_ingress/slug/entry.html" } ``` @@ -579,6 +586,12 @@ Write data to add-on stdin } ``` +### ingress + +- VIEW `/ingress/{token}` + +Ingress WebUI for this Add-on. The addon need support HASS Auth! + ### discovery - GET `/discovery` diff --git a/hassio/__main__.py b/hassio/__main__.py index c8bcb62be..31596d318 100644 --- a/hassio/__main__.py +++ b/hassio/__main__.py @@ -13,6 +13,7 @@ def initialize_event_loop(): """Attempt to use uvloop.""" try: import uvloop + uvloop.install() except ImportError: pass diff --git a/hassio/addons/addon.py b/hassio/addons/addon.py index 8019e3cc7..fe632348a 100644 --- a/hassio/addons/addon.py +++ b/hassio/addons/addon.py @@ -1,41 +1,105 @@ """Init file for Hass.io add-ons.""" from contextlib import suppress from copy import deepcopy +from distutils.version import StrictVersion +from ipaddress import IPv4Address, ip_address import logging from pathlib import Path, PurePath import re import shutil import tarfile from tempfile import TemporaryDirectory -from typing import Dict, Any +from typing import Any, Awaitable, Dict, Optional import voluptuous as vol from voluptuous.humanize import humanize_error from ..const import ( - ATTR_ACCESS_TOKEN, ATTR_APPARMOR, ATTR_ARCH, ATTR_AUDIO, ATTR_AUDIO_INPUT, - ATTR_AUDIO_OUTPUT, ATTR_AUTH_API, ATTR_AUTO_UART, ATTR_AUTO_UPDATE, - ATTR_BOOT, ATTR_DESCRIPTON, ATTR_DEVICES, ATTR_DEVICETREE, ATTR_DISCOVERY, - ATTR_DOCKER_API, ATTR_ENVIRONMENT, ATTR_FULL_ACCESS, ATTR_GPIO, - ATTR_HASSIO_API, ATTR_HASSIO_ROLE, ATTR_HOMEASSISTANT_API, ATTR_HOST_DBUS, - ATTR_HOST_IPC, ATTR_HOST_NETWORK, ATTR_HOST_PID, ATTR_IMAGE, - ATTR_KERNEL_MODULES, ATTR_LEGACY, ATTR_LOCATON, ATTR_MACHINE, ATTR_MAP, - ATTR_NAME, ATTR_NETWORK, ATTR_OPTIONS, ATTR_PORTS, ATTR_PRIVILEGED, - ATTR_PROTECTED, ATTR_REPOSITORY, ATTR_SCHEMA, ATTR_SERVICES, ATTR_SLUG, - ATTR_STARTUP, ATTR_STATE, ATTR_STDIN, ATTR_SYSTEM, ATTR_TIMEOUT, - ATTR_TMPFS, ATTR_URL, ATTR_USER, ATTR_UUID, ATTR_VERSION, ATTR_WEBUI, - SECURITY_DEFAULT, SECURITY_DISABLE, SECURITY_PROFILE, STATE_NONE, - STATE_STARTED, STATE_STOPPED) -from ..coresys import CoreSysAttributes + ATTR_ACCESS_TOKEN, + ATTR_APPARMOR, + ATTR_ARCH, + ATTR_AUDIO, + ATTR_AUDIO_INPUT, + ATTR_AUDIO_OUTPUT, + ATTR_AUTH_API, + ATTR_AUTO_UART, + ATTR_AUTO_UPDATE, + ATTR_BOOT, + ATTR_DESCRIPTON, + ATTR_DEVICES, + ATTR_DEVICETREE, + ATTR_DISCOVERY, + ATTR_DOCKER_API, + ATTR_ENVIRONMENT, + ATTR_FULL_ACCESS, + ATTR_GPIO, + ATTR_HASSIO_API, + ATTR_HASSIO_ROLE, + ATTR_HOMEASSISTANT, + ATTR_HOMEASSISTANT_API, + ATTR_HOST_DBUS, + ATTR_HOST_IPC, + ATTR_HOST_NETWORK, + ATTR_HOST_PID, + ATTR_IMAGE, + ATTR_INGRESS, + ATTR_INGRESS_ENTRY, + ATTR_INGRESS_PORT, + ATTR_INGRESS_TOKEN, + ATTR_KERNEL_MODULES, + ATTR_LEGACY, + ATTR_LOCATON, + ATTR_MACHINE, + ATTR_MAP, + ATTR_NAME, + ATTR_NETWORK, + ATTR_OPTIONS, + ATTR_PORTS, + ATTR_PRIVILEGED, + ATTR_PROTECTED, + ATTR_REPOSITORY, + ATTR_SCHEMA, + ATTR_SERVICES, + ATTR_SLUG, + ATTR_STARTUP, + ATTR_STATE, + ATTR_STDIN, + ATTR_SYSTEM, + ATTR_TIMEOUT, + ATTR_TMPFS, + ATTR_URL, + ATTR_USER, + ATTR_UUID, + ATTR_VERSION, + ATTR_WEBUI, + SECURITY_DEFAULT, + SECURITY_DISABLE, + SECURITY_PROFILE, + STATE_NONE, + STATE_STARTED, + STATE_STOPPED, +) +from ..coresys import CoreSys, CoreSysAttributes from ..docker.addon import DockerAddon -from ..exceptions import HostAppArmorError, JsonFileError +from ..docker.stats import DockerStats +from ..exceptions import ( + AddonsError, + AddonsNotSupportedError, + DockerAPIError, + HostAppArmorError, + JsonFileError, +) from ..utils import create_token from ..utils.apparmor import adjust_profile from ..utils.json import read_json_file, write_json_file from .utils import check_installed, remove_data from .validate import ( - MACHINE_ALL, RE_SERVICE, RE_VOLUME, SCHEMA_ADDON_SNAPSHOT, - validate_options) + MACHINE_ALL, + RE_SERVICE, + RE_VOLUME, + SCHEMA_ADDON_SNAPSHOT, + validate_options, +) _LOGGER = logging.getLogger(__name__) @@ -47,21 +111,28 @@ RE_WEBUI = re.compile( class Addon(CoreSysAttributes): """Hold data for add-on inside Hass.io.""" - def __init__(self, coresys, slug): + def __init__(self, coresys: CoreSys, slug: str): """Initialize data holder.""" - self.coresys = coresys - self.instance = DockerAddon(coresys, slug) + self.coresys: CoreSys = coresys + self.instance: DockerAddon = DockerAddon(coresys, slug) + self._id: str = slug - self._id = slug - - async def load(self): + async def load(self) -> None: """Async initialize of object.""" if not self.is_installed: return - await self.instance.attach() + with suppress(DockerAPIError): + await self.instance.attach() @property - def slug(self): + def ip_address(self) -> IPv4Address: + """Return IP of Add-on instance.""" + if not self.is_installed: + return ip_address("0.0.0.0") + return self.instance.ip_address + + @property + def slug(self) -> str: """Return slug/id of add-on.""" return self._id @@ -76,30 +147,41 @@ class Addon(CoreSysAttributes): return self.sys_addons.data @property - def is_installed(self): + def is_installed(self) -> bool: """Return True if an add-on is installed.""" return self._id in self._data.system @property - def is_detached(self): + def is_detached(self) -> bool: """Return True if add-on is detached.""" return self._id not in self._data.cache @property - def available(self): + def available(self) -> bool: """Return True if this add-on is available on this platform.""" + if self.is_detached: + addon_data = self._data.system.get(self._id) + else: + addon_data = self._data.cache.get(self._id) + # Architecture - if not self.sys_arch.is_supported(self.supported_arch): + if not self.sys_arch.is_supported(addon_data[ATTR_ARCH]): return False # Machine / Hardware - if self.sys_machine not in self.supported_machine: + machine = addon_data.get(ATTR_MACHINE) or MACHINE_ALL + if self.sys_machine not in machine: + return False + + # Home Assistant + version = addon_data.get(ATTR_HOMEASSISTANT) or self.sys_homeassistant.version + if StrictVersion(self.sys_homeassistant.version) < StrictVersion(version): return False return True @property - def version_installed(self): + def version_installed(self) -> Optional[str]: """Return installed version.""" return self._data.user.get(self._id, {}).get(ATTR_VERSION) @@ -202,6 +284,20 @@ class Addon(CoreSysAttributes): return self._data.user[self._id].get(ATTR_ACCESS_TOKEN) return None + @property + def ingress_token(self): + """Return access token for Hass.io API.""" + if self.is_installed: + return self._data.user[self._id].get(ATTR_INGRESS_TOKEN) + return None + + @property + def ingress_entry(self): + """Return ingress external URL.""" + if self.is_installed and self.with_ingress: + return f"/api/hassio_ingress/{self.ingress_token}" + return None + @property def description(self): """Return description of add-on.""" @@ -292,6 +388,18 @@ class Addon(CoreSysAttributes): self._data.user[self._id][ATTR_NETWORK] = new_ports + @property + def ingress_url(self): + """Return URL to ingress url.""" + # Use ingress + if not self.with_ingress: + return None + + webui = f"/api/hassio_ingress/{self.ingress_token}/" + if ATTR_INGRESS_ENTRY in self._mesh: + return f"{webui}{self._mesh[ATTR_INGRESS_ENTRY]}" + return webui + @property def webui(self): """Return URL to webui or None.""" @@ -323,6 +431,11 @@ class Addon(CoreSysAttributes): return f"{proto}://[HOST]:{port}{s_suffix}" + @property + def ingress_internal(self): + """Return Ingress host URL.""" + return f"http://{self.ip_address}:{self._mesh[ATTR_INGRESS_PORT]}" + @property def host_network(self): """Return True if add-on run on host network.""" @@ -407,6 +520,11 @@ class Addon(CoreSysAttributes): """Return True if the add-on access use stdin input.""" return self._mesh[ATTR_STDIN] + @property + def with_ingress(self): + """Return True if the add-on access support ingress.""" + return self._mesh[ATTR_INGRESS] + @property def with_gpio(self): """Return True if the add-on access to GPIO interface.""" @@ -437,6 +555,11 @@ class Addon(CoreSysAttributes): """Return True if the add-on access to audio.""" return self._mesh[ATTR_AUDIO] + @property + def homeassistant_version(self) -> Optional[str]: + """Return min Home Assistant version they needed by Add-on.""" + return self._mesh.get(ATTR_HOMEASSISTANT) + @property def audio_output(self): """Return ALSA config for output or None.""" @@ -642,7 +765,7 @@ class Addon(CoreSysAttributes): return True - async def _install_apparmor(self): + async def _install_apparmor(self) -> None: """Install or Update AppArmor profile for Add-on.""" exists_local = self.sys_host.apparmor.exists(self.slug) exists_addon = self.path_apparmor.exists() @@ -664,7 +787,7 @@ class Addon(CoreSysAttributes): await self.sys_host.apparmor.load_profile(self.slug, profile_file) @property - def schema(self): + def schema(self) -> vol.Schema: """Create a schema for add-on options.""" raw_schema = self._mesh[ATTR_SCHEMA] @@ -672,7 +795,7 @@ class Addon(CoreSysAttributes): return vol.Schema(dict) return vol.Schema(vol.All(dict, validate_options(raw_schema))) - def test_update_schema(self): + def test_update_schema(self) -> bool: """Check if the existing configuration is valid after update.""" if not self.is_installed or self.is_detached: return True @@ -702,17 +825,17 @@ class Addon(CoreSysAttributes): return False return True - async def install(self): + async def install(self) -> None: """Install an add-on.""" if not self.available: _LOGGER.error( "Add-on %s not supported on %s with %s architecture", self._id, self.sys_machine, self.sys_arch.supported) - return False + raise AddonsNotSupportedError() if self.is_installed: - _LOGGER.error("Add-on %s is already installed", self._id) - return False + _LOGGER.warning("Add-on %s is already installed", self._id) + return if not self.path_data.is_dir(): _LOGGER.info( @@ -722,18 +845,20 @@ class Addon(CoreSysAttributes): # Setup/Fix AppArmor profile await self._install_apparmor() - if not await self.instance.install( - self.last_version, self.image_next): - return False - - self._set_install(self.image_next, self.last_version) - return True + try: + await self.instance.install(self.last_version, self.image_next) + except DockerAPIError: + raise AddonsError() from None + else: + self._set_install(self.image_next, self.last_version) @check_installed - async def uninstall(self): + async def uninstall(self) -> None: """Remove an add-on.""" - if not await self.instance.remove(): - return False + try: + await self.instance.remove() + except DockerAPIError: + raise AddonsError() from None if self.path_data.is_dir(): _LOGGER.info( @@ -750,13 +875,11 @@ class Addon(CoreSysAttributes): with suppress(HostAppArmorError): await self.sys_host.apparmor.remove_profile(self.slug) - # Remove discovery messages + # Cleanup internal data self.remove_discovery() - self._set_uninstall() - return True - async def state(self): + async def state(self) -> str: """Return running state of add-on.""" if not self.is_installed: return STATE_NONE @@ -766,7 +889,7 @@ class Addon(CoreSysAttributes): return STATE_STOPPED @check_installed - async def start(self): + async def start(self) -> None: """Set options and start add-on.""" if await self.instance.is_running(): _LOGGER.warning("%s already running!", self.slug) @@ -778,34 +901,45 @@ class Addon(CoreSysAttributes): # Options if not self.write_options(): - return False + raise AddonsError() # Sound if self.with_audio and not self.write_asound(): - return False + raise AddonsError() - return await self.instance.run() + try: + await self.instance.run() + except DockerAPIError: + raise AddonsError() from None @check_installed - def stop(self): - """Stop add-on. - - Return a coroutine. - """ - return self.instance.stop() + async def stop(self) -> None: + """Stop add-on.""" + try: + return await self.instance.stop() + except DockerAPIError: + raise AddonsError() from None @check_installed - async def update(self): + async def update(self) -> None: """Update add-on.""" - last_state = await self.state() - if self.last_version == self.version_installed: _LOGGER.warning("No update available for add-on %s", self._id) - return False + return - if not await self.instance.update( - self.last_version, self.image_next): - return False + # Check if available, Maybe something have changed + if not self.available: + _LOGGER.error( + "Add-on %s not supported on %s with %s architecture", + self._id, self.sys_machine, self.sys_arch.supported) + raise AddonsNotSupportedError() + + # Update instance + last_state = await self.state() + try: + await self.instance.update(self.last_version, self.image_next) + except DockerAPIError: + raise AddonsError() from None self._set_update(self.image_next, self.last_version) # Setup/Fix AppArmor profile @@ -814,16 +948,16 @@ class Addon(CoreSysAttributes): # restore state if last_state == STATE_STARTED: await self.start() - return True @check_installed - async def restart(self): + async def restart(self) -> None: """Restart add-on.""" - await self.stop() - return await self.start() + with suppress(AddonsError): + await self.stop() + await self.start() @check_installed - def logs(self): + def logs(self) -> Awaitable[bytes]: """Return add-ons log output. Return a coroutine. @@ -831,33 +965,32 @@ class Addon(CoreSysAttributes): return self.instance.logs() @check_installed - def stats(self): - """Return stats of container. - - Return a coroutine. - """ - return self.instance.stats() + async def stats(self) -> DockerStats: + """Return stats of container.""" + try: + return await self.instance.stats() + except DockerAPIError: + raise AddonsError() from None @check_installed - async def rebuild(self): + async def rebuild(self) -> None: """Perform a rebuild of local build add-on.""" last_state = await self.state() if not self.need_build: _LOGGER.error("Can't rebuild a none local build add-on!") - return False + raise AddonsNotSupportedError() # remove docker container but not addon config - if not await self.instance.remove(): - return False - - if not await self.instance.install(self.version_installed): - return False + try: + await self.instance.remove() + await self.instance.install(self.version_installed) + except DockerAPIError: + raise AddonsError() from None # restore state if last_state == STATE_STARTED: await self.start() - return True @check_installed async def write_stdin(self, data): @@ -867,18 +1000,23 @@ class Addon(CoreSysAttributes): """ if not self.with_stdin: _LOGGER.error("Add-on don't support write to stdin!") - return False + raise AddonsNotSupportedError() - return await self.instance.write_stdin(data) + try: + return await self.instance.write_stdin(data) + except DockerAPIError: + raise AddonsError() from None @check_installed - async def snapshot(self, tar_file): + async def snapshot(self, tar_file: tarfile.TarFile) -> None: """Snapshot state of an add-on.""" with TemporaryDirectory(dir=str(self.sys_config.path_tmp)) as temp: # store local image - if self.need_build and not await \ - self.instance.export_image(Path(temp, 'image.tar')): - return False + if self.need_build: + try: + await self.instance.export_image(Path(temp, 'image.tar')) + except DockerAPIError: + raise AddonsError() from None data = { ATTR_USER: self._data.user.get(self._id, {}), @@ -892,7 +1030,7 @@ class Addon(CoreSysAttributes): write_json_file(Path(temp, 'addon.json'), data) except JsonFileError: _LOGGER.error("Can't save meta for %s", self._id) - return False + raise AddonsError() from None # Store AppArmor Profile if self.sys_host.apparmor.exists(self.slug): @@ -901,7 +1039,7 @@ class Addon(CoreSysAttributes): self.sys_host.apparmor.backup_profile(self.slug, profile) except HostAppArmorError: _LOGGER.error("Can't backup AppArmor profile") - return False + raise AddonsError() from None # write into tarfile def _write_tarfile(): @@ -915,12 +1053,11 @@ class Addon(CoreSysAttributes): await self.sys_run_in_executor(_write_tarfile) except (tarfile.TarError, OSError) as err: _LOGGER.error("Can't write tarfile %s: %s", tar_file, err) - return False + raise AddonsError() from None _LOGGER.info("Finish snapshot for addon %s", self._id) - return True - async def restore(self, tar_file): + async def restore(self, tar_file: tarfile.TarFile) -> None: """Restore state of an add-on.""" with TemporaryDirectory(dir=str(self.sys_config.path_tmp)) as temp: # extract snapshot @@ -933,13 +1070,13 @@ class Addon(CoreSysAttributes): await self.sys_run_in_executor(_extract_tarfile) except tarfile.TarError as err: _LOGGER.error("Can't read tarfile %s: %s", tar_file, err) - return False + raise AddonsError() from None # Read snapshot data try: data = read_json_file(Path(temp, 'addon.json')) except JsonFileError: - return False + raise AddonsError() from None # Validate try: @@ -947,7 +1084,7 @@ class Addon(CoreSysAttributes): except vol.Invalid as err: _LOGGER.error("Can't validate %s, snapshot data: %s", self._id, humanize_error(data, err)) - return False + raise AddonsError() from None # Restore local add-on informations _LOGGER.info("Restore config for addon %s", self._id) @@ -961,15 +1098,19 @@ class Addon(CoreSysAttributes): image_file = Path(temp, 'image.tar') if image_file.is_file(): - await self.instance.import_image(image_file, version) + with suppress(DockerAPIError): + await self.instance.import_image(image_file, version) else: - if await self.instance.install(version, restore_image): + with suppress(DockerAPIError): + await self.instance.install(version, restore_image) await self.instance.cleanup() elif self.instance.version != version or self.legacy: _LOGGER.info("Restore/Update image for addon %s", self._id) - await self.instance.update(version, restore_image) + with suppress(DockerAPIError): + await self.instance.update(version, restore_image) else: - await self.instance.stop() + with suppress(DockerAPIError): + await self.instance.stop() # Restore data def _restore_data(): @@ -983,7 +1124,7 @@ class Addon(CoreSysAttributes): await self.sys_run_in_executor(_restore_data) except shutil.Error as err: _LOGGER.error("Can't restore origin data: %s", err) - return False + raise AddonsError() from None # Restore AppArmor profile_file = Path(temp, 'apparmor.txt') @@ -993,11 +1134,10 @@ class Addon(CoreSysAttributes): self.slug, profile_file) except HostAppArmorError: _LOGGER.error("Can't restore AppArmor profile") - return False + raise AddonsError() from None # Run add-on if data[ATTR_STATE] == STATE_STARTED: return await self.start() _LOGGER.info("Finish restore for add-on %s", self._id) - return True diff --git a/hassio/addons/utils.py b/hassio/addons/utils.py index b2ae6f718..3d59e585a 100644 --- a/hassio/addons/utils.py +++ b/hassio/addons/utils.py @@ -20,6 +20,7 @@ from ..const import ( SECURITY_DISABLE, SECURITY_PROFILE, ) +from ..exceptions import AddonsNotSupportedError if TYPE_CHECKING: from .addon import Addon @@ -107,7 +108,7 @@ def check_installed(method): """Return False if not installed or the function.""" if not addon.is_installed: _LOGGER.error("Addon %s is not installed", addon.slug) - return False + raise AddonsNotSupportedError() return await method(addon, *args, **kwargs) return wrap_check diff --git a/hassio/addons/validate.py b/hassio/addons/validate.py index 62b2567b8..6d5d83f3a 100644 --- a/hassio/addons/validate.py +++ b/hassio/addons/validate.py @@ -1,29 +1,87 @@ """Validate add-ons options schema.""" import logging import re +import secrets import uuid import voluptuous as vol from ..const import ( - ARCH_ALL, ATTR_ACCESS_TOKEN, ATTR_APPARMOR, ATTR_ARCH, ATTR_ARGS, - ATTR_AUDIO, ATTR_AUDIO_INPUT, ATTR_AUDIO_OUTPUT, ATTR_AUTH_API, - ATTR_AUTO_UART, ATTR_AUTO_UPDATE, ATTR_BOOT, ATTR_BUILD_FROM, - ATTR_DESCRIPTON, ATTR_DEVICES, ATTR_DEVICETREE, ATTR_DISCOVERY, - ATTR_DOCKER_API, ATTR_ENVIRONMENT, ATTR_FULL_ACCESS, ATTR_GPIO, - ATTR_HASSIO_API, ATTR_HASSIO_ROLE, ATTR_HOMEASSISTANT_API, ATTR_HOST_DBUS, - ATTR_HOST_IPC, ATTR_HOST_NETWORK, ATTR_HOST_PID, ATTR_IMAGE, - ATTR_KERNEL_MODULES, ATTR_LEGACY, ATTR_LOCATON, ATTR_MACHINE, - ATTR_MAINTAINER, ATTR_MAP, ATTR_NAME, ATTR_NETWORK, ATTR_OPTIONS, - ATTR_PORTS, ATTR_PRIVILEGED, ATTR_PROTECTED, ATTR_REPOSITORY, ATTR_SCHEMA, - ATTR_SERVICES, ATTR_SLUG, ATTR_SQUASH, ATTR_STARTUP, ATTR_STATE, - ATTR_STDIN, ATTR_SYSTEM, ATTR_TIMEOUT, ATTR_TMPFS, ATTR_URL, ATTR_USER, - ATTR_UUID, ATTR_VERSION, ATTR_WEBUI, BOOT_AUTO, BOOT_MANUAL, - PRIVILEGED_ALL, ROLE_ALL, ROLE_DEFAULT, STARTUP_ALL, STARTUP_APPLICATION, - STARTUP_SERVICES, STATE_STARTED, STATE_STOPPED) + ARCH_ALL, + ATTR_ACCESS_TOKEN, + ATTR_APPARMOR, + ATTR_ARCH, + ATTR_ARGS, + ATTR_AUDIO, + ATTR_AUDIO_INPUT, + ATTR_AUDIO_OUTPUT, + ATTR_AUTH_API, + ATTR_AUTO_UART, + ATTR_AUTO_UPDATE, + ATTR_BOOT, + ATTR_BUILD_FROM, + ATTR_DESCRIPTON, + ATTR_DEVICES, + ATTR_DEVICETREE, + ATTR_DISCOVERY, + ATTR_DOCKER_API, + ATTR_ENVIRONMENT, + ATTR_FULL_ACCESS, + ATTR_GPIO, + ATTR_HASSIO_API, + ATTR_HASSIO_ROLE, + ATTR_HOMEASSISTANT_API, + ATTR_HOMEASSISTANT, + ATTR_HOST_DBUS, + ATTR_HOST_IPC, + ATTR_HOST_NETWORK, + ATTR_HOST_PID, + ATTR_IMAGE, + ATTR_INGRESS, + ATTR_INGRESS_ENTRY, + ATTR_INGRESS_PORT, + ATTR_INGRESS_TOKEN, + ATTR_KERNEL_MODULES, + ATTR_LEGACY, + ATTR_LOCATON, + ATTR_MACHINE, + ATTR_MAINTAINER, + ATTR_MAP, + ATTR_NAME, + ATTR_NETWORK, + ATTR_OPTIONS, + ATTR_PORTS, + ATTR_PRIVILEGED, + ATTR_PROTECTED, + ATTR_REPOSITORY, + ATTR_SCHEMA, + ATTR_SERVICES, + ATTR_SLUG, + ATTR_SQUASH, + ATTR_STARTUP, + ATTR_STATE, + ATTR_STDIN, + ATTR_SYSTEM, + ATTR_TIMEOUT, + ATTR_TMPFS, + ATTR_URL, + ATTR_USER, + ATTR_UUID, + ATTR_VERSION, + ATTR_WEBUI, + BOOT_AUTO, + BOOT_MANUAL, + PRIVILEGED_ALL, + ROLE_ALL, + ROLE_DEFAULT, + STARTUP_ALL, + STARTUP_APPLICATION, + STARTUP_SERVICES, + STATE_STARTED, + STATE_STOPPED, +) from ..discovery.validate import valid_discovery_service -from ..validate import ( - ALSA_DEVICE, DOCKER_PORTS, NETWORK_PORT, SHA256, UUID_MATCH) +from ..validate import ALSA_DEVICE, DOCKER_PORTS, NETWORK_PORT, SHA256, UUID_MATCH _LOGGER = logging.getLogger(__name__) @@ -89,6 +147,10 @@ SCHEMA_ADDON_CONFIG = vol.Schema({ vol.Optional(ATTR_PORTS): DOCKER_PORTS, vol.Optional(ATTR_WEBUI): vol.Match(r"^(?:https?|\[PROTO:\w+\]):\/\/\[HOST\]:\[PORT:\d+\].*$"), + vol.Optional(ATTR_INGRESS, default=False): vol.Boolean(), + vol.Optional(ATTR_INGRESS_PORT, default=8099): NETWORK_PORT, + vol.Optional(ATTR_INGRESS_ENTRY): vol.Coerce(str), + vol.Optional(ATTR_HOMEASSISTANT): vol.Maybe(vol.Coerce(str)), vol.Optional(ATTR_HOST_NETWORK, default=False): vol.Boolean(), vol.Optional(ATTR_HOST_PID, default=False): vol.Boolean(), vol.Optional(ATTR_HOST_IPC, default=False): vol.Boolean(), @@ -159,6 +221,7 @@ SCHEMA_ADDON_USER = vol.Schema({ vol.Optional(ATTR_IMAGE): vol.Coerce(str), vol.Optional(ATTR_UUID, default=lambda: uuid.uuid4().hex): UUID_MATCH, vol.Optional(ATTR_ACCESS_TOKEN): SHA256, + vol.Optional(ATTR_INGRESS_TOKEN, default=secrets.token_urlsafe): vol.Coerce(str), vol.Optional(ATTR_OPTIONS, default=dict): dict, vol.Optional(ATTR_AUTO_UPDATE, default=False): vol.Boolean(), vol.Optional(ATTR_BOOT): diff --git a/hassio/api/__init__.py b/hassio/api/__init__.py index c105500e6..f8873e325 100644 --- a/hassio/api/__init__.py +++ b/hassio/api/__init__.py @@ -14,6 +14,7 @@ from .hassos import APIHassOS from .homeassistant import APIHomeAssistant from .host import APIHost from .info import APIInfo +from .ingress import APIIngress from .proxy import APIProxy from .security import SecurityMiddleware from .services import APIServices @@ -47,6 +48,7 @@ class RestAPI(CoreSysAttributes): self._register_proxy() self._register_panel() self._register_addons() + self._register_ingress() self._register_snapshots() self._register_discovery() self._register_services() @@ -186,6 +188,15 @@ class RestAPI(CoreSysAttributes): web.get('/addons/{addon}/stats', api_addons.stats), ]) + def _register_ingress(self) -> None: + """Register Ingress functions.""" + api_ingress = APIIngress() + api_ingress.coresys = self.coresys + + self.webapp.add_routes([ + web.view('/ingress/{token}/{path:.*}', api_ingress.handler), + ]) + def _register_snapshots(self) -> None: """Register snapshots functions.""" api_snapshots = APISnapshots() diff --git a/hassio/api/addons.py b/hassio/api/addons.py index 853c923cd..fefb9306d 100644 --- a/hassio/api/addons.py +++ b/hassio/api/addons.py @@ -1,31 +1,89 @@ """Init file for Hass.io Home Assistant RESTful API.""" import asyncio import logging +from typing import Any, Awaitable, Dict, List +from aiohttp import web import voluptuous as vol from voluptuous.humanize import humanize_error -from .utils import api_process, api_process_raw, api_validate +from ..addons.addon import Addon from ..addons.utils import rating_security from ..const import ( - ATTR_VERSION, ATTR_LAST_VERSION, ATTR_STATE, ATTR_BOOT, ATTR_OPTIONS, - ATTR_URL, ATTR_DESCRIPTON, ATTR_DETACHED, ATTR_NAME, ATTR_REPOSITORY, - ATTR_BUILD, ATTR_AUTO_UPDATE, ATTR_NETWORK, ATTR_HOST_NETWORK, ATTR_SLUG, - ATTR_SOURCE, ATTR_REPOSITORIES, ATTR_ADDONS, ATTR_ARCH, ATTR_MAINTAINER, - ATTR_INSTALLED, ATTR_LOGO, ATTR_WEBUI, ATTR_DEVICES, ATTR_PRIVILEGED, - ATTR_AUDIO, ATTR_AUDIO_INPUT, ATTR_AUDIO_OUTPUT, ATTR_HASSIO_API, - ATTR_GPIO, ATTR_HOMEASSISTANT_API, ATTR_STDIN, BOOT_AUTO, BOOT_MANUAL, - ATTR_CHANGELOG, ATTR_HOST_IPC, ATTR_HOST_DBUS, ATTR_LONG_DESCRIPTION, - ATTR_CPU_PERCENT, ATTR_MEMORY_LIMIT, ATTR_MEMORY_USAGE, ATTR_NETWORK_TX, - ATTR_NETWORK_RX, ATTR_BLK_READ, ATTR_BLK_WRITE, ATTR_ICON, ATTR_SERVICES, - ATTR_DISCOVERY, ATTR_APPARMOR, ATTR_DEVICETREE, ATTR_DOCKER_API, - ATTR_FULL_ACCESS, ATTR_PROTECTED, ATTR_RATING, ATTR_HOST_PID, - ATTR_HASSIO_ROLE, ATTR_MACHINE, ATTR_AVAILABLE, ATTR_AUTH_API, + ATTR_ADDONS, + ATTR_APPARMOR, + ATTR_ARCH, + ATTR_AUDIO, + ATTR_AUDIO_INPUT, + ATTR_AUDIO_OUTPUT, + ATTR_AUTH_API, + ATTR_AUTO_UPDATE, + ATTR_AVAILABLE, + ATTR_BLK_READ, + ATTR_BLK_WRITE, + ATTR_BOOT, + ATTR_BUILD, + ATTR_CHANGELOG, + ATTR_CPU_PERCENT, + ATTR_DESCRIPTON, + ATTR_DETACHED, + ATTR_DEVICES, + ATTR_DEVICETREE, + ATTR_DISCOVERY, + ATTR_DOCKER_API, + ATTR_FULL_ACCESS, + ATTR_GPIO, + ATTR_HASSIO_API, + ATTR_HASSIO_ROLE, + ATTR_HOMEASSISTANT, + ATTR_HOMEASSISTANT_API, + ATTR_HOST_DBUS, + ATTR_HOST_IPC, + ATTR_HOST_NETWORK, + ATTR_HOST_PID, + ATTR_ICON, + ATTR_INGRESS, + ATTR_INGRESS_ENTRY, + ATTR_INGRESS_URL, + ATTR_INSTALLED, + ATTR_IP_ADDRESS, ATTR_KERNEL_MODULES, - CONTENT_TYPE_PNG, CONTENT_TYPE_BINARY, CONTENT_TYPE_TEXT, REQUEST_FROM) + ATTR_LAST_VERSION, + ATTR_LOGO, + ATTR_LONG_DESCRIPTION, + ATTR_MACHINE, + ATTR_MAINTAINER, + ATTR_MEMORY_LIMIT, + ATTR_MEMORY_USAGE, + ATTR_NAME, + ATTR_NETWORK, + ATTR_NETWORK_RX, + ATTR_NETWORK_TX, + ATTR_OPTIONS, + ATTR_PRIVILEGED, + ATTR_PROTECTED, + ATTR_RATING, + ATTR_REPOSITORIES, + ATTR_REPOSITORY, + ATTR_SERVICES, + ATTR_SLUG, + ATTR_SOURCE, + ATTR_STATE, + ATTR_STDIN, + ATTR_URL, + ATTR_VERSION, + ATTR_WEBUI, + BOOT_AUTO, + BOOT_MANUAL, + CONTENT_TYPE_BINARY, + CONTENT_TYPE_PNG, + CONTENT_TYPE_TEXT, + REQUEST_FROM, +) from ..coresys import CoreSysAttributes -from ..validate import DOCKER_PORTS, ALSA_DEVICE from ..exceptions import APIError +from ..validate import ALSA_DEVICE, DOCKER_PORTS +from .utils import api_process, api_process_raw, api_validate _LOGGER = logging.getLogger(__name__) @@ -51,7 +109,7 @@ SCHEMA_SECURITY = vol.Schema({ class APIAddons(CoreSysAttributes): """Handle RESTful API for add-on functions.""" - def _extract_addon(self, request, check_installed=True): + def _extract_addon(self, request: web.Request, check_installed: bool = True) -> Addon: """Return addon, throw an exception it it doesn't exist.""" addon_slug = request.match_info.get('addon') @@ -69,7 +127,7 @@ class APIAddons(CoreSysAttributes): return addon @api_process - async def list(self, request): + async def list(self, request: web.Request) -> Dict[str, Any]: """Return all add-ons or repositories.""" data_addons = [] for addon in self.sys_addons.list_addons: @@ -104,13 +162,12 @@ class APIAddons(CoreSysAttributes): } @api_process - async def reload(self, request): + async def reload(self, request: web.Request) -> None: """Reload all add-on data.""" await asyncio.shield(self.sys_addons.reload()) - return True @api_process - async def info(self, request): + async def info(self, request: web.Request) -> Dict[str, Any]: """Return add-on information.""" addon = self._extract_addon(request, check_installed=False) @@ -130,6 +187,7 @@ class APIAddons(CoreSysAttributes): ATTR_OPTIONS: addon.options, ATTR_ARCH: addon.supported_arch, ATTR_MACHINE: addon.supported_machine, + ATTR_HOMEASSISTANT: addon.homeassistant_version, ATTR_URL: addon.url, ATTR_DETACHED: addon.is_detached, ATTR_AVAILABLE: addon.available, @@ -161,17 +219,20 @@ class APIAddons(CoreSysAttributes): ATTR_AUDIO_OUTPUT: addon.audio_output, ATTR_SERVICES: _pretty_services(addon), ATTR_DISCOVERY: addon.discovery, + ATTR_IP_ADDRESS: str(addon.ip_address), + ATTR_INGRESS: addon.with_ingress, + ATTR_INGRESS_ENTRY: addon.ingress_entry, + ATTR_INGRESS_URL: addon.ingress_url, } @api_process - async def options(self, request): + async def options(self, request: web.Request) -> None: """Store user options for add-on.""" addon = self._extract_addon(request) addon_schema = SCHEMA_OPTIONS.extend({ vol.Optional(ATTR_OPTIONS): vol.Any(None, addon.schema), }) - body = await api_validate(addon_schema, request) if ATTR_OPTIONS in body: @@ -188,10 +249,9 @@ class APIAddons(CoreSysAttributes): addon.audio_output = body[ATTR_AUDIO_OUTPUT] addon.save_data() - return True @api_process - async def security(self, request): + async def security(self, request: web.Request) -> None: """Store security options for add-on.""" addon = self._extract_addon(request) body = await api_validate(SCHEMA_SECURITY, request) @@ -201,17 +261,13 @@ class APIAddons(CoreSysAttributes): addon.protected = body[ATTR_PROTECTED] addon.save_data() - return True @api_process - async def stats(self, request): + async def stats(self, request: web.Request) -> Dict[str, Any]: """Return resource information.""" addon = self._extract_addon(request) stats = await addon.stats() - if not stats: - raise APIError("No stats available") - return { ATTR_CPU_PERCENT: stats.cpu_percent, ATTR_MEMORY_USAGE: stats.memory_usage, @@ -223,19 +279,19 @@ class APIAddons(CoreSysAttributes): } @api_process - def install(self, request): + def install(self, request: web.Request) -> Awaitable[None]: """Install add-on.""" addon = self._extract_addon(request, check_installed=False) return asyncio.shield(addon.install()) @api_process - def uninstall(self, request): + def uninstall(self, request: web.Request) -> Awaitable[None]: """Uninstall add-on.""" addon = self._extract_addon(request) return asyncio.shield(addon.uninstall()) @api_process - def start(self, request): + def start(self, request: web.Request) -> Awaitable[None]: """Start add-on.""" addon = self._extract_addon(request) @@ -249,13 +305,13 @@ class APIAddons(CoreSysAttributes): return asyncio.shield(addon.start()) @api_process - def stop(self, request): + def stop(self, request: web.Request) -> Awaitable[None]: """Stop add-on.""" addon = self._extract_addon(request) return asyncio.shield(addon.stop()) @api_process - def update(self, request): + def update(self, request: web.Request) -> Awaitable[None]: """Update add-on.""" addon = self._extract_addon(request) @@ -265,13 +321,13 @@ class APIAddons(CoreSysAttributes): return asyncio.shield(addon.update()) @api_process - def restart(self, request): + def restart(self, request: web.Request) -> Awaitable[None]: """Restart add-on.""" addon = self._extract_addon(request) return asyncio.shield(addon.restart()) @api_process - def rebuild(self, request): + def rebuild(self, request: web.Request) -> Awaitable[None]: """Rebuild local build add-on.""" addon = self._extract_addon(request) if not addon.need_build: @@ -280,13 +336,13 @@ class APIAddons(CoreSysAttributes): return asyncio.shield(addon.rebuild()) @api_process_raw(CONTENT_TYPE_BINARY) - def logs(self, request): + def logs(self, request: web.Request) -> Awaitable[bytes]: """Return logs from add-on.""" addon = self._extract_addon(request) return addon.logs() @api_process_raw(CONTENT_TYPE_PNG) - async def icon(self, request): + async def icon(self, request: web.Request) -> bytes: """Return icon from add-on.""" addon = self._extract_addon(request, check_installed=False) if not addon.with_icon: @@ -296,7 +352,7 @@ class APIAddons(CoreSysAttributes): return png.read() @api_process_raw(CONTENT_TYPE_PNG) - async def logo(self, request): + async def logo(self, request: web.Request) -> bytes: """Return logo from add-on.""" addon = self._extract_addon(request, check_installed=False) if not addon.with_logo: @@ -306,7 +362,7 @@ class APIAddons(CoreSysAttributes): return png.read() @api_process_raw(CONTENT_TYPE_TEXT) - async def changelog(self, request): + async def changelog(self, request: web.Request) -> str: """Return changelog from add-on.""" addon = self._extract_addon(request, check_installed=False) if not addon.with_changelog: @@ -316,17 +372,17 @@ class APIAddons(CoreSysAttributes): return changelog.read() @api_process - async def stdin(self, request): + async def stdin(self, request: web.Request) -> None: """Write to stdin of add-on.""" addon = self._extract_addon(request) if not addon.with_stdin: raise APIError("STDIN not supported by add-on") data = await request.read() - return await asyncio.shield(addon.write_stdin(data)) + await asyncio.shield(addon.write_stdin(data)) -def _pretty_devices(addon): +def _pretty_devices(addon: Addon) -> List[str]: """Return a simplified device list.""" dev_list = addon.devices if not dev_list: @@ -334,7 +390,7 @@ def _pretty_devices(addon): return [row.split(':')[0] for row in dev_list] -def _pretty_services(addon): +def _pretty_services(addon: Addon) -> List[str]: """Return a simplified services role list.""" services = [] for name, access in addon.services_role.items(): diff --git a/hassio/api/hassos.py b/hassio/api/hassos.py index eb2d8ccdd..36a84c481 100644 --- a/hassio/api/hassos.py +++ b/hassio/api/hassos.py @@ -1,27 +1,31 @@ """Init file for Hass.io HassOS RESTful API.""" import asyncio import logging +from typing import Any, Awaitable, Dict import voluptuous as vol +from aiohttp import web -from .utils import api_process, api_validate from ..const import ( - ATTR_VERSION, ATTR_BOARD, ATTR_VERSION_LATEST, ATTR_VERSION_CLI, - ATTR_VERSION_CLI_LATEST) + ATTR_BOARD, + ATTR_VERSION, + ATTR_VERSION_CLI, + ATTR_VERSION_CLI_LATEST, + ATTR_VERSION_LATEST, +) from ..coresys import CoreSysAttributes +from .utils import api_process, api_validate _LOGGER = logging.getLogger(__name__) -SCHEMA_VERSION = vol.Schema({ - vol.Optional(ATTR_VERSION): vol.Coerce(str), -}) +SCHEMA_VERSION = vol.Schema({vol.Optional(ATTR_VERSION): vol.Coerce(str)}) class APIHassOS(CoreSysAttributes): """Handle RESTful API for HassOS functions.""" @api_process - async def info(self, request): + async def info(self, request: web.Request) -> Dict[str, Any]: """Return HassOS information.""" return { ATTR_VERSION: self.sys_hassos.version, @@ -32,7 +36,7 @@ class APIHassOS(CoreSysAttributes): } @api_process - async def update(self, request): + async def update(self, request: web.Request) -> None: """Update HassOS.""" body = await api_validate(SCHEMA_VERSION, request) version = body.get(ATTR_VERSION, self.sys_hassos.version_latest) @@ -40,7 +44,7 @@ class APIHassOS(CoreSysAttributes): await asyncio.shield(self.sys_hassos.update(version)) @api_process - async def update_cli(self, request): + async def update_cli(self, request: web.Request) -> None: """Update HassOS CLI.""" body = await api_validate(SCHEMA_VERSION, request) version = body.get(ATTR_VERSION, self.sys_hassos.version_cli_latest) @@ -48,6 +52,6 @@ class APIHassOS(CoreSysAttributes): await asyncio.shield(self.sys_hassos.update_cli(version)) @api_process - def config_sync(self, request): + def config_sync(self, request: web.Request) -> Awaitable[None]: """Trigger config reload on HassOS.""" return asyncio.shield(self.sys_hassos.config_sync()) diff --git a/hassio/api/homeassistant.py b/hassio/api/homeassistant.py index 619858d06..d5b305788 100644 --- a/hassio/api/homeassistant.py +++ b/hassio/api/homeassistant.py @@ -27,6 +27,7 @@ from ..const import ( ATTR_VERSION, ATTR_WAIT_BOOT, ATTR_WATCHDOG, + ATTR_IP_ADDRESS, CONTENT_TYPE_BINARY, ) from ..coresys import CoreSysAttributes @@ -64,6 +65,7 @@ class APIHomeAssistant(CoreSysAttributes): ATTR_VERSION: self.sys_homeassistant.version, ATTR_LAST_VERSION: self.sys_homeassistant.last_version, ATTR_MACHINE: self.sys_homeassistant.machine, + ATTR_IP_ADDRESS: str(self.sys_homeassistant.ip_address), ATTR_ARCH: self.sys_homeassistant.arch, ATTR_IMAGE: self.sys_homeassistant.image, ATTR_CUSTOM: self.sys_homeassistant.is_custom_image, diff --git a/hassio/api/ingress.py b/hassio/api/ingress.py new file mode 100644 index 000000000..827a23b20 --- /dev/null +++ b/hassio/api/ingress.py @@ -0,0 +1,205 @@ +"""Hass.io Add-on ingress service.""" +import asyncio +from ipaddress import ip_address +import logging +from typing import Dict, Union + +import aiohttp +from aiohttp import hdrs, web +from aiohttp.web_exceptions import ( + HTTPBadGateway, + HTTPServiceUnavailable, + HTTPUnauthorized, +) +from multidict import CIMultiDict, istr + +from ..addons.addon import Addon +from ..const import HEADER_TOKEN, REQUEST_FROM +from ..coresys import CoreSysAttributes + +_LOGGER = logging.getLogger(__name__) + + +class APIIngress(CoreSysAttributes): + """Ingress view to handle add-on webui routing.""" + + def _extract_addon(self, request: web.Request) -> Addon: + """Return addon, throw an exception it it doesn't exist.""" + token = request.match_info.get("token") + + # Find correct add-on + for addon in self.sys_addons.list_installed: + if addon.ingress_token != token: + continue + return addon + + _LOGGER.warning("Ingress for %s not available", token) + raise HTTPServiceUnavailable() + + def _create_url(self, addon: Addon, path: str) -> str: + """Create URL to container.""" + return f"{addon.ingress_internal}/{path}" + + async def handler( + self, request: web.Request + ) -> Union[web.Response, web.StreamResponse, web.WebSocketResponse]: + """Route data to Hass.io ingress service.""" + addon = self._extract_addon(request) + path = request.match_info.get("path") + + # Only Home Assistant call this + if request[REQUEST_FROM] != self.sys_homeassistant: + _LOGGER.warning("Ingress is only available behind Home Assistant") + raise HTTPUnauthorized() + if not addon.with_ingress: + _LOGGER.warning("Add-on %s don't support ingress feature", addon.slug) + raise HTTPBadGateway() + + # Process requests + try: + # Websocket + if _is_websocket(request): + return await self._handle_websocket(request, addon, path) + + # Request + return await self._handle_request(request, addon, path) + + except aiohttp.ClientError as err: + _LOGGER.error("Ingress error: %s", err) + + raise HTTPBadGateway() from None + + async def _handle_websocket( + self, request: web.Request, addon: Addon, path: str + ) -> web.WebSocketResponse: + """Ingress route for websocket.""" + ws_server = web.WebSocketResponse() + await ws_server.prepare(request) + + # Preparing + url = self._create_url(addon, path) + source_header = _init_header(request, addon) + + # Support GET query + if request.query_string: + url = "{}?{}".format(url, request.query_string) + + # Start proxy + async with self.sys_websession.ws_connect( + url, headers=source_header + ) as ws_client: + # Proxy requests + await asyncio.wait( + [ + _websocket_forward(ws_server, ws_client), + _websocket_forward(ws_client, ws_server), + ], + return_when=asyncio.FIRST_COMPLETED, + ) + + return ws_server + + async def _handle_request( + self, request: web.Request, addon: Addon, path: str + ) -> Union[web.Response, web.StreamResponse]: + """Ingress route for request.""" + url = self._create_url(addon, path) + data = await request.read() + source_header = _init_header(request, addon) + + async with self.sys_websession.request( + request.method, url, headers=source_header, params=request.query, data=data + ) as result: + headers = _response_header(result) + + # Simple request + if ( + hdrs.CONTENT_LENGTH in result.headers + and int(result.headers.get(hdrs.CONTENT_LENGTH, 0)) < 4_194_000 + ): + # Return Response + body = await result.read() + return web.Response(headers=headers, status=result.status, body=body) + + # Stream response + response = web.StreamResponse(status=result.status, headers=headers) + response.content_type = result.content_type + + try: + await response.prepare(request) + async for data in result.content.iter_chunked(4096): + await response.write(data) + + except (aiohttp.ClientError, aiohttp.ClientPayloadError) as err: + _LOGGER.error("Stream error with %s: %s", url, err) + + return response + + +def _init_header( + request: web.Request, addon: str +) -> Union[CIMultiDict, Dict[str, str]]: + """Create initial header.""" + headers = {} + + # filter flags + for name, value in request.headers.items(): + if name in ( + hdrs.CONTENT_LENGTH, + hdrs.CONTENT_TYPE, + hdrs.CONTENT_ENCODING, + istr(HEADER_TOKEN), + ): + continue + headers[name] = value + + # Update X-Forwarded-For + forward_for = request.headers.get(hdrs.X_FORWARDED_FOR) + connected_ip = ip_address(request.transport.get_extra_info("peername")[0]) + headers[hdrs.X_FORWARDED_FOR] = f"{forward_for}, {connected_ip!s}" + + return headers + + +def _response_header(response: aiohttp.ClientResponse) -> Dict[str, str]: + """Create response header.""" + headers = {} + + for name, value in response.headers.items(): + if name in ( + hdrs.TRANSFER_ENCODING, + hdrs.CONTENT_LENGTH, + hdrs.CONTENT_TYPE, + hdrs.CONTENT_ENCODING, + ): + continue + headers[name] = value + + return headers + + +def _is_websocket(request: web.Request) -> bool: + """Return True if request is a websocket.""" + headers = request.headers + + if ( + headers.get(hdrs.CONNECTION) == "Upgrade" + and headers.get(hdrs.UPGRADE) == "websocket" + ): + return True + return False + + +async def _websocket_forward(ws_from, ws_to): + """Handle websocket message directly.""" + async for msg in ws_from: + if msg.type == aiohttp.WSMsgType.TEXT: + await ws_to.send_str(msg.data) + elif msg.type == aiohttp.WSMsgType.BINARY: + await ws_to.send_bytes(msg.data) + elif msg.type == aiohttp.WSMsgType.PING: + await ws_to.ping() + elif msg.type == aiohttp.WSMsgType.PONG: + await ws_to.pong() + elif ws_to.closed: + await ws_to.close(code=ws_to.close_code, message=msg.extra) diff --git a/hassio/api/security.py b/hassio/api/security.py index fe824e588..e81d33304 100644 --- a/hassio/api/security.py +++ b/hassio/api/security.py @@ -6,12 +6,19 @@ from aiohttp.web import middleware from aiohttp.web_exceptions import HTTPUnauthorized, HTTPForbidden from ..const import ( - HEADER_TOKEN, REQUEST_FROM, ROLE_ADMIN, ROLE_DEFAULT, ROLE_HOMEASSISTANT, - ROLE_MANAGER, ROLE_BACKUP) + HEADER_TOKEN, + REQUEST_FROM, + ROLE_ADMIN, + ROLE_DEFAULT, + ROLE_HOMEASSISTANT, + ROLE_MANAGER, + ROLE_BACKUP, +) from ..coresys import CoreSysAttributes _LOGGER = logging.getLogger(__name__) +# fmt: off # Block Anytime BLACKLIST = re.compile( @@ -74,6 +81,8 @@ ADDONS_ROLE_ACCESS = { ), } +# fmt: off + class SecurityMiddleware(CoreSysAttributes): """Security middleware functions.""" @@ -104,9 +113,7 @@ class SecurityMiddleware(CoreSysAttributes): raise HTTPUnauthorized() # Home-Assistant - # UUID check need removed with 131 - if hassio_token in (self.sys_homeassistant.uuid, - self.sys_homeassistant.hassio_token): + if hassio_token == self.sys_homeassistant.hassio_token: _LOGGER.debug("%s access from Home Assistant", request.path) request_from = self.sys_homeassistant diff --git a/hassio/api/supervisor.py b/hassio/api/supervisor.py index 6ed3f5853..5d0af8ab6 100644 --- a/hassio/api/supervisor.py +++ b/hassio/api/supervisor.py @@ -1,34 +1,57 @@ """Init file for Hass.io Supervisor RESTful API.""" import asyncio import logging +from typing import Any, Awaitable, Dict +from aiohttp import web import voluptuous as vol -from .utils import api_process, api_process_raw, api_validate from ..const import ( - ATTR_ADDONS, ATTR_VERSION, ATTR_LAST_VERSION, ATTR_CHANNEL, ATTR_ARCH, - HASSIO_VERSION, ATTR_ADDONS_REPOSITORIES, ATTR_LOGO, ATTR_REPOSITORY, - ATTR_DESCRIPTON, ATTR_NAME, ATTR_SLUG, ATTR_INSTALLED, ATTR_TIMEZONE, - ATTR_STATE, ATTR_WAIT_BOOT, ATTR_CPU_PERCENT, ATTR_MEMORY_USAGE, - ATTR_MEMORY_LIMIT, ATTR_NETWORK_RX, ATTR_NETWORK_TX, ATTR_BLK_READ, - ATTR_BLK_WRITE, CONTENT_TYPE_BINARY, ATTR_ICON) + ATTR_ADDONS, + ATTR_ADDONS_REPOSITORIES, + ATTR_ARCH, + ATTR_BLK_READ, + ATTR_BLK_WRITE, + ATTR_CHANNEL, + ATTR_CPU_PERCENT, + ATTR_DESCRIPTON, + ATTR_ICON, + ATTR_INSTALLED, + ATTR_LAST_VERSION, + ATTR_LOGO, + ATTR_MEMORY_LIMIT, + ATTR_MEMORY_USAGE, + ATTR_NAME, + ATTR_NETWORK_RX, + ATTR_NETWORK_TX, + ATTR_REPOSITORY, + ATTR_SLUG, + ATTR_STATE, + ATTR_TIMEZONE, + ATTR_VERSION, + ATTR_WAIT_BOOT, + ATTR_IP_ADDRESS, + CONTENT_TYPE_BINARY, + HASSIO_VERSION, +) from ..coresys import CoreSysAttributes -from ..validate import WAIT_BOOT, REPOSITORIES, CHANNELS from ..exceptions import APIError from ..utils.validate import validate_timezone +from ..validate import CHANNELS, REPOSITORIES, WAIT_BOOT +from .utils import api_process, api_process_raw, api_validate _LOGGER = logging.getLogger(__name__) -SCHEMA_OPTIONS = vol.Schema({ - vol.Optional(ATTR_CHANNEL): CHANNELS, - vol.Optional(ATTR_ADDONS_REPOSITORIES): REPOSITORIES, - vol.Optional(ATTR_TIMEZONE): validate_timezone, - vol.Optional(ATTR_WAIT_BOOT): WAIT_BOOT, -}) +SCHEMA_OPTIONS = vol.Schema( + { + vol.Optional(ATTR_CHANNEL): CHANNELS, + vol.Optional(ATTR_ADDONS_REPOSITORIES): REPOSITORIES, + vol.Optional(ATTR_TIMEZONE): validate_timezone, + vol.Optional(ATTR_WAIT_BOOT): WAIT_BOOT, + } +) -SCHEMA_VERSION = vol.Schema({ - vol.Optional(ATTR_VERSION): vol.Coerce(str), -}) +SCHEMA_VERSION = vol.Schema({vol.Optional(ATTR_VERSION): vol.Coerce(str)}) class APISupervisor(CoreSysAttributes): @@ -40,28 +63,31 @@ class APISupervisor(CoreSysAttributes): return True @api_process - async def info(self, request): + async def info(self, request: web.Request) -> Dict[str, Any]: """Return host information.""" list_addons = [] for addon in self.sys_addons.list_addons: if addon.is_installed: - list_addons.append({ - ATTR_NAME: addon.name, - ATTR_SLUG: addon.slug, - ATTR_DESCRIPTON: addon.description, - ATTR_STATE: await addon.state(), - ATTR_VERSION: addon.last_version, - ATTR_INSTALLED: addon.version_installed, - ATTR_REPOSITORY: addon.repository, - ATTR_ICON: addon.with_icon, - ATTR_LOGO: addon.with_logo, - }) + list_addons.append( + { + ATTR_NAME: addon.name, + ATTR_SLUG: addon.slug, + ATTR_DESCRIPTON: addon.description, + ATTR_STATE: await addon.state(), + ATTR_VERSION: addon.last_version, + ATTR_INSTALLED: addon.version_installed, + ATTR_REPOSITORY: addon.repository, + ATTR_ICON: addon.with_icon, + ATTR_LOGO: addon.with_logo, + } + ) return { ATTR_VERSION: HASSIO_VERSION, ATTR_LAST_VERSION: self.sys_updater.version_hassio, ATTR_CHANNEL: self.sys_updater.channel, ATTR_ARCH: self.sys_supervisor.arch, + ATTR_IP_ADDRESS: str(self.sys_supervisor.ip_address), ATTR_WAIT_BOOT: self.sys_config.wait_boot, ATTR_TIMEZONE: self.sys_config.timezone, ATTR_ADDONS: list_addons, @@ -69,7 +95,7 @@ class APISupervisor(CoreSysAttributes): } @api_process - async def options(self, request): + async def options(self, request: web.Request) -> None: """Set Supervisor options.""" body = await api_validate(SCHEMA_OPTIONS, request) @@ -88,14 +114,11 @@ class APISupervisor(CoreSysAttributes): self.sys_updater.save_data() self.sys_config.save_data() - return True @api_process - async def stats(self, request): + async def stats(self, request: web.Request) -> Dict[str, Any]: """Return resource information.""" stats = await self.sys_supervisor.stats() - if not stats: - raise APIError("No stats available") return { ATTR_CPU_PERCENT: stats.cpu_percent, @@ -108,31 +131,21 @@ class APISupervisor(CoreSysAttributes): } @api_process - async def update(self, request): + async def update(self, request: web.Request) -> None: """Update Supervisor OS.""" body = await api_validate(SCHEMA_VERSION, request) version = body.get(ATTR_VERSION, self.sys_updater.version_hassio) if version == self.sys_supervisor.version: raise APIError("Version {} is already in use".format(version)) - - return await asyncio.shield(self.sys_supervisor.update(version)) + await asyncio.shield(self.sys_supervisor.update(version)) @api_process - async def reload(self, request): + def reload(self, request: web.Request) -> Awaitable[None]: """Reload add-ons, configuration, etc.""" - tasks = [ - self.sys_updater.reload(), - ] - results, _ = await asyncio.shield(asyncio.wait(tasks)) - - for result in results: - if result.exception() is not None: - raise APIError("Some reload task fails!") - - return True + return asyncio.shield(self.sys_updater.reload()) @api_process_raw(CONTENT_TYPE_BINARY) - def logs(self, request): + def logs(self, request: web.Request) -> Awaitable[bytes]: """Return supervisor Docker logs.""" return self.sys_supervisor.logs() diff --git a/hassio/const.py b/hassio/const.py index 6c781fcfd..29f2eec6a 100644 --- a/hassio/const.py +++ b/hassio/const.py @@ -2,6 +2,7 @@ from pathlib import Path from ipaddress import ip_network + HASSIO_VERSION = "153" URL_HASSIO_ADDONS = "https://github.com/home-assistant/hassio-addons" @@ -51,8 +52,8 @@ CONTENT_TYPE_JSON = "application/json" CONTENT_TYPE_TEXT = "text/plain" CONTENT_TYPE_TAR = "application/tar" CONTENT_TYPE_URL = "application/x-www-form-urlencoded" -HEADER_HA_ACCESS = "x-ha-access" -HEADER_TOKEN = "x-hassio-key" +HEADER_HA_ACCESS = "X-Ha-Access" +HEADER_TOKEN = "X-Hassio-Key" ENV_TOKEN = "HASSIO_TOKEN" ENV_TIME = "TZ" @@ -187,6 +188,12 @@ ATTR_SUPERVISOR = "supervisor" ATTR_AUTH_API = "auth_api" ATTR_KERNEL_MODULES = "kernel_modules" ATTR_SUPPORTED_ARCH = "supported_arch" +ATTR_INGRESS = "ingress" +ATTR_INGRESS_PORT = "ingress_port" +ATTR_INGRESS_ENTRY = "ingress_entry" +ATTR_INGRESS_TOKEN = "ingress_token" +ATTR_INGRESS_URL = "ingress_url" +ATTR_IP_ADDRESS = "ip_address" PROVIDE_SERVICE = "provide" NEED_SERVICE = "need" diff --git a/hassio/docker/__init__.py b/hassio/docker/__init__.py index 5a2984d3f..af01df582 100644 --- a/hassio/docker/__init__.py +++ b/hassio/docker/__init__.py @@ -1,12 +1,14 @@ """Init file for Hass.io Docker object.""" -from contextlib import suppress import logging +from contextlib import suppress +from typing import Any, Dict, Optional import attr import docker -from .network import DockerNetwork from ..const import SOCKET_DOCKER +from ..exceptions import DockerAPIError +from .network import DockerNetwork _LOGGER = logging.getLogger(__name__) @@ -14,8 +16,9 @@ _LOGGER = logging.getLogger(__name__) @attr.s(frozen=True) class CommandReturn: """Return object from command run.""" - exit_code = attr.ib() - output = attr.ib() + + exit_code: int = attr.ib() + output: bytes = attr.ib() class DockerAPI: @@ -26,75 +29,87 @@ class DockerAPI: def __init__(self): """Initialize Docker base wrapper.""" - self.docker = docker.DockerClient( - base_url="unix:/{}".format(str(SOCKET_DOCKER)), - version='auto', timeout=900) - self.network = DockerNetwork(self.docker) + self.docker: docker.DockerClient = docker.DockerClient( + base_url="unix:/{}".format(str(SOCKET_DOCKER)), version="auto", timeout=900 + ) + self.network: DockerNetwork = DockerNetwork(self.docker) @property - def images(self): + def images(self) -> docker.models.images.ImageCollection: """Return API images.""" return self.docker.images @property - def containers(self): + def containers(self) -> docker.models.containers.ContainerCollection: """Return API containers.""" return self.docker.containers @property - def api(self): + def api(self) -> docker.APIClient: """Return API containers.""" return self.docker.api - def run(self, image, **kwargs): + def run( + self, image: str, **kwargs: Dict[str, Any] + ) -> docker.models.containers.Container: """"Create a Docker container and run it. Need run inside executor. """ - name = kwargs.get('name', image) - network_mode = kwargs.get('network_mode') - hostname = kwargs.get('hostname') + name = kwargs.get("name", image) + network_mode = kwargs.get("network_mode") + hostname = kwargs.get("hostname") # Setup network - kwargs['dns_search'] = ["."] + kwargs["dns_search"] = ["."] if network_mode: - kwargs['dns'] = [str(self.network.supervisor)] - kwargs['dns_opt'] = ["ndots:0"] + kwargs["dns"] = [str(self.network.supervisor)] + kwargs["dns_opt"] = ["ndots:0"] else: - kwargs['network'] = None + kwargs["network"] = None # Create container try: container = self.docker.containers.create( - image, use_config_proxy=False, **kwargs) + image, use_config_proxy=False, **kwargs + ) except docker.errors.DockerException as err: _LOGGER.error("Can't create container from %s: %s", name, err) - return False + raise DockerAPIError() from None - # attach network + # Attach network if not network_mode: alias = [hostname] if hostname else None - if self.network.attach_container(container, alias=alias): - self.network.detach_default_bridge(container) - else: + try: + self.network.attach_container(container, alias=alias) + except DockerAPIError: _LOGGER.warning("Can't attach %s to hassio-net!", name) + else: + with suppress(DockerAPIError): + self.network.detach_default_bridge(container) - # run container + # Run container try: container.start() except docker.errors.DockerException as err: _LOGGER.error("Can't start %s: %s", name, err) - return False + raise DockerAPIError() from None - return True + # Update metadata + with suppress(docker.errors.DockerException): + container.reload() - def run_command(self, image, command=None, **kwargs): + return container + + def run_command( + self, image: str, command: Optional[str] = None, **kwargs: Dict[str, Any] + ) -> CommandReturn: """Create a temporary container and run command. Need run inside executor. """ - stdout = kwargs.get('stdout', True) - stderr = kwargs.get('stderr', True) + stdout = kwargs.get("stdout", True) + stderr = kwargs.get("stderr", True) _LOGGER.info("Run command '%s' on %s", command, image) try: @@ -112,11 +127,11 @@ class DockerAPI: except docker.errors.DockerException as err: _LOGGER.error("Can't execute command: %s", err) - return CommandReturn(None, b"") + raise DockerAPIError() from None finally: # cleanup container with suppress(docker.errors.DockerException): container.remove(force=True) - return CommandReturn(result.get('StatusCode'), output) + return CommandReturn(result.get("StatusCode"), output) diff --git a/hassio/docker/addon.py b/hassio/docker/addon.py index de9f91adb..5c76c3a38 100644 --- a/hassio/docker/addon.py +++ b/hassio/docker/addon.py @@ -1,15 +1,35 @@ """Init file for Hass.io add-on Docker object.""" +from __future__ import annotations + +from contextlib import suppress +from ipaddress import IPv4Address, ip_address import logging import os +from pathlib import Path +from typing import TYPE_CHECKING, Dict, List, Optional, Union, Awaitable import docker import requests -from .interface import DockerInterface from ..addons.build import AddonBuild -from ..const import (MAP_CONFIG, MAP_SSL, MAP_ADDONS, MAP_BACKUP, MAP_SHARE, - ENV_TOKEN, ENV_TIME, SECURITY_PROFILE, SECURITY_DISABLE) +from ..const import ( + ENV_TIME, + ENV_TOKEN, + MAP_ADDONS, + MAP_BACKUP, + MAP_CONFIG, + MAP_SHARE, + MAP_SSL, + SECURITY_DISABLE, + SECURITY_PROFILE, +) +from ..coresys import CoreSys +from ..exceptions import DockerAPIError from ..utils import process_lock +from .interface import DockerInterface + +if TYPE_CHECKING: + from ..addons.addon import Addon _LOGGER = logging.getLogger(__name__) @@ -19,64 +39,77 @@ AUDIO_DEVICE = "/dev/snd:/dev/snd:rwm" class DockerAddon(DockerInterface): """Docker Hass.io wrapper for Home Assistant.""" - def __init__(self, coresys, slug): + def __init__(self, coresys: CoreSys, slug: str): """Initialize Docker Home Assistant wrapper.""" super().__init__(coresys) - self._id = slug + self._id: str = slug @property - def addon(self): + def addon(self) -> Addon: """Return add-on of Docker image.""" return self.sys_addons.get(self._id) @property - def image(self): + def image(self) -> str: """Return name of Docker image.""" return self.addon.image @property - def timeout(self): + def ip_address(self) -> IPv4Address: + """Return IP address of this container.""" + if self.addon.host_network: + return self.sys_docker.network.gateway + + # Extract IP-Address + try: + return ip_address( + self._meta["NetworkSettings"]["Networks"]["hassio"]["IPAddress"]) + except (KeyError, TypeError, ValueError): + return ip_address("0.0.0.0") + + @property + def timeout(self) -> int: """Return timeout for Docker actions.""" return self.addon.timeout @property - def version(self): + def version(self) -> str: """Return version of Docker image.""" if self.addon.legacy: return self.addon.version_installed return super().version @property - def arch(self): + def arch(self) -> str: """Return arch of Docker image.""" if self.addon.legacy: return self.sys_arch.default return super().arch @property - def name(self): + def name(self) -> str: """Return name of Docker container.""" - return "addon_{}".format(self.addon.slug) + return f"addon_{self.addon.slug}" @property - def ipc(self): + def ipc(self) -> Optional[str]: """Return the IPC namespace.""" if self.addon.host_ipc: - return 'host' + return "host" return None @property - def full_access(self): + def full_access(self) -> bool: """Return True if full access is enabled.""" return not self.addon.protected and self.addon.with_full_access @property - def hostname(self): + def hostname(self) -> str: """Return slug/id of add-on.""" - return self.addon.slug.replace('_', '-') + return self.addon.slug.replace("_", "-") @property - def environment(self): + def environment(self) -> Dict[str, str]: """Return environment for Docker add-on.""" addon_env = self.addon.environment or {} @@ -86,8 +119,7 @@ class DockerAddon(DockerInterface): if isinstance(value, (int, str)): addon_env[key] = value else: - _LOGGER.warning( - "Can not set nested option %s as Docker env", key) + _LOGGER.warning("Can not set nested option %s as Docker env", key) return { **addon_env, @@ -96,7 +128,7 @@ class DockerAddon(DockerInterface): } @property - def devices(self): + def devices(self) -> List[str]: """Return needed devices.""" devices = self.addon.devices or [] @@ -113,7 +145,7 @@ class DockerAddon(DockerInterface): return devices or None @property - def ports(self): + def ports(self) -> Optional[Dict[str, Union[str, int, None]]]: """Filter None from add-on ports.""" if not self.addon.ports: return None @@ -125,7 +157,7 @@ class DockerAddon(DockerInterface): } @property - def security_opt(self): + def security_opt(self) -> List[str]: """Controlling security options.""" security = [] @@ -143,7 +175,7 @@ class DockerAddon(DockerInterface): return security @property - def tmpfs(self): + def tmpfs(self) -> Optional[Dict[str, str]]: """Return tmpfs for Docker add-on.""" options = self.addon.tmpfs if options: @@ -151,156 +183,148 @@ class DockerAddon(DockerInterface): return None @property - def network_mapping(self): + def network_mapping(self) -> Dict[str, str]: """Return hosts mapping.""" return { - 'homeassistant': self.sys_docker.network.gateway, - 'hassio': self.sys_docker.network.supervisor, + "homeassistant": self.sys_docker.network.gateway, + "hassio": self.sys_docker.network.supervisor, } @property - def network_mode(self): + def network_mode(self) -> Optional[str]: """Return network mode for add-on.""" if self.addon.host_network: - return 'host' + return "host" return None @property - def pid_mode(self): + def pid_mode(self) -> Optional[str]: """Return PID mode for add-on.""" if not self.addon.protected and self.addon.host_pid: - return 'host' + return "host" return None @property - def volumes(self): + def volumes(self) -> Dict[str, Dict[str, str]]: """Generate volumes for mappings.""" - volumes = { - str(self.addon.path_extern_data): { - 'bind': "/data", - 'mode': 'rw' - } - } + volumes = {str(self.addon.path_extern_data): {"bind": "/data", "mode": "rw"}} addon_mapping = self.addon.map_volumes # setup config mappings if MAP_CONFIG in addon_mapping: - volumes.update({ - str(self.sys_config.path_extern_homeassistant): { - 'bind': "/config", - 'mode': addon_mapping[MAP_CONFIG] + volumes.update( + { + str(self.sys_config.path_extern_homeassistant): { + "bind": "/config", + "mode": addon_mapping[MAP_CONFIG], + } } - }) + ) if MAP_SSL in addon_mapping: - volumes.update({ - str(self.sys_config.path_extern_ssl): { - 'bind': "/ssl", - 'mode': addon_mapping[MAP_SSL] + volumes.update( + { + str(self.sys_config.path_extern_ssl): { + "bind": "/ssl", + "mode": addon_mapping[MAP_SSL], + } } - }) + ) if MAP_ADDONS in addon_mapping: - volumes.update({ - str(self.sys_config.path_extern_addons_local): { - 'bind': "/addons", - 'mode': addon_mapping[MAP_ADDONS] + volumes.update( + { + str(self.sys_config.path_extern_addons_local): { + "bind": "/addons", + "mode": addon_mapping[MAP_ADDONS], + } } - }) + ) if MAP_BACKUP in addon_mapping: - volumes.update({ - str(self.sys_config.path_extern_backup): { - 'bind': "/backup", - 'mode': addon_mapping[MAP_BACKUP] + volumes.update( + { + str(self.sys_config.path_extern_backup): { + "bind": "/backup", + "mode": addon_mapping[MAP_BACKUP], + } } - }) + ) if MAP_SHARE in addon_mapping: - volumes.update({ - str(self.sys_config.path_extern_share): { - 'bind': "/share", - 'mode': addon_mapping[MAP_SHARE] + volumes.update( + { + str(self.sys_config.path_extern_share): { + "bind": "/share", + "mode": addon_mapping[MAP_SHARE], + } } - }) + ) # Init other hardware mappings # GPIO support if self.addon.with_gpio and self.sys_hardware.support_gpio: for gpio_path in ("/sys/class/gpio", "/sys/devices/platform/soc"): - volumes.update({ - gpio_path: { - 'bind': gpio_path, - 'mode': 'rw' - }, - }) + volumes.update({gpio_path: {"bind": gpio_path, "mode": "rw"}}) # DeviceTree support if self.addon.with_devicetree: - volumes.update({ - "/sys/firmware/devicetree/base": { - 'bind': "/device-tree", - 'mode': 'ro' - }, - }) + volumes.update( + { + "/sys/firmware/devicetree/base": { + "bind": "/device-tree", + "mode": "ro", + } + } + ) # Kernel Modules support if self.addon.with_kernel_modules: - volumes.update({ - "/lib/modules": { - 'bind': "/lib/modules", - 'mode': 'ro' - }, - }) + volumes.update({"/lib/modules": {"bind": "/lib/modules", "mode": "ro"}}) # Docker API support if not self.addon.protected and self.addon.access_docker_api: - volumes.update({ - "/var/run/docker.sock": { - 'bind': "/var/run/docker.sock", - 'mode': 'ro' - }, - }) + volumes.update( + {"/var/run/docker.sock": {"bind": "/var/run/docker.sock", "mode": "ro"}} + ) # Host D-Bus system if self.addon.host_dbus: - volumes.update({ - "/var/run/dbus": { - 'bind': "/var/run/dbus", - 'mode': 'rw' - } - }) + volumes.update({"/var/run/dbus": {"bind": "/var/run/dbus", "mode": "rw"}}) # ALSA configuration if self.addon.with_audio: - volumes.update({ - str(self.addon.path_extern_asound): { - 'bind': "/etc/asound.conf", - 'mode': 'ro' + volumes.update( + { + str(self.addon.path_extern_asound): { + "bind": "/etc/asound.conf", + "mode": "ro", + } } - }) + ) return volumes - def _run(self): + def _run(self) -> None: """Run Docker image. Need run inside executor. """ if self._is_running(): - return True + return # Security check if not self.addon.protected: - _LOGGER.warning("%s run with disabled protected mode!", - self.addon.name) + _LOGGER.warning("%s run with disabled protected mode!", self.addon.name) - # cleanup - self._stop() + # Cleanup + with suppress(DockerAPIError): + self._stop() - ret = self.sys_docker.run( + # Create & Run container + docker_container = self.sys_docker.run( self.image, name=self.name, hostname=self.hostname, @@ -318,25 +342,23 @@ class DockerAddon(DockerInterface): security_opt=self.security_opt, environment=self.environment, volumes=self.volumes, - tmpfs=self.tmpfs) + tmpfs=self.tmpfs, + ) - if ret: - _LOGGER.info("Start Docker add-on %s with version %s", self.image, - self.version) + _LOGGER.info("Start Docker add-on %s with version %s", self.image, self.version) + self._meta = docker_container.attrs - return ret - - def _install(self, tag, image=None): + def _install(self, tag: str, image: Optional[str] = None) -> None: """Pull Docker image or build it. Need run inside executor. """ if self.addon.need_build: - return self._build(tag) + self._build(tag) - return super()._install(tag, image) + super()._install(tag, image) - def _build(self, tag): + def _build(self, tag: str) -> None: """Build a Docker container. Need run inside executor. @@ -346,27 +368,27 @@ class DockerAddon(DockerInterface): _LOGGER.info("Start build %s:%s", self.image, tag) try: image, log = self.sys_docker.images.build( - use_config_proxy=False, **build_env.get_docker_args(tag)) + use_config_proxy=False, **build_env.get_docker_args(tag) + ) _LOGGER.debug("Build %s:%s done: %s", self.image, tag, log) - image.tag(self.image, tag='latest') + image.tag(self.image, tag="latest") # Update meta data self._meta = image.attrs except docker.errors.DockerException as err: _LOGGER.error("Can't build %s:%s: %s", self.image, tag, err) - return False + raise DockerAPIError() from None _LOGGER.info("Build %s:%s done", self.image, tag) - return True @process_lock - def export_image(self, path): + def export_image(self, tar_file: Path) -> Awaitable[None]: """Export current images into a tar file.""" - return self.sys_run_in_executor(self._export_image, path) + return self.sys_run_in_executor(self._export_image, tar_file) - def _export_image(self, tar_file): + def _export_image(self, tar_file: Path) -> None: """Export current images into a tar file. Need run inside executor. @@ -375,7 +397,7 @@ class DockerAddon(DockerInterface): image = self.sys_docker.api.get_image(self.image) except docker.errors.DockerException as err: _LOGGER.error("Can't fetch image %s: %s", self.image, err) - return False + raise DockerAPIError() from None _LOGGER.info("Export image %s to %s", self.image, tar_file) try: @@ -384,17 +406,16 @@ class DockerAddon(DockerInterface): write_tar.write(chunk) except (OSError, requests.exceptions.ReadTimeout) as err: _LOGGER.error("Can't write tar file %s: %s", tar_file, err) - return False + raise DockerAPIError() from None _LOGGER.info("Export image %s done", self.image) - return True @process_lock - def import_image(self, path, tag): + def import_image(self, tar_file: Path, tag: str) -> Awaitable[None]: """Import a tar file as image.""" - return self.sys_run_in_executor(self._import_image, path, tag) + return self.sys_run_in_executor(self._import_image, tar_file, tag) - def _import_image(self, tar_file, tag): + def _import_image(self, tar_file: Path, tag: str) -> None: """Import a tar file as image. Need run inside executor. @@ -403,37 +424,38 @@ class DockerAddon(DockerInterface): with tar_file.open("rb") as read_tar: self.sys_docker.api.load_image(read_tar, quiet=True) - image = self.sys_docker.images.get(self.image) - image.tag(self.image, tag=tag) + docker_image = self.sys_docker.images.get(self.image) + docker_image.tag(self.image, tag=tag) except (docker.errors.DockerException, OSError) as err: _LOGGER.error("Can't import image %s: %s", self.image, err) - return False + raise DockerAPIError() from None _LOGGER.info("Import image %s and tag %s", tar_file, tag) - self._meta = image.attrs - self._cleanup() - return True + self._meta = docker_image.attrs + + with suppress(DockerAPIError): + self._cleanup() @process_lock - def write_stdin(self, data): + def write_stdin(self, data: bytes) -> Awaitable[None]: """Write to add-on stdin.""" return self.sys_run_in_executor(self._write_stdin, data) - def _write_stdin(self, data): + def _write_stdin(self, data: bytes) -> None: """Write to add-on stdin. Need run inside executor. """ if not self._is_running(): - return False + raise DockerAPIError() from None try: # Load needed docker objects container = self.sys_docker.containers.get(self.name) - socket = container.attach_socket(params={'stdin': 1, 'stream': 1}) + socket = container.attach_socket(params={"stdin": 1, "stream": 1}) except docker.errors.DockerException as err: _LOGGER.error("Can't attach to %s stdin: %s", self.name, err) - return False + raise DockerAPIError() from None try: # Write to stdin @@ -442,6 +464,4 @@ class DockerAddon(DockerInterface): socket.close() except OSError as err: _LOGGER.error("Can't write to %s stdin: %s", self.name, err) - return False - - return True + raise DockerAPIError() from None diff --git a/hassio/docker/homeassistant.py b/hassio/docker/homeassistant.py index 873015bdf..a8f86eeef 100644 --- a/hassio/docker/homeassistant.py +++ b/hassio/docker/homeassistant.py @@ -1,10 +1,14 @@ """Init file for Hass.io Docker object.""" +from contextlib import suppress +from ipaddress import IPv4Address import logging +from typing import Awaitable import docker -from .interface import DockerInterface -from ..const import ENV_TOKEN, ENV_TIME, LABEL_MACHINE +from ..const import ENV_TIME, ENV_TOKEN, LABEL_MACHINE +from ..exceptions import DockerAPIError +from .interface import CommandReturn, DockerInterface _LOGGER = logging.getLogger(__name__) @@ -39,18 +43,25 @@ class DockerHomeAssistant(DockerInterface): devices.append(f"{device}:{device}:rwm") return devices or None - def _run(self): + @property + def ip_address(self) -> IPv4Address: + """Return IP address of this container.""" + return self.sys_docker.network.gateway + + def _run(self) -> None: """Run Docker image. Need run inside executor. """ if self._is_running(): - return False + return - # cleanup - self._stop() + # Cleanup + with suppress(DockerAPIError): + self._stop() - ret = self.sys_docker.run( + # Create & Run container + docker_container = self.sys_docker.run( self.image, name=self.name, hostname=self.name, @@ -77,14 +88,10 @@ class DockerHomeAssistant(DockerInterface): }, ) - if ret: - _LOGGER.info( - "Start homeassistant %s with version %s", self.image, self.version - ) + _LOGGER.info("Start homeassistant %s with version %s", self.image, self.version) + self._meta = docker_container.attrs - return ret - - def _execute_command(self, command): + def _execute_command(self, command: str) -> CommandReturn: """Create a temporary container and run command. Need run inside executor. @@ -112,11 +119,11 @@ class DockerHomeAssistant(DockerInterface): }, ) - def is_initialize(self): + def is_initialize(self) -> Awaitable[bool]: """Return True if Docker container exists.""" return self.sys_run_in_executor(self._is_initialize) - def _is_initialize(self): + def _is_initialize(self) -> bool: """Return True if docker container exists. Need run inside executor. diff --git a/hassio/docker/interface.py b/hassio/docker/interface.py index e227035cb..17ad48b45 100644 --- a/hassio/docker/interface.py +++ b/hassio/docker/interface.py @@ -2,13 +2,16 @@ import asyncio from contextlib import suppress import logging +from typing import Any, Dict, Optional, Awaitable import docker from ..const import LABEL_ARCH, LABEL_VERSION -from ..coresys import CoreSysAttributes +from ..coresys import CoreSys, CoreSysAttributes +from ..exceptions import DockerAPIError from ..utils import process_lock from .stats import DockerStats +from . import CommandReturn _LOGGER = logging.getLogger(__name__) @@ -16,60 +19,60 @@ _LOGGER = logging.getLogger(__name__) class DockerInterface(CoreSysAttributes): """Docker Hass.io interface.""" - def __init__(self, coresys): + def __init__(self, coresys: CoreSys): """Initialize Docker base wrapper.""" - self.coresys = coresys - self._meta = None - self.lock = asyncio.Lock(loop=coresys.loop) + self.coresys: CoreSys = coresys + self._meta: Optional[Dict[str, Any]] = None + self.lock: asyncio.Lock = asyncio.Lock(loop=coresys.loop) @property - def timeout(self): + def timeout(self) -> str: """Return timeout for Docker actions.""" return 30 @property - def name(self): + def name(self) -> Optional[str]: """Return name of Docker container.""" return None @property - def meta_config(self): + def meta_config(self) -> Dict[str, Any]: """Return meta data of configuration for container/image.""" if not self._meta: return {} return self._meta.get("Config", {}) @property - def meta_labels(self): + def meta_labels(self) -> Dict[str, str]: """Return meta data of labels for container/image.""" return self.meta_config.get("Labels") or {} @property - def image(self): + def image(self) -> Optional[str]: """Return name of Docker image.""" return self.meta_config.get("Image") @property - def version(self): + def version(self) -> Optional[str]: """Return version of Docker image.""" return self.meta_labels.get(LABEL_VERSION) @property - def arch(self): + def arch(self) -> Optional[str]: """Return arch of Docker image.""" return self.meta_labels.get(LABEL_ARCH) @property - def in_progress(self): + def in_progress(self) -> bool: """Return True if a task is in progress.""" return self.lock.locked() @process_lock - def install(self, tag, image=None): + def install(self, tag: str, image: Optional[str] = None): """Pull docker image.""" return self.sys_run_in_executor(self._install, tag, image) - def _install(self, tag, image=None): + def _install(self, tag: str, image: Optional[str] = None) -> None: """Pull Docker image. Need run inside executor. @@ -80,20 +83,19 @@ class DockerInterface(CoreSysAttributes): _LOGGER.info("Pull image %s tag %s.", image, tag) docker_image = self.sys_docker.images.pull(f"{image}:{tag}") + _LOGGER.info("Tag image %s with version %s as latest", image, tag) docker_image.tag(image, tag="latest") - self._meta = docker_image.attrs except docker.errors.APIError as err: _LOGGER.error("Can't install %s:%s -> %s.", image, tag, err) - return False + raise DockerAPIError() from None + else: + self._meta = docker_image.attrs - _LOGGER.info("Tag image %s with version %s as latest", image, tag) - return True - - def exists(self): + def exists(self) -> Awaitable[bool]: """Return True if Docker image exists in local repository.""" return self.sys_run_in_executor(self._exists) - def _exists(self): + def _exists(self) -> bool: """Return True if Docker image exists in local repository. Need run inside executor. @@ -106,14 +108,14 @@ class DockerInterface(CoreSysAttributes): return True - def is_running(self): + def is_running(self) -> Awaitable[bool]: """Return True if Docker is running. Return a Future. """ return self.sys_run_in_executor(self._is_running) - def _is_running(self): + def _is_running(self) -> bool: """Return True if Docker is running. Need run inside executor. @@ -139,7 +141,7 @@ class DockerInterface(CoreSysAttributes): """Attach to running Docker container.""" return self.sys_run_in_executor(self._attach) - def _attach(self): + def _attach(self) -> None: """Attach to running docker container. Need run inside executor. @@ -147,21 +149,21 @@ class DockerInterface(CoreSysAttributes): try: if self.image: self._meta = self.sys_docker.images.get(self.image).attrs - else: - self._meta = self.sys_docker.containers.get(self.name).attrs + self._meta = self.sys_docker.containers.get(self.name).attrs except docker.errors.DockerException: - return False + pass - _LOGGER.info("Attach to image %s with version %s", self.image, self.version) - - return True + # Successfull? + if not self._meta: + raise DockerAPIError() from None + _LOGGER.info("Attach to %s with version %s", self.image, self.version) @process_lock - def run(self): + def run(self) -> Awaitable[None]: """Run Docker image.""" return self.sys_run_in_executor(self._run) - def _run(self): + def _run(self) -> None: """Run Docker image. Need run inside executor. @@ -169,11 +171,11 @@ class DockerInterface(CoreSysAttributes): raise NotImplementedError() @process_lock - def stop(self, remove_container=True): + def stop(self, remove_container=True) -> Awaitable[None]: """Stop/remove Docker container.""" return self.sys_run_in_executor(self._stop, remove_container) - def _stop(self, remove_container=True): + def _stop(self, remove_container=True) -> None: """Stop/remove Docker container. Need run inside executor. @@ -181,26 +183,24 @@ class DockerInterface(CoreSysAttributes): try: docker_container = self.sys_docker.containers.get(self.name) except docker.errors.DockerException: - return False + raise DockerAPIError() from None if docker_container.status == "running": - _LOGGER.info("Stop %s Docker application", self.image) + _LOGGER.info("Stop %s application", self.name) with suppress(docker.errors.DockerException): docker_container.stop(timeout=self.timeout) if remove_container: with suppress(docker.errors.DockerException): - _LOGGER.info("Clean %s Docker application", self.image) + _LOGGER.info("Clean %s application", self.name) docker_container.remove(force=True) - return True - @process_lock - def start(self): + def start(self) -> Awaitable[None]: """Start Docker container.""" return self.sys_run_in_executor(self._start) - def _start(self): + def _start(self) -> None: """Start docker container. Need run inside executor. @@ -208,31 +208,30 @@ class DockerInterface(CoreSysAttributes): try: docker_container = self.sys_docker.containers.get(self.name) except docker.errors.DockerException: - return False + raise DockerAPIError() from None _LOGGER.info("Start %s", self.image) try: docker_container.start() except docker.errors.DockerException as err: _LOGGER.error("Can't start %s: %s", self.image, err) - return False - - return True + raise DockerAPIError() from None @process_lock - def remove(self): + def remove(self) -> Awaitable[None]: """Remove Docker images.""" return self.sys_run_in_executor(self._remove) - def _remove(self): + def _remove(self) -> None: """remove docker images. Need run inside executor. """ # Cleanup container - self._stop() + with suppress(DockerAPIError): + self._stop() - _LOGGER.info("Remove Docker %s with latest and %s", self.image, self.version) + _LOGGER.info("Remove image %s with latest and %s", self.image, self.version) try: with suppress(docker.errors.ImageNotFound): @@ -245,17 +244,16 @@ class DockerInterface(CoreSysAttributes): except docker.errors.DockerException as err: _LOGGER.warning("Can't remove image %s: %s", self.image, err) - return False + raise DockerAPIError() from None self._meta = None - return True @process_lock - def update(self, tag, image=None): + def update(self, tag: str, image: Optional[str] = None) -> Awaitable[None]: """Update a Docker image.""" return self.sys_run_in_executor(self._update, tag, image) - def _update(self, tag, image=None): + def _update(self, tag: str, image: Optional[str] = None) -> None: """Update a docker image. Need run inside executor. @@ -263,27 +261,27 @@ class DockerInterface(CoreSysAttributes): image = image or self.image _LOGGER.info( - "Update Docker %s:%s to %s:%s", self.image, self.version, image, tag + "Update image %s:%s to %s:%s", self.image, self.version, image, tag ) # Update docker image - if not self._install(tag, image): - return False + self._install(tag, image) # Stop container & cleanup - self._stop() - self._cleanup() + with suppress(DockerAPIError): + try: + self._stop() + finally: + self._cleanup() - return True - - def logs(self): + def logs(self) -> Awaitable[bytes]: """Return Docker logs of container. Return a Future. """ return self.sys_run_in_executor(self._logs) - def _logs(self): + def _logs(self) -> bytes: """Return Docker logs of container. Need run inside executor. @@ -299,11 +297,11 @@ class DockerInterface(CoreSysAttributes): _LOGGER.warning("Can't grep logs from %s: %s", self.image, err) @process_lock - def cleanup(self): + def cleanup(self) -> Awaitable[None]: """Check if old version exists and cleanup.""" return self.sys_run_in_executor(self._cleanup) - def _cleanup(self): + def _cleanup(self) -> None: """Check if old version exists and cleanup. Need run inside executor. @@ -312,24 +310,22 @@ class DockerInterface(CoreSysAttributes): latest = self.sys_docker.images.get(self.image) except docker.errors.DockerException: _LOGGER.warning("Can't find %s for cleanup", self.image) - return False + raise DockerAPIError() from None for image in self.sys_docker.images.list(name=self.image): if latest.id == image.id: continue with suppress(docker.errors.DockerException): - _LOGGER.info("Cleanup Docker images: %s", image.tags) + _LOGGER.info("Cleanup images: %s", image.tags) self.sys_docker.images.remove(image.id, force=True) - return True - @process_lock - def restart(self): + def restart(self) -> Awaitable[None]: """Restart docker container.""" return self.sys_loop.run_in_executor(None, self._restart) - def _restart(self): + def _restart(self) -> None: """Restart docker container. Need run inside executor. @@ -337,33 +333,32 @@ class DockerInterface(CoreSysAttributes): try: container = self.sys_docker.containers.get(self.name) except docker.errors.DockerException: - return False + raise DockerAPIError() from None _LOGGER.info("Restart %s", self.image) try: container.restart(timeout=self.timeout) except docker.errors.DockerException as err: _LOGGER.warning("Can't restart %s: %s", self.image, err) - return False - return True + raise DockerAPIError() from None @process_lock - def execute_command(self, command): + def execute_command(self, command: str) -> Awaitable[CommandReturn]: """Create a temporary container and run command.""" return self.sys_run_in_executor(self._execute_command, command) - def _execute_command(self, command): + def _execute_command(self, command: str) -> CommandReturn: """Create a temporary container and run command. Need run inside executor. """ raise NotImplementedError() - def stats(self): + def stats(self) -> Awaitable[DockerStats]: """Read and return stats from container.""" return self.sys_run_in_executor(self._stats) - def _stats(self): + def _stats(self) -> DockerStats: """Create a temporary container and run command. Need run inside executor. @@ -371,23 +366,23 @@ class DockerInterface(CoreSysAttributes): try: docker_container = self.sys_docker.containers.get(self.name) except docker.errors.DockerException: - return None + raise DockerAPIError() from None try: stats = docker_container.stats(stream=False) return DockerStats(stats) except docker.errors.DockerException as err: _LOGGER.error("Can't read stats from %s: %s", self.name, err) - return None + raise DockerAPIError() from None - def is_fails(self): + def is_fails(self) -> Awaitable[bool]: """Return True if Docker is failing state. Return a Future. """ return self.sys_run_in_executor(self._is_fails) - def _is_fails(self): + def _is_fails(self) -> bool: """Return True if Docker is failing state. Need run inside executor. diff --git a/hassio/docker/network.py b/hassio/docker/network.py index e46fa09a9..c2f8b108d 100644 --- a/hassio/docker/network.py +++ b/hassio/docker/network.py @@ -1,9 +1,12 @@ """Internal network manager for Hass.io.""" +from ipaddress import IPv4Address import logging +from typing import List, Optional import docker -from ..const import DOCKER_NETWORK_MASK, DOCKER_NETWORK, DOCKER_NETWORK_RANGE +from ..const import DOCKER_NETWORK, DOCKER_NETWORK_MASK, DOCKER_NETWORK_RANGE +from ..exceptions import DockerAPIError _LOGGER = logging.getLogger(__name__) @@ -14,32 +17,32 @@ class DockerNetwork: This class is not AsyncIO safe! """ - def __init__(self, dock): + def __init__(self, docker_client: docker.DockerClient): """Initialize internal Hass.io network.""" - self.docker = dock - self.network = self._get_network() + self.docker: docker.DockerClient = docker_client + self.network: docker.models.networks.Network = self._get_network() @property - def name(self): + def name(self) -> str: """Return name of network.""" return DOCKER_NETWORK @property - def containers(self): + def containers(self) -> List[docker.models.containers.Container]: """Return of connected containers from network.""" return self.network.containers @property - def gateway(self): + def gateway(self) -> IPv4Address: """Return gateway of the network.""" return DOCKER_NETWORK_MASK[1] @property - def supervisor(self): + def supervisor(self) -> IPv4Address: """Return supervisor of the network.""" return DOCKER_NETWORK_MASK[2] - def _get_network(self): + def _get_network(self) -> docker.models.networks.Network: """Get HassIO network.""" try: return self.docker.networks.get(DOCKER_NETWORK) @@ -49,18 +52,25 @@ class DockerNetwork: ipam_pool = docker.types.IPAMPool( subnet=str(DOCKER_NETWORK_MASK), gateway=str(self.gateway), - iprange=str(DOCKER_NETWORK_RANGE) + iprange=str(DOCKER_NETWORK_RANGE), ) ipam_config = docker.types.IPAMConfig(pool_configs=[ipam_pool]) return self.docker.networks.create( - DOCKER_NETWORK, driver='bridge', ipam=ipam_config, - enable_ipv6=False, options={ - "com.docker.network.bridge.name": DOCKER_NETWORK, - }) + DOCKER_NETWORK, + driver="bridge", + ipam=ipam_config, + enable_ipv6=False, + options={"com.docker.network.bridge.name": DOCKER_NETWORK}, + ) - def attach_container(self, container, alias=None, ipv4=None): + def attach_container( + self, + container: docker.models.containers.Container, + alias: Optional[List[str]] = None, + ipv4: Optional[IPv4Address] = None, + ) -> None: """Attach container to Hass.io network. Need run inside executor. @@ -71,23 +81,24 @@ class DockerNetwork: self.network.connect(container, aliases=alias, ipv4_address=ipv4) except docker.errors.APIError as err: _LOGGER.error("Can't link container to hassio-net: %s", err) - return False + raise DockerAPIError() from None self.network.reload() - return True - def detach_default_bridge(self, container): + def detach_default_bridge( + self, container: docker.models.containers.Container + ) -> None: """Detach default Docker bridge. Need run inside executor. """ try: - default_network = self.docker.networks.get('bridge') + default_network = self.docker.networks.get("bridge") default_network.disconnect(container) except docker.errors.NotFound: return except docker.errors.APIError as err: - _LOGGER.warning( - "Can't disconnect container from default: %s", err) + _LOGGER.warning("Can't disconnect container from default: %s", err) + raise DockerAPIError() from None diff --git a/hassio/docker/supervisor.py b/hassio/docker/supervisor.py index fe327d05d..2d239ca71 100644 --- a/hassio/docker/supervisor.py +++ b/hassio/docker/supervisor.py @@ -1,11 +1,13 @@ """Init file for Hass.io Docker object.""" +from ipaddress import IPv4Address import logging import os import docker -from .interface import DockerInterface from ..coresys import CoreSysAttributes +from ..exceptions import DockerAPIError +from .interface import DockerInterface _LOGGER = logging.getLogger(__name__) @@ -14,29 +16,36 @@ class DockerSupervisor(DockerInterface, CoreSysAttributes): """Docker Hass.io wrapper for Supervisor.""" @property - def name(self): + def name(self) -> str: """Return name of Docker container.""" - return os.environ['SUPERVISOR_NAME'] + return os.environ["SUPERVISOR_NAME"] - def _attach(self): + @property + def ip_address(self) -> IPv4Address: + """Return IP address of this container.""" + return self.sys_docker.network.supervisor + + def _attach(self) -> None: """Attach to running docker container. Need run inside executor. """ try: - container = self.sys_docker.containers.get(self.name) + docker_container = self.sys_docker.containers.get(self.name) except docker.errors.DockerException: - return False + raise DockerAPIError() from None - self._meta = container.attrs - _LOGGER.info("Attach to Supervisor %s with version %s", - self.image, self.version) + self._meta = docker_container.attrs + _LOGGER.info( + "Attach to Supervisor %s with version %s", self.image, self.version + ) # If already attach - if container in self.sys_docker.network.containers: - return True + if docker_container in self.sys_docker.network.containers: + return # Attach to network - return self.sys_docker.network.attach_container( - container, alias=['hassio'], - ipv4=self.sys_docker.network.supervisor) + _LOGGER.info("Connect Supervisor to Hass.io Network") + self.sys_docker.network.attach_container( + docker_container, alias=["hassio"], ipv4=self.sys_docker.network.supervisor + ) diff --git a/hassio/exceptions.py b/hassio/exceptions.py index fb44083b8..e3634be4b 100644 --- a/hassio/exceptions.py +++ b/hassio/exceptions.py @@ -28,6 +28,17 @@ class HomeAssistantAuthError(HomeAssistantAPIError): """Home Assistant Auth API exception.""" +# Supervisor + + +class SupervisorError(HassioError): + """Supervisor error.""" + + +class SupervisorUpdateError(SupervisorError): + """Supervisor update error.""" + + # HassOS @@ -43,6 +54,17 @@ class HassOSNotSupportedError(HassioNotSupportedError): """Function not supported by HassOS.""" +# Addons + + +class AddonsError(HassioError): + """Addons exception.""" + + +class AddonsNotSupportedError(HassioNotSupportedError): + """Addons don't support a function.""" + + # Arch @@ -144,3 +166,10 @@ class AppArmorInvalidError(AppArmorError): class JsonFileError(HassioError): """Invalid json file.""" + + +# docker/api + + +class DockerAPIError(HassioError): + """Docker API error.""" diff --git a/hassio/hassos.py b/hassio/hassos.py index 6a25bd543..a6f8e3ec4 100644 --- a/hassio/hassos.py +++ b/hassio/hassos.py @@ -1,15 +1,22 @@ """HassOS support on supervisor.""" import asyncio +from contextlib import suppress import logging from pathlib import Path +from typing import Awaitable, Optional import aiohttp from cpe import CPE -from .coresys import CoreSysAttributes from .const import URL_HASSOS_OTA +from .coresys import CoreSysAttributes, CoreSys from .docker.hassos_cli import DockerHassOSCli -from .exceptions import HassOSNotSupportedError, HassOSUpdateError, DBusError +from .exceptions import ( + DBusError, + HassOSNotSupportedError, + HassOSUpdateError, + DockerAPIError, +) _LOGGER = logging.getLogger(__name__) @@ -17,61 +24,61 @@ _LOGGER = logging.getLogger(__name__) class HassOS(CoreSysAttributes): """HassOS interface inside HassIO.""" - def __init__(self, coresys): + def __init__(self, coresys: CoreSys): """Initialize HassOS handler.""" - self.coresys = coresys - self.instance = DockerHassOSCli(coresys) - self._available = False - self._version = None - self._board = None + self.coresys: CoreSys = coresys + self.instance: DockerHassOSCli = DockerHassOSCli(coresys) + self._available: bool = False + self._version: Optional[str] = None + self._board: Optional[str] = None @property - def available(self): + def available(self) -> bool: """Return True, if HassOS on host.""" return self._available @property - def version(self): + def version(self) -> Optional[str]: """Return version of HassOS.""" return self._version @property - def version_cli(self): + def version_cli(self) -> Optional[str]: """Return version of HassOS cli.""" return self.instance.version @property - def version_latest(self): + def version_latest(self) -> str: """Return version of HassOS.""" return self.sys_updater.version_hassos @property - def version_cli_latest(self): + def version_cli_latest(self) -> str: """Return version of HassOS.""" return self.sys_updater.version_hassos_cli @property - def need_update(self): + def need_update(self) -> bool: """Return true if a HassOS update is available.""" return self.version != self.version_latest @property - def need_cli_update(self): + def need_cli_update(self) -> bool: """Return true if a HassOS cli update is available.""" return self.version_cli != self.version_cli_latest @property - def board(self): + def board(self) -> Optional[str]: """Return board name.""" return self._board - def _check_host(self): + def _check_host(self) -> None: """Check if HassOS is available.""" if not self.available: _LOGGER.error("No HassOS available") raise HassOSNotSupportedError() - async def _download_raucb(self, version): + async def _download_raucb(self, version: str) -> None: """Download rauc bundle (OTA) from github.""" url = URL_HASSOS_OTA.format(version=version, board=self.board) raucb = Path(self.sys_config.path_tmp, f"hassos-{version}.raucb") @@ -83,9 +90,9 @@ class HassOS(CoreSysAttributes): raise HassOSUpdateError() # Download RAUCB file - with raucb.open('wb') as ota_file: + with raucb.open("wb") as ota_file: while True: - chunk = await request.content.read(1048576) + chunk = await request.content.read(1_048_576) if not chunk: break ota_file.write(chunk) @@ -101,7 +108,7 @@ class HassOS(CoreSysAttributes): raise HassOSUpdateError() - async def load(self): + async def load(self) -> None: """Load HassOS data.""" try: # Check needed host functions @@ -111,7 +118,7 @@ class HassOS(CoreSysAttributes): assert self.sys_host.info.cpe is not None cpe = CPE(self.sys_host.info.cpe) - assert cpe.get_product()[0] == 'hassos' + assert cpe.get_product()[0] == "hassos" except (AssertionError, NotImplementedError): _LOGGER.debug("Found no HassOS") return @@ -122,9 +129,10 @@ class HassOS(CoreSysAttributes): self._board = cpe.get_target_hardware()[0] _LOGGER.info("Detect HassOS %s on host system", self.version) - await self.instance.attach() + with suppress(DockerAPIError): + await self.instance.attach() - def config_sync(self): + def config_sync(self) -> Awaitable[None]: """Trigger a host config reload from usb. Return a coroutine. @@ -132,9 +140,9 @@ class HassOS(CoreSysAttributes): self._check_host() _LOGGER.info("Syncing configuration from USB with HassOS.") - return self.sys_host.services.restart('hassos-config.service') + return self.sys_host.services.restart("hassos-config.service") - async def update(self, version=None): + async def update(self, version: Optional[str] = None) -> None: """Update HassOS system.""" version = version or self.version_latest @@ -167,20 +175,19 @@ class HassOS(CoreSysAttributes): # Update fails rauc_status = await self.sys_dbus.get_properties() - _LOGGER.error( - "HassOS update fails with: %s", rauc_status.get('LastError')) + _LOGGER.error("HassOS update fails with: %s", rauc_status.get("LastError")) raise HassOSUpdateError() - async def update_cli(self, version=None): + async def update_cli(self, version: Optional[str] = None) -> None: """Update local HassOS cli.""" version = version or self.version_cli_latest if version == self.version_cli: _LOGGER.warning("Version %s is already installed for CLI", version) - raise HassOSUpdateError() - - if await self.instance.update(version): return - _LOGGER.error("HassOS CLI update fails") - raise HassOSUpdateError() + try: + await self.instance.update(version) + except DockerAPIError: + _LOGGER.error("HassOS CLI update fails") + raise HassOSUpdateError() from None diff --git a/hassio/homeassistant.py b/hassio/homeassistant.py index 579451089..d1ab1269b 100644 --- a/hassio/homeassistant.py +++ b/hassio/homeassistant.py @@ -9,7 +9,7 @@ from pathlib import Path import re import socket import time -from typing import Any, AsyncContextManager, Coroutine, Dict, Optional +from typing import Any, AsyncContextManager, Awaitable, Dict, Optional from uuid import UUID import aiohttp @@ -33,11 +33,13 @@ from .const import ( ) from .coresys import CoreSys, CoreSysAttributes from .docker.homeassistant import DockerHomeAssistant +from .docker.stats import DockerStats from .exceptions import ( HomeAssistantAPIError, HomeAssistantAuthError, HomeAssistantError, HomeAssistantUpdateError, + DockerAPIError ) from .utils import convert_to_ascii, create_token, process_lock from .utils.json import JsonConfig @@ -72,7 +74,8 @@ class HomeAssistant(JsonConfig, CoreSysAttributes): async def load(self) -> None: """Prepare Home Assistant object.""" - if await self.instance.attach(): + with suppress(DockerAPIError): + await self.instance.attach() return _LOGGER.info("No Home Assistant Docker image %s found.", self.image) @@ -94,9 +97,9 @@ class HomeAssistant(JsonConfig, CoreSysAttributes): return self._error_state @property - def api_ip(self) -> IPv4Address: + def ip_address(self) -> IPv4Address: """Return IP of Home Assistant instance.""" - return self.sys_docker.network.gateway + return self.instance.ip_address @property def api_port(self) -> int: @@ -132,7 +135,7 @@ class HomeAssistant(JsonConfig, CoreSysAttributes): def api_url(self) -> str: """Return API url to Home Assistant.""" return "{}://{}:{}".format('https' if self.api_ssl else 'http', - self.api_ip, self.api_port) + self.ip_address, self.api_port) @property def watchdog(self) -> bool: @@ -230,8 +233,9 @@ class HomeAssistant(JsonConfig, CoreSysAttributes): """Install a landing page.""" _LOGGER.info("Setup HomeAssistant landingpage") while True: - if await self.instance.install('landingpage'): - break + with suppress(DockerAPIError): + await self.instance.install('landingpage') + return _LOGGER.warning("Fails install landingpage, retry after 30sec") await asyncio.sleep(30) @@ -245,8 +249,10 @@ class HomeAssistant(JsonConfig, CoreSysAttributes): await self.sys_updater.reload() tag = self.last_version - if tag and await self.instance.install(tag): - break + if tag: + with suppress(DockerAPIError): + await self.instance.install(tag) + break _LOGGER.warning("Error on install Home Assistant. Retry in 30sec") await asyncio.sleep(30) @@ -260,7 +266,8 @@ class HomeAssistant(JsonConfig, CoreSysAttributes): except HomeAssistantError: _LOGGER.error("Can't start Home Assistant!") finally: - await self.instance.cleanup() + with suppress(DockerAPIError): + await self.instance.cleanup() @process_lock async def update(self, version=None) -> None: @@ -272,14 +279,17 @@ class HomeAssistant(JsonConfig, CoreSysAttributes): if exists and version == self.instance.version: _LOGGER.warning("Version %s is already installed", version) - return HomeAssistantUpdateError() + return # process an update async def _update(to_version): """Run Home Assistant update.""" _LOGGER.info("Update Home Assistant to version %s", to_version) - if not await self.instance.update(to_version): - raise HomeAssistantUpdateError() + try: + await self.instance.update(to_version) + except DockerAPIError: + _LOGGER.warning("Update Home Assistant image fails") + raise HomeAssistantUpdateError() from None if running: await self._start() @@ -307,67 +317,81 @@ class HomeAssistant(JsonConfig, CoreSysAttributes): self._data[ATTR_ACCESS_TOKEN] = create_token() self.save_data() - if not await self.instance.run(): - raise HomeAssistantError() + try: + await self.instance.run() + except DockerAPIError: + raise HomeAssistantError() from None await self._block_till_run() @process_lock async def start(self) -> None: """Run Home Assistant docker.""" - if await self.instance.is_running(): - await self.instance.restart() - elif await self.instance.is_initialize(): - await self.instance.start() - else: - await self._start() - return + try: + if await self.instance.is_running(): + await self.instance.restart() + elif await self.instance.is_initialize(): + await self.instance.start() + else: + await self._start() + return - await self._block_till_run() + await self._block_till_run() + except DockerAPIError: + raise HomeAssistantError() from None @process_lock - def stop(self) -> Coroutine: + async def stop(self) -> None: """Stop Home Assistant Docker. Return a coroutine. """ - return self.instance.stop(remove_container=False) + try: + return await self.instance.stop(remove_container=False) + except DockerAPIError: + raise HomeAssistantError() from None @process_lock async def restart(self) -> None: """Restart Home Assistant Docker.""" - if not await self.instance.restart(): - raise HomeAssistantError() + try: + await self.instance.restart() + except DockerAPIError: + raise HomeAssistantError() from None await self._block_till_run() @process_lock async def rebuild(self) -> None: """Rebuild Home Assistant Docker container.""" - await self.instance.stop() + with suppress(DockerAPIError): + await self.instance.stop() await self._start() - def logs(self) -> Coroutine: + def logs(self) -> Awaitable[bytes]: """Get HomeAssistant docker logs. Return a coroutine. """ return self.instance.logs() - def stats(self) -> Coroutine: + async def stats(self) -> DockerStats: """Return stats of Home Assistant. Return a coroutine. """ - return self.instance.stats() + try: + return await self.instance.stats() + except DockerAPIError: + raise HomeAssistantError() from None - def is_running(self) -> Coroutine: + def is_running(self) -> Awaitable[bool]: """Return True if Docker container is running. Return a coroutine. """ return self.instance.is_running() - def is_fails(self) -> Coroutine: + def is_fails(self) -> Awaitable[bool]: """Return True if a Docker container is fails state. Return a coroutine. @@ -485,7 +509,7 @@ class HomeAssistant(JsonConfig, CoreSysAttributes): """Check if port is mapped.""" sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: - result = sock.connect_ex((str(self.api_ip), self.api_port)) + result = sock.connect_ex((str(self.ip_address), self.api_port)) sock.close() # Check if the port is available diff --git a/hassio/snapshots/snapshot.py b/hassio/snapshots/snapshot.py index fc6e408fa..767957b07 100644 --- a/hassio/snapshots/snapshot.py +++ b/hassio/snapshots/snapshot.py @@ -39,6 +39,7 @@ from ..const import ( CRYPTO_AES128, ) from ..coresys import CoreSys, CoreSysAttributes +from ..exceptions import AddonsError from ..utils.json import write_json_file from ..utils.tar import SecureTarFile from .utils import key_to_iv, password_for_validating, password_to_key, remove_folder @@ -289,7 +290,9 @@ class Snapshot(CoreSysAttributes): 'w', key=self._key) # Take snapshot - if not await addon.snapshot(addon_file): + try: + await addon.snapshot(addon_file) + except AddonsError: _LOGGER.error("Can't make snapshot from %s", addon.slug) return @@ -326,10 +329,11 @@ class Snapshot(CoreSysAttributes): _LOGGER.error("Can't find snapshot for %s", addon.slug) return - # Performe a restore - if not await addon.restore(addon_file): + # Perform a restore + try: + await addon.restore(addon_file) + except AddonsError: _LOGGER.error("Can't restore snapshot for %s", addon.slug) - return # Run tasks tasks = [_addon_restore(addon) for addon in addon_list] diff --git a/hassio/supervisor.py b/hassio/supervisor.py index 9f30a2213..f4740979c 100644 --- a/hassio/supervisor.py +++ b/hassio/supervisor.py @@ -1,15 +1,24 @@ """Home Assistant control object.""" import asyncio +from contextlib import suppress +from ipaddress import IPv4Address import logging from pathlib import Path from tempfile import TemporaryDirectory +from typing import Awaitable, Optional import aiohttp -from .coresys import CoreSysAttributes -from .docker.supervisor import DockerSupervisor from .const import URL_HASSIO_APPARMOR -from .exceptions import HostAppArmorError +from .coresys import CoreSys, CoreSysAttributes +from .docker.stats import DockerStats +from .docker.supervisor import DockerSupervisor +from .exceptions import ( + DockerAPIError, + HostAppArmorError, + SupervisorError, + SupervisorUpdateError, +) _LOGGER = logging.getLogger(__name__) @@ -17,43 +26,52 @@ _LOGGER = logging.getLogger(__name__) class Supervisor(CoreSysAttributes): """Home Assistant core object for handle it.""" - def __init__(self, coresys): + def __init__(self, coresys: CoreSys): """Initialize hass object.""" - self.coresys = coresys - self.instance = DockerSupervisor(coresys) + self.coresys: CoreSys = coresys + self.instance: DockerSupervisor = DockerSupervisor(coresys) - async def load(self): + async def load(self) -> None: """Prepare Home Assistant object.""" - if not await self.instance.attach(): + try: + await self.instance.attach() + except DockerAPIError: _LOGGER.fatal("Can't setup Supervisor Docker container!") - await self.instance.cleanup() + + with suppress(DockerAPIError): + await self.instance.cleanup() @property - def need_update(self): + def ip_address(self) -> IPv4Address: + """Return IP of Supervisor instance.""" + return self.instance.ip_address + + @property + def need_update(self) -> bool: """Return True if an update is available.""" return self.version != self.last_version @property - def version(self): + def version(self) -> str: """Return version of running Home Assistant.""" return self.instance.version @property - def last_version(self): + def last_version(self) -> str: """Return last available version of Home Assistant.""" return self.sys_updater.version_hassio @property - def image(self): + def image(self) -> str: """Return image name of Home Assistant container.""" return self.instance.image @property - def arch(self): + def arch(self) -> str: """Return arch of the Hass.io container.""" return self.instance.arch - async def update_apparmor(self): + async def update_apparmor(self) -> None: """Fetch last version and update profile.""" url = URL_HASSIO_APPARMOR try: @@ -63,22 +81,25 @@ class Supervisor(CoreSysAttributes): except (aiohttp.ClientError, asyncio.TimeoutError) as err: _LOGGER.warning("Can't fetch AppArmor profile: %s", err) - return + raise SupervisorError() from None with TemporaryDirectory(dir=self.sys_config.path_tmp) as tmp_dir: - profile_file = Path(tmp_dir, 'apparmor.txt') + profile_file = Path(tmp_dir, "apparmor.txt") try: profile_file.write_text(data) except OSError as err: _LOGGER.error("Can't write temporary profile: %s", err) - return + raise SupervisorError() from None + try: await self.sys_host.apparmor.load_profile( - "hassio-supervisor", profile_file) + "hassio-supervisor", profile_file + ) except HostAppArmorError: _LOGGER.error("Can't update AppArmor profile!") + raise SupervisorError() from None - async def update(self, version=None): + async def update(self, version: Optional[str] = None) -> None: """Update Home Assistant version.""" version = version or self.last_version @@ -87,29 +108,31 @@ class Supervisor(CoreSysAttributes): return _LOGGER.info("Update Supervisor to version %s", version) - if await self.instance.install(version): - await self.update_apparmor() - self.sys_loop.call_later(1, self.sys_loop.stop) - return True + try: + await self.instance.install(version) + except DockerAPIError: + _LOGGER.error("Update of Hass.io fails!") + raise SupervisorUpdateError() from None - _LOGGER.error("Update of Hass.io fails!") - return False + with suppress(SupervisorError): + await self.update_apparmor() + self.sys_loop.call_later(1, self.sys_loop.stop) @property - def in_progress(self): + def in_progress(self) -> bool: """Return True if a task is in progress.""" return self.instance.in_progress - def logs(self): + def logs(self) -> Awaitable[bytes]: """Get Supervisor docker logs. - Return a coroutine. + Return Coroutine. """ return self.instance.logs() - def stats(self): - """Return stats of Supervisor. - - Return a coroutine. - """ - return self.instance.stats() + async def stats(self) -> DockerStats: + """Return stats of Supervisor.""" + try: + return await self.instance.stats() + except DockerAPIError: + raise SupervisorError() from None diff --git a/hassio/utils/__init__.py b/hassio/utils/__init__.py index 88882ee18..2f2fd7714 100644 --- a/hassio/utils/__init__.py +++ b/hassio/utils/__init__.py @@ -1,32 +1,33 @@ """Tools file for Hass.io.""" -from datetime import datetime import hashlib import logging import re import uuid +from datetime import datetime _LOGGER = logging.getLogger(__name__) RE_STRING = re.compile(r"\x1b(\[.*?[@-~]|\].*?(\x07|\x1b\\))") -def convert_to_ascii(raw): +def convert_to_ascii(raw) -> str: """Convert binary to ascii and remove colors.""" return RE_STRING.sub("", raw.decode()) -def create_token(): +def create_token() -> str: """Create token for API access.""" return hashlib.sha256(uuid.uuid4().bytes).hexdigest() def process_lock(method): """Wrap function with only run once.""" + async def wrap_api(api, *args, **kwargs): """Return api wrapper.""" if api.lock.locked(): _LOGGER.error( - "Can't execute %s while a task is in progress", - method.__name__) + "Can't execute %s while a task is in progress", method.__name__ + ) return False async with api.lock: @@ -40,6 +41,7 @@ class AsyncThrottle: Decorator that prevents a function from being called more than once every time period. """ + def __init__(self, delta): """Initialize async throttle.""" self.throttle_period = delta @@ -47,6 +49,7 @@ class AsyncThrottle: def __call__(self, method): """Throttle function""" + async def wrapper(*args, **kwargs): """Throttle function wrapper""" now = datetime.now() diff --git a/pylintrc b/pylintrc index 1b7773422..9d277fcf3 100644 --- a/pylintrc +++ b/pylintrc @@ -45,3 +45,7 @@ disable= [EXCEPTIONS] overgeneral-exceptions=Exception + + +[TYPECHECK] +ignored-modules = distutils diff --git a/requirements.txt b/requirements.txt index 845b17f01..fd7343857 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,7 +5,7 @@ cchardet==2.1.4 colorlog==4.0.2 cpe==1.2.1 cryptography==2.6.1 -docker==3.7.0 +docker==3.7.2 gitpython==2.1.11 pytz==2018.9 pyudev==0.21.0 diff --git a/setup.cfg b/setup.cfg index a0fed8150..1a9f8213b 100644 --- a/setup.cfg +++ b/setup.cfg @@ -14,4 +14,4 @@ use_parentheses = true [flake8] max-line-length = 88 -ignore = E501 +ignore = E501, W503 From 67f562a84606ec9fe3f0376dea138f1ea9caf95f Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Fri, 5 Apr 2019 17:36:07 +0200 Subject: [PATCH 12/17] Init ingress session boarder / lookup (#995) * Init ingress session boarder / lookup * Add session to API * Add cokkie validate * Do it without event bus * Add logger * Fix validation * Add tests * Update tests * Mock json storage --- API.md | 11 +++++ hassio/addons/addon.py | 4 +- hassio/api/__init__.py | 1 + hassio/api/ingress.py | 44 +++++++++++------ hassio/bootstrap.py | 32 ++++++------ hassio/const.py | 3 ++ hassio/core.py | 4 ++ hassio/coresys.py | 19 ++++++++ hassio/homeassistant.py | 7 +-- hassio/ingress.py | 103 +++++++++++++++++++++++++++++++++++++++ hassio/tasks.py | 101 ++++++++++++++++++++++++++------------ hassio/utils/__init__.py | 7 --- hassio/utils/dt.py | 7 ++- hassio/validate.py | 51 +++++++++++-------- tests/conftest.py | 14 +++--- tests/test_ingress.py | 22 +++++++++ 16 files changed, 325 insertions(+), 105 deletions(-) create mode 100644 hassio/ingress.py create mode 100644 tests/test_ingress.py diff --git a/API.md b/API.md index f279ec6ae..982a60312 100644 --- a/API.md +++ b/API.md @@ -588,9 +588,20 @@ Write data to add-on stdin ### ingress +- POST `/ingress/session` + +Create a new Session for access to ingress service. + +```json +{ + "session": "token" +} +``` + - VIEW `/ingress/{token}` Ingress WebUI for this Add-on. The addon need support HASS Auth! +Need ingress session as cookie. ### discovery diff --git a/hassio/addons/addon.py b/hassio/addons/addon.py index fe632348a..7952fbd10 100644 --- a/hassio/addons/addon.py +++ b/hassio/addons/addon.py @@ -6,6 +6,7 @@ from ipaddress import IPv4Address, ip_address import logging from pathlib import Path, PurePath import re +import secrets import shutil import tarfile from tempfile import TemporaryDirectory @@ -89,7 +90,6 @@ from ..exceptions import ( HostAppArmorError, JsonFileError, ) -from ..utils import create_token from ..utils.apparmor import adjust_profile from ..utils.json import read_json_file, write_json_file from .utils import check_installed, remove_data @@ -896,7 +896,7 @@ class Addon(CoreSysAttributes): return # Access Token - self._data.user[self._id][ATTR_ACCESS_TOKEN] = create_token() + self._data.user[self._id][ATTR_ACCESS_TOKEN] = secrets.token_hex(56) self.save_data() # Options diff --git a/hassio/api/__init__.py b/hassio/api/__init__.py index f8873e325..865a3cb54 100644 --- a/hassio/api/__init__.py +++ b/hassio/api/__init__.py @@ -194,6 +194,7 @@ class RestAPI(CoreSysAttributes): api_ingress.coresys = self.coresys self.webapp.add_routes([ + web.post('/ingress/session', api_ingress.create_session), web.view('/ingress/{token}/{path:.*}', api_ingress.handler), ]) diff --git a/hassio/api/ingress.py b/hassio/api/ingress.py index 827a23b20..c4fd6b087 100644 --- a/hassio/api/ingress.py +++ b/hassio/api/ingress.py @@ -2,7 +2,7 @@ import asyncio from ipaddress import ip_address import logging -from typing import Dict, Union +from typing import Any, Dict, Union import aiohttp from aiohttp import hdrs, web @@ -14,8 +14,9 @@ from aiohttp.web_exceptions import ( from multidict import CIMultiDict, istr from ..addons.addon import Addon -from ..const import HEADER_TOKEN, REQUEST_FROM +from ..const import ATTR_SESSION, HEADER_TOKEN, REQUEST_FROM, COOKIE_INGRESS from ..coresys import CoreSysAttributes +from .utils import api_process _LOGGER = logging.getLogger(__name__) @@ -28,34 +29,45 @@ class APIIngress(CoreSysAttributes): token = request.match_info.get("token") # Find correct add-on - for addon in self.sys_addons.list_installed: - if addon.ingress_token != token: - continue - return addon + addon = self.sys_ingress.get(token) + if not addon: + _LOGGER.warning("Ingress for %s not available", token) + raise HTTPServiceUnavailable() - _LOGGER.warning("Ingress for %s not available", token) - raise HTTPServiceUnavailable() + return addon + + def _check_ha_access(self, request: web.Request) -> None: + if request[REQUEST_FROM] != self.sys_homeassistant: + _LOGGER.warning("Ingress is only available behind Home Assistant") + raise HTTPUnauthorized() def _create_url(self, addon: Addon, path: str) -> str: """Create URL to container.""" return f"{addon.ingress_internal}/{path}" + @api_process + async def create_session(self, request: web.Request) -> Dict[str, Any]: + """Create a new session.""" + self._check_ha_access(request) + + session = self.sys_ingress.create_session() + return {ATTR_SESSION: session} + async def handler( self, request: web.Request ) -> Union[web.Response, web.StreamResponse, web.WebSocketResponse]: """Route data to Hass.io ingress service.""" - addon = self._extract_addon(request) - path = request.match_info.get("path") + self._check_ha_access(request) - # Only Home Assistant call this - if request[REQUEST_FROM] != self.sys_homeassistant: - _LOGGER.warning("Ingress is only available behind Home Assistant") + # Check Ingress Session + session = request.cookies.get(COOKIE_INGRESS) + if not self.sys_ingress.validate_session(session): + _LOGGER.warning("No valid ingress session %s", session) raise HTTPUnauthorized() - if not addon.with_ingress: - _LOGGER.warning("Add-on %s don't support ingress feature", addon.slug) - raise HTTPBadGateway() # Process requests + addon = self._extract_addon(request) + path = request.match_info.get("path") try: # Websocket if _is_websocket(request): diff --git a/hassio/bootstrap.py b/hassio/bootstrap.py index 038c4a6f1..9ba8af4c2 100644 --- a/hassio/bootstrap.py +++ b/hassio/bootstrap.py @@ -19,6 +19,7 @@ from .discovery import Discovery from .hassos import HassOS from .homeassistant import HomeAssistant from .host import HostManager +from .ingress import Ingress from .services import ServiceManager from .snapshots import SnapshotManager from .supervisor import Supervisor @@ -49,6 +50,7 @@ async def initialize_coresys(): coresys.addons = AddonManager(coresys) coresys.snapshots = SnapshotManager(coresys) coresys.host = HostManager(coresys) + coresys.ingress = Ingress(coresys) coresys.tasks = Tasks(coresys) coresys.services = ServiceManager(coresys) coresys.discovery = Discovery(coresys) @@ -71,8 +73,9 @@ def initialize_system_data(coresys): # Home Assistant configuration folder if not config.path_homeassistant.is_dir(): - _LOGGER.info("Create Home Assistant configuration folder %s", - config.path_homeassistant) + _LOGGER.info( + "Create Home Assistant configuration folder %s", config.path_homeassistant + ) config.path_homeassistant.mkdir() # hassio ssl folder @@ -82,18 +85,19 @@ def initialize_system_data(coresys): # hassio addon data folder if not config.path_addons_data.is_dir(): - _LOGGER.info("Create Hass.io Add-on data folder %s", - config.path_addons_data) + _LOGGER.info("Create Hass.io Add-on data folder %s", config.path_addons_data) config.path_addons_data.mkdir(parents=True) if not config.path_addons_local.is_dir(): - _LOGGER.info("Create Hass.io Add-on local repository folder %s", - config.path_addons_local) + _LOGGER.info( + "Create Hass.io Add-on local repository folder %s", config.path_addons_local + ) config.path_addons_local.mkdir(parents=True) if not config.path_addons_git.is_dir(): - _LOGGER.info("Create Hass.io Add-on git repositories folder %s", - config.path_addons_git) + _LOGGER.info( + "Create Hass.io Add-on git repositories folder %s", config.path_addons_git + ) config.path_addons_git.mkdir(parents=True) # hassio tmp folder @@ -154,7 +158,8 @@ def initialize_logging(): "ERROR": "red", "CRITICAL": "red", }, - )) + ) + ) def check_environment(): @@ -188,19 +193,16 @@ def check_environment(): def reg_signal(loop): """Register SIGTERM and SIGKILL to stop system.""" try: - loop.add_signal_handler(signal.SIGTERM, - lambda: loop.call_soon(loop.stop)) + loop.add_signal_handler(signal.SIGTERM, lambda: loop.call_soon(loop.stop)) except (ValueError, RuntimeError): _LOGGER.warning("Could not bind to SIGTERM") try: - loop.add_signal_handler(signal.SIGHUP, - lambda: loop.call_soon(loop.stop)) + loop.add_signal_handler(signal.SIGHUP, lambda: loop.call_soon(loop.stop)) except (ValueError, RuntimeError): _LOGGER.warning("Could not bind to SIGHUP") try: - loop.add_signal_handler(signal.SIGINT, - lambda: loop.call_soon(loop.stop)) + loop.add_signal_handler(signal.SIGINT, lambda: loop.call_soon(loop.stop)) except (ValueError, RuntimeError): _LOGGER.warning("Could not bind to SIGINT") diff --git a/hassio/const.py b/hassio/const.py index 29f2eec6a..6e6ffd32b 100644 --- a/hassio/const.py +++ b/hassio/const.py @@ -23,6 +23,7 @@ FILE_HASSIO_HOMEASSISTANT = Path(HASSIO_DATA, "homeassistant.json") FILE_HASSIO_UPDATER = Path(HASSIO_DATA, "updater.json") FILE_HASSIO_SERVICES = Path(HASSIO_DATA, "services.json") FILE_HASSIO_DISCOVERY = Path(HASSIO_DATA, "discovery.json") +FILE_HASSIO_INGRESS = Path(HASSIO_DATA, "ingress.json") SOCKET_DOCKER = Path("/var/run/docker.sock") @@ -54,6 +55,7 @@ CONTENT_TYPE_TAR = "application/tar" CONTENT_TYPE_URL = "application/x-www-form-urlencoded" HEADER_HA_ACCESS = "X-Ha-Access" HEADER_TOKEN = "X-Hassio-Key" +COOKIE_INGRESS = "ingress_session" ENV_TOKEN = "HASSIO_TOKEN" ENV_TIME = "TZ" @@ -194,6 +196,7 @@ ATTR_INGRESS_ENTRY = "ingress_entry" ATTR_INGRESS_TOKEN = "ingress_token" ATTR_INGRESS_URL = "ingress_url" ATTR_IP_ADDRESS = "ip_address" +ATTR_SESSION = "session" PROVIDE_SERVICE = "provide" NEED_SERVICE = "need" diff --git a/hassio/core.py b/hassio/core.py index b9ae489ef..6e3e18936 100644 --- a/hassio/core.py +++ b/hassio/core.py @@ -62,6 +62,9 @@ class HassIO(CoreSysAttributes): # Load discovery await self.sys_discovery.load() + # Load ingress + await self.sys_ingress.load() + # start dns forwarding self.sys_create_task(self.sys_dns.start()) @@ -131,6 +134,7 @@ class HassIO(CoreSysAttributes): self.sys_dns.stop(), self.sys_websession.close(), self.sys_websession_ssl.close(), + self.sys_ingress.unload(), ] ) except asyncio.TimeoutError: diff --git a/hassio/coresys.py b/hassio/coresys.py index 5ded8f9f0..190d79801 100644 --- a/hassio/coresys.py +++ b/hassio/coresys.py @@ -23,6 +23,7 @@ if TYPE_CHECKING: from .hassos import HassOS from .homeassistant import HomeAssistant from .host import HostManager + from .ingress import Ingress from .services import ServiceManager from .snapshots import SnapshotManager from .supervisor import Supervisor @@ -63,6 +64,7 @@ class CoreSys: self._snapshots: SnapshotManager = None self._tasks: Tasks = None self._host: HostManager = None + self._ingress: Ingress = None self._dbus: DBusManager = None self._hassos: HassOS = None self._services: ServiceManager = None @@ -293,6 +295,18 @@ class CoreSys: raise RuntimeError("HostManager already set!") self._host = value + @property + def ingress(self) -> Ingress: + """Return Ingress object.""" + return self._ingress + + @ingress.setter + def ingress(self, value: Ingress): + """Set a Ingress object.""" + if self._ingress: + raise RuntimeError("Ingress already set!") + self._ingress = value + @property def hassos(self) -> HassOS: """Return HassOS object.""" @@ -441,6 +455,11 @@ class CoreSysAttributes: """Return HostManager object.""" return self.coresys.host + @property + def sys_ingress(self) -> Ingress: + """Return Ingress object.""" + return self.coresys.ingress + @property def sys_hassos(self) -> HassOS: """Return HassOS object.""" diff --git a/hassio/homeassistant.py b/hassio/homeassistant.py index d1ab1269b..6e04033a8 100644 --- a/hassio/homeassistant.py +++ b/hassio/homeassistant.py @@ -7,6 +7,7 @@ import logging import os from pathlib import Path import re +import secrets import socket import time from typing import Any, AsyncContextManager, Awaitable, Dict, Optional @@ -35,13 +36,13 @@ from .coresys import CoreSys, CoreSysAttributes from .docker.homeassistant import DockerHomeAssistant from .docker.stats import DockerStats from .exceptions import ( + DockerAPIError, HomeAssistantAPIError, HomeAssistantAuthError, HomeAssistantError, HomeAssistantUpdateError, - DockerAPIError ) -from .utils import convert_to_ascii, create_token, process_lock +from .utils import convert_to_ascii, process_lock from .utils.json import JsonConfig from .validate import SCHEMA_HASS_CONFIG @@ -314,7 +315,7 @@ class HomeAssistant(JsonConfig, CoreSysAttributes): return # Create new API token - self._data[ATTR_ACCESS_TOKEN] = create_token() + self._data[ATTR_ACCESS_TOKEN] = secrets.token_hex(56) self.save_data() try: diff --git a/hassio/ingress.py b/hassio/ingress.py new file mode 100644 index 000000000..384fefc17 --- /dev/null +++ b/hassio/ingress.py @@ -0,0 +1,103 @@ +"""Fetch last versions from webserver.""" +from datetime import timedelta +import logging +from typing import Dict, Optional +import secrets + +from .addons.addon import Addon +from .const import ATTR_SESSION, FILE_HASSIO_INGRESS +from .coresys import CoreSys, CoreSysAttributes +from .utils.json import JsonConfig +from .utils.dt import utcnow, utc_from_timestamp +from .validate import SCHEMA_INGRESS_CONFIG + +_LOGGER = logging.getLogger(__name__) + + +class Ingress(JsonConfig, CoreSysAttributes): + """Fetch last versions from version.json.""" + + def __init__(self, coresys: CoreSys): + """Initialize updater.""" + super().__init__(FILE_HASSIO_INGRESS, SCHEMA_INGRESS_CONFIG) + self.coresys: CoreSys = coresys + self.tokens: Dict[str, str] = {} + + def get(self, token: str) -> Optional[Addon]: + """Return addon they have this ingress token.""" + if token not in self.tokens: + self._update_token_list() + return self.sys_addons.get(self.tokens.get(token)) + + @property + def sessions(self) -> Dict[str, float]: + """Return sessions.""" + return self._data[ATTR_SESSION] + + async def load(self) -> None: + """Update internal data.""" + self._update_token_list() + self._cleanup_sessions() + + _LOGGER.info("Load %d ingress session", len(self.sessions)) + + async def reload(self) -> None: + """Reload/Validate sessions.""" + self._cleanup_sessions() + + async def unload(self) -> None: + """Shutdown sessions.""" + self.save_data() + + def _cleanup_sessions(self) -> None: + """Remove not used sessions.""" + now = utcnow() + + sessions = {} + for session, valid in self.sessions.items(): + valid_dt = utc_from_timestamp(valid) + if valid_dt < now: + continue + + # Is valid + sessions[session] = valid + + # Write back + self.sessions.clear() + self.sessions.update(sessions) + + def _update_token_list(self) -> None: + """Regenerate token <-> Add-on map.""" + self.tokens.clear() + + # Read all ingress token and build a map + for addon in self.sys_addons.list_installed: + if not addon.with_ingress: + continue + self.tokens[addon.ingress_token] = addon.slug + + def create_session(self) -> str: + """Create new session.""" + session = secrets.token_hex(64) + valid = utcnow() + timedelta(minutes=15) + + self.sessions[session] = valid.timestamp() + self.save_data() + + return session + + def validate_session(self, session: str) -> bool: + """Return True if session valid and make it longer valid.""" + if session not in self.sessions: + return False + valid_until = utc_from_timestamp(self.sessions[session]) + + # Is still valid? + if valid_until < utcnow(): + return False + + # Update time + valid_until = valid_until + timedelta(minutes=15) + self.sessions[session] = valid_until.timestamp() + + return True diff --git a/hassio/tasks.py b/hassio/tasks.py index 1679e42ba..1f1cad774 100644 --- a/hassio/tasks.py +++ b/hassio/tasks.py @@ -7,7 +7,7 @@ from .exceptions import HomeAssistantError _LOGGER = logging.getLogger(__name__) -HASS_WATCHDOG_API = 'HASS_WATCHDOG_API' +HASS_WATCHDOG_API = "HASS_WATCHDOG_API" RUN_UPDATE_SUPERVISOR = 29100 RUN_UPDATE_ADDONS = 57600 @@ -17,6 +17,7 @@ RUN_RELOAD_ADDONS = 21600 RUN_RELOAD_SNAPSHOTS = 72000 RUN_RELOAD_HOST = 72000 RUN_RELOAD_UPDATER = 21600 +RUN_RELOAD_INGRESS = 930 RUN_WATCHDOG_HOMEASSISTANT_DOCKER = 15 RUN_WATCHDOG_HOMEASSISTANT_API = 300 @@ -33,28 +34,55 @@ class Tasks(CoreSysAttributes): async def load(self): """Add Tasks to scheduler.""" - self.jobs.add(self.sys_scheduler.register_task( - self._update_addons, RUN_UPDATE_ADDONS)) - self.jobs.add(self.sys_scheduler.register_task( - self._update_supervisor, RUN_UPDATE_SUPERVISOR)) - self.jobs.add(self.sys_scheduler.register_task( - self._update_hassos_cli, RUN_UPDATE_HASSOSCLI)) + # Update + self.jobs.add( + self.sys_scheduler.register_task(self._update_addons, RUN_UPDATE_ADDONS) + ) + self.jobs.add( + self.sys_scheduler.register_task( + self._update_supervisor, RUN_UPDATE_SUPERVISOR + ) + ) + self.jobs.add( + self.sys_scheduler.register_task( + self._update_hassos_cli, RUN_UPDATE_HASSOSCLI + ) + ) - self.jobs.add(self.sys_scheduler.register_task( - self.sys_addons.reload, RUN_RELOAD_ADDONS)) - self.jobs.add(self.sys_scheduler.register_task( - self.sys_updater.reload, RUN_RELOAD_UPDATER)) - self.jobs.add(self.sys_scheduler.register_task( - self.sys_snapshots.reload, RUN_RELOAD_SNAPSHOTS)) - self.jobs.add(self.sys_scheduler.register_task( - self.sys_host.reload, RUN_RELOAD_HOST)) + # Reload + self.jobs.add( + self.sys_scheduler.register_task(self.sys_addons.reload, RUN_RELOAD_ADDONS) + ) + self.jobs.add( + self.sys_scheduler.register_task( + self.sys_updater.reload, RUN_RELOAD_UPDATER + ) + ) + self.jobs.add( + self.sys_scheduler.register_task( + self.sys_snapshots.reload, RUN_RELOAD_SNAPSHOTS + ) + ) + self.jobs.add( + self.sys_scheduler.register_task(self.sys_host.reload, RUN_RELOAD_HOST) + ) + self.jobs.add( + self.sys_scheduler.register_task( + self.sys_ingress.reload, RUN_RELOAD_INGRESS + ) + ) - self.jobs.add(self.sys_scheduler.register_task( - self._watchdog_homeassistant_docker, - RUN_WATCHDOG_HOMEASSISTANT_DOCKER)) - self.jobs.add(self.sys_scheduler.register_task( - self._watchdog_homeassistant_api, - RUN_WATCHDOG_HOMEASSISTANT_API)) + # Watchdog + self.jobs.add( + self.sys_scheduler.register_task( + self._watchdog_homeassistant_docker, RUN_WATCHDOG_HOMEASSISTANT_DOCKER + ) + ) + self.jobs.add( + self.sys_scheduler.register_task( + self._watchdog_homeassistant_api, RUN_WATCHDOG_HOMEASSISTANT_API + ) + ) _LOGGER.info("All core tasks are scheduled") @@ -72,7 +100,8 @@ class Tasks(CoreSysAttributes): tasks.append(addon.update()) else: _LOGGER.warning( - "Add-on %s will be ignored, schema tests fails", addon.slug) + "Add-on %s will be ignored, schema tests fails", addon.slug + ) if tasks: _LOGGER.info("Add-on auto update process %d tasks", len(tasks)) @@ -94,14 +123,18 @@ class Tasks(CoreSysAttributes): async def _watchdog_homeassistant_docker(self): """Check running state of Docker and start if they is close.""" # if Home Assistant is active - if not await self.sys_homeassistant.is_fails() or \ - not self.sys_homeassistant.watchdog or \ - self.sys_homeassistant.error_state: + if ( + not await self.sys_homeassistant.is_fails() + or not self.sys_homeassistant.watchdog + or self.sys_homeassistant.error_state + ): return # if Home Assistant is running - if self.sys_homeassistant.in_progress or \ - await self.sys_homeassistant.is_running(): + if ( + self.sys_homeassistant.in_progress + or await self.sys_homeassistant.is_running() + ): return _LOGGER.warning("Watchdog found a problem with Home Assistant Docker!") @@ -117,17 +150,21 @@ class Tasks(CoreSysAttributes): a delay in our system. """ # If Home-Assistant is active - if not await self.sys_homeassistant.is_fails() or \ - not self.sys_homeassistant.watchdog or \ - self.sys_homeassistant.error_state: + if ( + not await self.sys_homeassistant.is_fails() + or not self.sys_homeassistant.watchdog + or self.sys_homeassistant.error_state + ): return # Init cache data retry_scan = self._cache.get(HASS_WATCHDOG_API, 0) # If Home-Assistant API is up - if self.sys_homeassistant.in_progress or \ - await self.sys_homeassistant.check_api_state(): + if ( + self.sys_homeassistant.in_progress + or await self.sys_homeassistant.check_api_state() + ): return # Look like we run into a problem diff --git a/hassio/utils/__init__.py b/hassio/utils/__init__.py index 2f2fd7714..ec433e58c 100644 --- a/hassio/utils/__init__.py +++ b/hassio/utils/__init__.py @@ -1,8 +1,6 @@ """Tools file for Hass.io.""" -import hashlib import logging import re -import uuid from datetime import datetime _LOGGER = logging.getLogger(__name__) @@ -14,11 +12,6 @@ def convert_to_ascii(raw) -> str: return RE_STRING.sub("", raw.decode()) -def create_token() -> str: - """Create token for API access.""" - return hashlib.sha256(uuid.uuid4().bytes).hexdigest() - - def process_lock(method): """Wrap function with only run once.""" diff --git a/hassio/utils/dt.py b/hassio/utils/dt.py index b57439e06..59992b79f 100644 --- a/hassio/utils/dt.py +++ b/hassio/utils/dt.py @@ -58,6 +58,11 @@ def parse_datetime(dt_str): return datetime(**kws) -def utcnow(): +def utcnow() -> datetime: """Return the current timestamp including timezone.""" return datetime.now(UTC) + + +def utc_from_timestamp(timestamp: float) -> datetime: + """Return a UTC time from a timestamp.""" + return UTC.localize(datetime.utcfromtimestamp(timestamp)) diff --git a/hassio/validate.py b/hassio/validate.py index c6189323f..126ff3547 100644 --- a/hassio/validate.py +++ b/hassio/validate.py @@ -1,36 +1,36 @@ """Validate functions.""" -import uuid import re +import uuid import voluptuous as vol from .const import ( - ATTR_IMAGE, - ATTR_LAST_VERSION, - ATTR_CHANNEL, - ATTR_TIMEZONE, - ATTR_HASSOS, - ATTR_ADDONS_CUSTOM_LIST, - ATTR_PASSWORD, - ATTR_HOMEASSISTANT, - ATTR_HASSIO, - ATTR_BOOT, - ATTR_LAST_BOOT, - ATTR_SSL, - ATTR_PORT, - ATTR_WATCHDOG, - ATTR_WAIT_BOOT, - ATTR_UUID, - ATTR_REFRESH_TOKEN, - ATTR_HASSOS_CLI, ATTR_ACCESS_TOKEN, - CHANNEL_STABLE, + ATTR_ADDONS_CUSTOM_LIST, + ATTR_BOOT, + ATTR_CHANNEL, + ATTR_HASSIO, + ATTR_HASSOS, + ATTR_HASSOS_CLI, + ATTR_HOMEASSISTANT, + ATTR_IMAGE, + ATTR_LAST_BOOT, + ATTR_LAST_VERSION, + ATTR_PASSWORD, + ATTR_PORT, + ATTR_REFRESH_TOKEN, + ATTR_SESSION, + ATTR_SSL, + ATTR_TIMEZONE, + ATTR_UUID, + ATTR_WAIT_BOOT, + ATTR_WATCHDOG, CHANNEL_BETA, CHANNEL_DEV, + CHANNEL_STABLE, ) from .utils.validate import validate_timezone - RE_REPOSITORY = re.compile(r"^(?P[^#]+)(?:#(?P[\w\-]+))?$") NETWORK_PORT = vol.All(vol.Coerce(int), vol.Range(min=1, max=65535)) @@ -139,3 +139,12 @@ SCHEMA_HASSIO_CONFIG = vol.Schema( SCHEMA_AUTH_CONFIG = vol.Schema({SHA256: SHA256}) + + +SCHEMA_INGRESS_CONFIG = vol.Schema( + { + vol.Required(ATTR_SESSION, default=dict): vol.Schema( + {vol.Coerce(str): vol.Coerce(float)} + ) + } +) diff --git a/tests/conftest.py b/tests/conftest.py index 32c1ab798..d30c8dcae 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -11,32 +11,30 @@ from hassio.bootstrap import initialize_coresys @pytest.fixture def docker(): """Mock Docker API.""" - with patch('hassio.coresys.DockerAPI') as mock: + with patch("hassio.coresys.DockerAPI") as mock: yield mock @pytest.fixture async def coresys(loop, docker): """Create a CoreSys Mock.""" - with patch('hassio.bootstrap.initialize_system_data'): + with patch("hassio.bootstrap.initialize_system_data"): coresys_obj = await initialize_coresys() + coresys_obj.ingress.save_data = MagicMock() + yield coresys_obj @pytest.fixture def sys_machine(): """Mock sys_machine.""" - with patch( - 'hassio.coresys.CoreSys.machine', - new_callable=PropertyMock) as mock: + with patch("hassio.coresys.CoreSys.machine", new_callable=PropertyMock) as mock: yield mock @pytest.fixture def sys_supervisor(): - with patch( - 'hassio.coresys.CoreSys.supervisor', - new_callable=PropertyMock) as mock: + with patch("hassio.coresys.CoreSys.supervisor", new_callable=PropertyMock) as mock: mock.return_value = MagicMock() yield MagicMock diff --git a/tests/test_ingress.py b/tests/test_ingress.py new file mode 100644 index 000000000..5b8cf44af --- /dev/null +++ b/tests/test_ingress.py @@ -0,0 +1,22 @@ +"""Test ingress.""" +from datetime import timedelta + +from hassio.utils.dt import utc_from_timestamp + + +def test_session_handling(coresys): + """Create and test session.""" + session = coresys.ingress.create_session() + validate = coresys.ingress.sessions[session] + + assert coresys.ingress.save_data.called + assert session + assert validate + + assert coresys.ingress.validate_session(session) + assert coresys.ingress.sessions[session] != validate + + not_valid = utc_from_timestamp(validate) - timedelta(minutes=20) + coresys.ingress.sessions[session] = not_valid.timestamp() + assert not coresys.ingress.validate_session(session) + assert not coresys.ingress.validate_session("invalid session") From f10b433e1f0aab92966e6ac449541fcb3ef11383 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Fri, 5 Apr 2019 17:49:43 +0200 Subject: [PATCH 13/17] Fix token handling with new secrets (#996) * Fix token handling with new secrets * add schema also to ingress --- hassio/addons/validate.py | 4 ++-- hassio/validate.py | 10 ++++------ 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/hassio/addons/validate.py b/hassio/addons/validate.py index 6d5d83f3a..91477c9e6 100644 --- a/hassio/addons/validate.py +++ b/hassio/addons/validate.py @@ -81,7 +81,7 @@ from ..const import ( STATE_STOPPED, ) from ..discovery.validate import valid_discovery_service -from ..validate import ALSA_DEVICE, DOCKER_PORTS, NETWORK_PORT, SHA256, UUID_MATCH +from ..validate import ALSA_DEVICE, DOCKER_PORTS, NETWORK_PORT, TOKEN, UUID_MATCH _LOGGER = logging.getLogger(__name__) @@ -220,7 +220,7 @@ SCHEMA_ADDON_USER = vol.Schema({ vol.Required(ATTR_VERSION): vol.Coerce(str), vol.Optional(ATTR_IMAGE): vol.Coerce(str), vol.Optional(ATTR_UUID, default=lambda: uuid.uuid4().hex): UUID_MATCH, - vol.Optional(ATTR_ACCESS_TOKEN): SHA256, + vol.Optional(ATTR_ACCESS_TOKEN): TOKEN, vol.Optional(ATTR_INGRESS_TOKEN, default=secrets.token_urlsafe): vol.Coerce(str), vol.Optional(ATTR_OPTIONS, default=dict): dict, vol.Optional(ATTR_AUTO_UPDATE, default=False): vol.Boolean(), diff --git a/hassio/validate.py b/hassio/validate.py index 126ff3547..dc51de046 100644 --- a/hassio/validate.py +++ b/hassio/validate.py @@ -40,6 +40,7 @@ ALSA_DEVICE = vol.Maybe(vol.Match(r"\d+,\d+")) CHANNELS = vol.In([CHANNEL_STABLE, CHANNEL_BETA, CHANNEL_DEV]) UUID_MATCH = vol.Match(r"^[0-9a-f]{32}$") SHA256 = vol.Match(r"^[0-9a-f]{64}$") +TOKEN = vol.Match(r"^[0-9a-f]{32,256}$") def validate_repository(repository): @@ -94,7 +95,7 @@ DOCKER_PORTS = vol.Schema( SCHEMA_HASS_CONFIG = vol.Schema( { vol.Optional(ATTR_UUID, default=lambda: uuid.uuid4().hex): UUID_MATCH, - vol.Optional(ATTR_ACCESS_TOKEN): SHA256, + vol.Optional(ATTR_ACCESS_TOKEN): TOKEN, vol.Optional(ATTR_BOOT, default=True): vol.Boolean(), vol.Inclusive(ATTR_IMAGE, "custom_hass"): DOCKER_IMAGE, vol.Inclusive(ATTR_LAST_VERSION, "custom_hass"): vol.Coerce(str), @@ -142,9 +143,6 @@ SCHEMA_AUTH_CONFIG = vol.Schema({SHA256: SHA256}) SCHEMA_INGRESS_CONFIG = vol.Schema( - { - vol.Required(ATTR_SESSION, default=dict): vol.Schema( - {vol.Coerce(str): vol.Coerce(float)} - ) - } + {vol.Required(ATTR_SESSION, default=dict): vol.Schema({TOKEN: vol.Coerce(float)})}, + extra=vol.REMOVE_EXTRA, ) From c2d705a42af7e9be387a8c5e9c221c87a47ca989 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Sat, 6 Apr 2019 11:24:04 +0200 Subject: [PATCH 14/17] Fix ingress_url with not installed add-ons (#998) Fix ingress_url with not installed add-ons --- API.md | 6 +++--- hassio/addons/addon.py | 3 +-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/API.md b/API.md index 982a60312..f22407a32 100644 --- a/API.md +++ b/API.md @@ -471,7 +471,7 @@ Get all available addons. "available": "bool", "arch": ["armhf", "aarch64", "i386", "amd64"], "machine": "[raspberrypi2, tinker]", - "homeassistant": "min Home Assistant version", + "homeassistant": "null|min Home Assistant version", "repository": "12345678|null", "version": "null|VERSION_INSTALLED", "last_version": "LAST_VERSION", @@ -511,8 +511,8 @@ Get all available addons. "discovery": "['service']", "ip_address": "ip address", "ingress": "bool", - "ingress_entry": "/api/hassio_ingress/slug", - "ingress_url": "/api/hassio_ingress/slug/entry.html" + "ingress_entry": "null|/api/hassio_ingress/slug", + "ingress_url": "null|/api/hassio_ingress/slug/entry.html" } ``` diff --git a/hassio/addons/addon.py b/hassio/addons/addon.py index 7952fbd10..63293eb87 100644 --- a/hassio/addons/addon.py +++ b/hassio/addons/addon.py @@ -391,8 +391,7 @@ class Addon(CoreSysAttributes): @property def ingress_url(self): """Return URL to ingress url.""" - # Use ingress - if not self.with_ingress: + if not self.is_installed or not self.with_ingress: return None webui = f"/api/hassio_ingress/{self.ingress_token}/" From baea84abe6cb9d0100f77337d8ae71d8704f3513 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Sat, 6 Apr 2019 12:03:26 +0200 Subject: [PATCH 15/17] Panel ingress support (#999) --- .../panel/chunk.05bbfb49a092df0b4304.js.gz | Bin 372557 -> 0 bytes .../api/panel/chunk.088b1034e27d00ee9329.js | 1 - .../panel/chunk.088b1034e27d00ee9329.js.gz | Bin 12445 -> 0 bytes .../api/panel/chunk.14e484610f8259469e31.js | 1 + .../panel/chunk.14e484610f8259469e31.js.gz | Bin 0 -> 33146 bytes .../api/panel/chunk.1ac383635811d6c2cb4b.js | 3 +++ ... => chunk.1ac383635811d6c2cb4b.js.LICENSE} | 12 ++++++++++++ .../panel/chunk.1ac383635811d6c2cb4b.js.gz | Bin 0 -> 34749 bytes ....map => chunk.1ac383635811d6c2cb4b.js.map} | 2 +- .../api/panel/chunk.31b41b04602ce627ad98.js | 3 +++ ... => chunk.31b41b04602ce627ad98.js.LICENSE} | 0 .../panel/chunk.31b41b04602ce627ad98.js.gz | Bin 0 -> 79575 bytes ....map => chunk.31b41b04602ce627ad98.js.map} | 2 +- ...936dc.js => chunk.381b1e7d41316cfb583c.js} | 2 +- .../panel/chunk.381b1e7d41316cfb583c.js.gz | Bin 0 -> 3828 bytes .../panel/chunk.75766aa821239c9936dc.js.gz | Bin 3392 -> 0 bytes ...b4304.js => chunk.7589a9f39a552ee63688.js} | 2 +- .../panel/chunk.7589a9f39a552ee63688.js.gz | Bin 0 -> 372554 bytes .../api/panel/chunk.7b2353341ba15ea393c7.js | 1 - .../panel/chunk.7b2353341ba15ea393c7.js.gz | Bin 28428 -> 0 bytes .../api/panel/chunk.8038876231b1b1817795.js | 3 --- .../panel/chunk.8038876231b1b1817795.js.gz | Bin 79817 -> 0 bytes .../api/panel/chunk.8a4a3a3274af0f09d86b.js | 1 + .../panel/chunk.8a4a3a3274af0f09d86b.js.gz | Bin 0 -> 174 bytes .../api/panel/chunk.b74ddf4cacc7d5de8a55.js | 1 - .../panel/chunk.b74ddf4cacc7d5de8a55.js.gz | Bin 174 -> 0 bytes .../api/panel/chunk.d86ead4948c3bb8d56b2.js | 3 --- .../panel/chunk.d86ead4948c3bb8d56b2.js.gz | Bin 33572 -> 0 bytes .../api/panel/chunk.ff45557361d5d6bd46af.js | 1 + .../panel/chunk.ff45557361d5d6bd46af.js.gz | Bin 0 -> 12539 bytes hassio/api/panel/entrypoint.js | 2 +- hassio/api/panel/entrypoint.js.gz | Bin 1203 -> 1321 bytes home-assistant-polymer | 2 +- 33 files changed, 27 insertions(+), 15 deletions(-) delete mode 100644 hassio/api/panel/chunk.05bbfb49a092df0b4304.js.gz delete mode 100644 hassio/api/panel/chunk.088b1034e27d00ee9329.js delete mode 100644 hassio/api/panel/chunk.088b1034e27d00ee9329.js.gz create mode 100644 hassio/api/panel/chunk.14e484610f8259469e31.js create mode 100644 hassio/api/panel/chunk.14e484610f8259469e31.js.gz create mode 100644 hassio/api/panel/chunk.1ac383635811d6c2cb4b.js rename hassio/api/panel/{chunk.d86ead4948c3bb8d56b2.js.LICENSE => chunk.1ac383635811d6c2cb4b.js.LICENSE} (63%) create mode 100644 hassio/api/panel/chunk.1ac383635811d6c2cb4b.js.gz rename hassio/api/panel/{chunk.8038876231b1b1817795.js.map => chunk.1ac383635811d6c2cb4b.js.map} (60%) create mode 100644 hassio/api/panel/chunk.31b41b04602ce627ad98.js rename hassio/api/panel/{chunk.8038876231b1b1817795.js.LICENSE => chunk.31b41b04602ce627ad98.js.LICENSE} (100%) create mode 100644 hassio/api/panel/chunk.31b41b04602ce627ad98.js.gz rename hassio/api/panel/{chunk.d86ead4948c3bb8d56b2.js.map => chunk.31b41b04602ce627ad98.js.map} (60%) rename hassio/api/panel/{chunk.75766aa821239c9936dc.js => chunk.381b1e7d41316cfb583c.js} (58%) create mode 100644 hassio/api/panel/chunk.381b1e7d41316cfb583c.js.gz delete mode 100644 hassio/api/panel/chunk.75766aa821239c9936dc.js.gz rename hassio/api/panel/{chunk.05bbfb49a092df0b4304.js => chunk.7589a9f39a552ee63688.js} (99%) create mode 100644 hassio/api/panel/chunk.7589a9f39a552ee63688.js.gz delete mode 100644 hassio/api/panel/chunk.7b2353341ba15ea393c7.js delete mode 100644 hassio/api/panel/chunk.7b2353341ba15ea393c7.js.gz delete mode 100644 hassio/api/panel/chunk.8038876231b1b1817795.js delete mode 100644 hassio/api/panel/chunk.8038876231b1b1817795.js.gz create mode 100644 hassio/api/panel/chunk.8a4a3a3274af0f09d86b.js create mode 100644 hassio/api/panel/chunk.8a4a3a3274af0f09d86b.js.gz delete mode 100644 hassio/api/panel/chunk.b74ddf4cacc7d5de8a55.js delete mode 100644 hassio/api/panel/chunk.b74ddf4cacc7d5de8a55.js.gz delete mode 100644 hassio/api/panel/chunk.d86ead4948c3bb8d56b2.js delete mode 100644 hassio/api/panel/chunk.d86ead4948c3bb8d56b2.js.gz create mode 100644 hassio/api/panel/chunk.ff45557361d5d6bd46af.js create mode 100644 hassio/api/panel/chunk.ff45557361d5d6bd46af.js.gz diff --git a/hassio/api/panel/chunk.05bbfb49a092df0b4304.js.gz b/hassio/api/panel/chunk.05bbfb49a092df0b4304.js.gz deleted file mode 100644 index 3eec9c68482937897747c30c8feba45741f9aa07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 372557 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

'+(n?e:f(e,!0))+"
\n":"
"+(n?e:f(e,!0))+"
"},u.prototype.blockquote=function(e){return"
\n"+e+"
\n"},u.prototype.html=function(e){return e},u.prototype.heading=function(e,t,n,r){return this.options.headerIds?"'+e+"\n":""+e+"\n"},u.prototype.hr=function(){return this.options.xhtml?"
\n":"
\n"},u.prototype.list=function(e,t,n){var r=t?"ol":"ul";return"<"+r+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+"\n"},u.prototype.listitem=function(e){return"
  • "+e+"
  • \n"},u.prototype.checkbox=function(e){return" "},u.prototype.paragraph=function(e){return"

    "+e+"

    \n"},u.prototype.table=function(e,t){return t&&(t=""+t+""),"\n\n"+e+"\n"+t+"
    \n"},u.prototype.tablerow=function(e){return"\n"+e+"\n"},u.prototype.tablecell=function(e,t){var n=t.header?"th":"td";return(t.align?"<"+n+' align="'+t.align+'">':"<"+n+">")+e+"\n"},u.prototype.strong=function(e){return""+e+""},u.prototype.em=function(e){return""+e+""},u.prototype.codespan=function(e){return""+e+""},u.prototype.br=function(){return this.options.xhtml?"
    ":"
    "},u.prototype.del=function(e){return""+e+""},u.prototype.link=function(e,t,n){if(null===(e=b(this.options.sanitize,this.options.baseUrl,e)))return n;var r='
    "},u.prototype.image=function(e,t,n){if(null===(e=b(this.options.sanitize,this.options.baseUrl,e)))return n;var r=''+n+'":">"},u.prototype.text=function(e){return e},p.prototype.strong=p.prototype.em=p.prototype.codespan=p.prototype.del=p.prototype.text=function(e){return e},p.prototype.link=p.prototype.image=function(e,t,n){return""+n},p.prototype.br=function(){return""},h.parse=function(e,t){return new h(t).parse(e)},h.prototype.parse=function(e){this.inline=new c(e.links,this.options),this.inlineText=new c(e.links,w({},this.options,{renderer:new p})),this.tokens=e.reverse();for(var t="";this.next();)t+=this.tok();return t},h.prototype.next=function(){return this.token=this.tokens.pop()},h.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0},h.prototype.parseText=function(){for(var e=this.token.text;"text"===this.peek().type;)e+="\n"+this.next().text;return this.inline.output(e)},h.prototype.tok=function(){switch(this.token.type){case"space":return"";case"hr":return this.renderer.hr();case"heading":return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,d(this.inlineText.output(this.token.text)),this.slugger);case"code":return this.renderer.code(this.token.text,this.token.lang,this.token.escaped);case"table":var e,t,n,r,i="",o="";for(n="",e=0;e?@[\]^`{|}~]/g,"").replace(/\s/g,"-");if(this.seen.hasOwnProperty(t)){var n=t;do{this.seen[n]++,t=n+"-"+this.seen[n]}while(this.seen.hasOwnProperty(t))}return this.seen[t]=0,t},f.escapeTest=/[&<>"']/,f.escapeReplace=/[&<>"']/g,f.replacements={"&":"&","<":"<",">":">",'"':""","'":"'"},f.escapeTestNoEncode=/[<>"']|&(?!#?\w+;)/,f.escapeReplaceNoEncode=/[<>"']|&(?!#?\w+;)/g;var x={},k=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;function y(){}function w(e){for(var t,n,r=1;r=0&&"\\"===n[i];)r=!r;return r?"|":" |"}).split(/ \|/),r=0;if(n.length>t)n.splice(t);else for(;n.lengthAn error occurred:

    "+f(e.message+"",!0)+"
    ";throw e}}y.exec=y,A.options=A.setOptions=function(e){return w(A.defaults,e),A},A.getDefaults=function(){return{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:new u,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tables:!0,xhtml:!1}},A.defaults=A.getDefaults(),A.Parser=h,A.parser=h.parse,A.Renderer=u,A.TextRenderer=p,A.Lexer=a,A.lexer=a.lex,A.InlineLexer=c,A.inlineLexer=c.output,A.Slugger=g,A.parse=A,"object"===o(t)?e.exports=A:void 0===(i=function(){return A}.call(t,n,t,e))||(e.exports=i)}(this||"undefined"!=typeof window&&window)}).call(this,n(102))},102:function(e,t){function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var r;r=function(){return this}();try{r=r||new Function("return this")()}catch(e){"object"===("undefined"==typeof window?"undefined":n(window))&&(r=window)}e.exports=r},103:function(e,t,n){var r=n(81),i=n(84),o=n(106);for(var s in(t=e.exports=function(e,t){return new o(t).process(e)}).FilterXSS=o,r)t[s]=r[s];for(var s in i)t[s]=i[s];"undefined"!=typeof window&&(window.filterXSS=e.exports),"undefined"!=typeof self&&"undefined"!=typeof DedicatedWorkerGlobalScope&&self instanceof DedicatedWorkerGlobalScope&&(self.filterXSS=e.exports)},104:function(e,t,n){var r=n(82),i=n(105);n(83);function o(e){return null==e}function s(e){(e=function(e){var t={};for(var n in e)t[n]=e[n];return t}(e||{})).whiteList=e.whiteList||r.whiteList,e.onAttr=e.onAttr||r.onAttr,e.onIgnoreAttr=e.onIgnoreAttr||r.onIgnoreAttr,e.safeAttrValue=e.safeAttrValue||r.safeAttrValue,this.options=e}s.prototype.process=function(e){if(!(e=(e=e||"").toString()))return"";var t=this.options,n=t.whiteList,r=t.onAttr,s=t.onIgnoreAttr,a=t.safeAttrValue;return i(e,function(e,t,i,l,c){var u=n[i],p=!1;if(!0===u?p=u:"function"==typeof u?p=u(l):u instanceof RegExp&&(p=u.test(l)),!0!==p&&(p=!1),l=a(i,l)){var h,g={position:t,sourcePosition:e,source:c,isWhite:p};return p?o(h=r(i,l,g))?i+":"+l:h:o(h=s(i,l,g))?void 0:h}})},e.exports=s},105:function(e,t,n){var r=n(83);e.exports=function(e,t){";"!==(e=r.trimRight(e))[e.length-1]&&(e+=";");var n=e.length,i=!1,o=0,s=0,a="";function l(){if(!i){var n=r.trim(e.slice(o,s)),l=n.indexOf(":");if(-1!==l){var c=r.trim(n.slice(0,l)),u=r.trim(n.slice(l+1));if(c){var p=t(o,a.length,c,u,n);p&&(a+=p+"; ")}}}o=s+1}for(;s";var x=function(e){var t=l.spaceIndex(e);if(-1===t)return{html:"",closing:"/"===e[e.length-2]};var n="/"===(e=l.trim(e.slice(t+1,-1)))[e.length-1];return n&&(e=l.trim(e.slice(0,-1))),{html:e,closing:n}}(s),k=n[i],y=a(x.html,function(e,t){var n,r=-1!==l.indexOf(k,e);return c(n=u(i,e,t,r))?r?(t=h(i,e,t,f))?e+'="'+t+'"':e:c(n=p(i,e,t,r))?void 0:n:n});s="<"+i;return y&&(s+=" "+y),x.closing&&(s+=" /"),s+=">"}return c(m=o(i,s,b))?g(s):m},g);return d&&(m=d.remove(m)),m},e.exports=u},58:function(e,t,n){var r=n(82),i=n(104);for(var o in(t=e.exports=function(e,t){return new i(t).process(e)}).FilterCSS=i,r)t[o]=r[o];"undefined"!=typeof window&&(window.filterCSS=e.exports)},59:function(e,t){e.exports={indexOf:function(e,t){var n,r;if(Array.prototype.indexOf)return e.indexOf(t);for(n=0,r=e.length;n/g,p=/"/g,h=/"/g,g=/&#([a-zA-Z0-9]*);?/gim,f=/:?/gim,d=/&newline;?/gim,m=/((j\s*a\s*v\s*a|v\s*b|l\s*i\s*v\s*e)\s*s\s*c\s*r\s*i\s*p\s*t\s*|m\s*o\s*c\s*h\s*a)\:/gi,b=/e\s*x\s*p\s*r\s*e\s*s\s*s\s*i\s*o\s*n\s*\(.*/gi,x=/u\s*r\s*l\s*\(.*/gi;function k(e){return e.replace(p,""")}function y(e){return e.replace(h,'"')}function w(e){return e.replace(g,function(e,t){return"x"===t[0]||"X"===t[0]?String.fromCharCode(parseInt(t.substr(1),16)):String.fromCharCode(parseInt(t,10))})}function v(e){return e.replace(f,":").replace(d," ")}function _(e){for(var t="",n=0,r=e.length;n/g;t.whiteList={a:["target","href","title"],abbr:["title"],address:[],area:["shape","coords","href","alt"],article:[],aside:[],audio:["autoplay","controls","loop","preload","src"],b:[],bdi:["dir"],bdo:["dir"],big:[],blockquote:["cite"],br:[],caption:[],center:[],cite:[],code:[],col:["align","valign","span","width"],colgroup:["align","valign","span","width"],dd:[],del:["datetime"],details:["open"],div:[],dl:[],dt:[],em:[],font:["color","size","face"],footer:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],header:[],hr:[],i:[],img:["src","alt","title","width","height"],ins:["datetime"],li:[],mark:[],nav:[],ol:[],p:[],pre:[],s:[],section:[],small:[],span:[],sub:[],sup:[],strong:[],table:["width","border","align","valign"],tbody:["align","valign"],td:["width","rowspan","colspan","align","valign"],tfoot:["align","valign"],th:["width","rowspan","colspan","align","valign"],thead:["align","valign"],tr:["rowspan","align","valign"],tt:[],u:[],ul:[],video:["autoplay","controls","loop","preload","src","height","width"]},t.getDefaultWhiteList=s,t.onTag=function(e,t,n){},t.onIgnoreTag=function(e,t,n){},t.onTagAttr=function(e,t,n){},t.onIgnoreTagAttr=function(e,t,n){},t.safeAttrValue=function(e,t,n,r){if(n=A(n),"href"===t||"src"===t){if("#"===(n=o.trim(n)))return"#";if("http://"!==n.substr(0,7)&&"https://"!==n.substr(0,8)&&"mailto:"!==n.substr(0,7)&&"tel:"!==n.substr(0,4)&&"#"!==n[0]&&"/"!==n[0])return""}else if("background"===t){if(m.lastIndex=0,m.test(n))return""}else if("style"===t){if(b.lastIndex=0,b.test(n))return"";if(x.lastIndex=0,x.test(n)&&(m.lastIndex=0,m.test(n)))return"";!1!==r&&(n=(r=r||a).process(n))}return n=S(n)},t.escapeHtml=l,t.escapeQuote=k,t.unescapeQuote=y,t.escapeHtmlEntities=w,t.escapeDangerHtml5Entities=v,t.clearNonPrintableCharacter=_,t.friendlyAttrValue=A,t.escapeAttrValue=S,t.onIgnoreTagStripAll=function(){return""},t.StripTagBody=function(e,t){"function"!=typeof t&&(t=function(){});var n=!Array.isArray(e),r=[],i=!1;return{onIgnoreTag:function(s,a,l){if(function(t){return!!n||-1!==o.indexOf(e,t)}(s)){if(l.isClosing){var c="[/removed]",u=l.position+c.length;return r.push([!1!==i?i:l.position,u]),i=!1,c}return i||(i=l.position),"[removed]"}return t(s,a,l)},remove:function(e){var t="",n=0;return o.forEach(r,function(r){t+=e.slice(n,r[0]),n=r[1]}),t+=e.slice(n)}}},t.stripCommentTag=function(e){return e.replace($,"")},t.stripBlankChar=function(e){var t=e.split("");return(t=t.filter(function(e){var t=e.charCodeAt(0);return!(127===t||t<=31&&10!==t&&13!==t)})).join("")},t.cssFilter=a,t.getDefaultCSSWhiteList=i},82:function(e,t){function n(){var e={"align-content":!1,"align-items":!1,"align-self":!1,"alignment-adjust":!1,"alignment-baseline":!1,all:!1,"anchor-point":!1,animation:!1,"animation-delay":!1,"animation-direction":!1,"animation-duration":!1,"animation-fill-mode":!1,"animation-iteration-count":!1,"animation-name":!1,"animation-play-state":!1,"animation-timing-function":!1,azimuth:!1,"backface-visibility":!1,background:!0,"background-attachment":!0,"background-clip":!0,"background-color":!0,"background-image":!0,"background-origin":!0,"background-position":!0,"background-repeat":!0,"background-size":!0,"baseline-shift":!1,binding:!1,bleed:!1,"bookmark-label":!1,"bookmark-level":!1,"bookmark-state":!1,border:!0,"border-bottom":!0,"border-bottom-color":!0,"border-bottom-left-radius":!0,"border-bottom-right-radius":!0,"border-bottom-style":!0,"border-bottom-width":!0,"border-collapse":!0,"border-color":!0,"border-image":!0,"border-image-outset":!0,"border-image-repeat":!0,"border-image-slice":!0,"border-image-source":!0,"border-image-width":!0,"border-left":!0,"border-left-color":!0,"border-left-style":!0,"border-left-width":!0,"border-radius":!0,"border-right":!0,"border-right-color":!0,"border-right-style":!0,"border-right-width":!0,"border-spacing":!0,"border-style":!0,"border-top":!0,"border-top-color":!0,"border-top-left-radius":!0,"border-top-right-radius":!0,"border-top-style":!0,"border-top-width":!0,"border-width":!0,bottom:!1,"box-decoration-break":!0,"box-shadow":!0,"box-sizing":!0,"box-snap":!0,"box-suppress":!0,"break-after":!0,"break-before":!0,"break-inside":!0,"caption-side":!1,chains:!1,clear:!0,clip:!1,"clip-path":!1,"clip-rule":!1,color:!0,"color-interpolation-filters":!0,"column-count":!1,"column-fill":!1,"column-gap":!1,"column-rule":!1,"column-rule-color":!1,"column-rule-style":!1,"column-rule-width":!1,"column-span":!1,"column-width":!1,columns:!1,contain:!1,content:!1,"counter-increment":!1,"counter-reset":!1,"counter-set":!1,crop:!1,cue:!1,"cue-after":!1,"cue-before":!1,cursor:!1,direction:!1,display:!0,"display-inside":!0,"display-list":!0,"display-outside":!0,"dominant-baseline":!1,elevation:!1,"empty-cells":!1,filter:!1,flex:!1,"flex-basis":!1,"flex-direction":!1,"flex-flow":!1,"flex-grow":!1,"flex-shrink":!1,"flex-wrap":!1,float:!1,"float-offset":!1,"flood-color":!1,"flood-opacity":!1,"flow-from":!1,"flow-into":!1,font:!0,"font-family":!0,"font-feature-settings":!0,"font-kerning":!0,"font-language-override":!0,"font-size":!0,"font-size-adjust":!0,"font-stretch":!0,"font-style":!0,"font-synthesis":!0,"font-variant":!0,"font-variant-alternates":!0,"font-variant-caps":!0,"font-variant-east-asian":!0,"font-variant-ligatures":!0,"font-variant-numeric":!0,"font-variant-position":!0,"font-weight":!0,grid:!1,"grid-area":!1,"grid-auto-columns":!1,"grid-auto-flow":!1,"grid-auto-rows":!1,"grid-column":!1,"grid-column-end":!1,"grid-column-start":!1,"grid-row":!1,"grid-row-end":!1,"grid-row-start":!1,"grid-template":!1,"grid-template-areas":!1,"grid-template-columns":!1,"grid-template-rows":!1,"hanging-punctuation":!1,height:!0,hyphens:!1,icon:!1,"image-orientation":!1,"image-resolution":!1,"ime-mode":!1,"initial-letters":!1,"inline-box-align":!1,"justify-content":!1,"justify-items":!1,"justify-self":!1,left:!1,"letter-spacing":!0,"lighting-color":!0,"line-box-contain":!1,"line-break":!1,"line-grid":!1,"line-height":!1,"line-snap":!1,"line-stacking":!1,"line-stacking-ruby":!1,"line-stacking-shift":!1,"line-stacking-strategy":!1,"list-style":!0,"list-style-image":!0,"list-style-position":!0,"list-style-type":!0,margin:!0,"margin-bottom":!0,"margin-left":!0,"margin-right":!0,"margin-top":!0,"marker-offset":!1,"marker-side":!1,marks:!1,mask:!1,"mask-box":!1,"mask-box-outset":!1,"mask-box-repeat":!1,"mask-box-slice":!1,"mask-box-source":!1,"mask-box-width":!1,"mask-clip":!1,"mask-image":!1,"mask-origin":!1,"mask-position":!1,"mask-repeat":!1,"mask-size":!1,"mask-source-type":!1,"mask-type":!1,"max-height":!0,"max-lines":!1,"max-width":!0,"min-height":!0,"min-width":!0,"move-to":!1,"nav-down":!1,"nav-index":!1,"nav-left":!1,"nav-right":!1,"nav-up":!1,"object-fit":!1,"object-position":!1,opacity:!1,order:!1,orphans:!1,outline:!1,"outline-color":!1,"outline-offset":!1,"outline-style":!1,"outline-width":!1,overflow:!1,"overflow-wrap":!1,"overflow-x":!1,"overflow-y":!1,padding:!0,"padding-bottom":!0,"padding-left":!0,"padding-right":!0,"padding-top":!0,page:!1,"page-break-after":!1,"page-break-before":!1,"page-break-inside":!1,"page-policy":!1,pause:!1,"pause-after":!1,"pause-before":!1,perspective:!1,"perspective-origin":!1,pitch:!1,"pitch-range":!1,"play-during":!1,position:!1,"presentation-level":!1,quotes:!1,"region-fragment":!1,resize:!1,rest:!1,"rest-after":!1,"rest-before":!1,richness:!1,right:!1,rotation:!1,"rotation-point":!1,"ruby-align":!1,"ruby-merge":!1,"ruby-position":!1,"shape-image-threshold":!1,"shape-outside":!1,"shape-margin":!1,size:!1,speak:!1,"speak-as":!1,"speak-header":!1,"speak-numeral":!1,"speak-punctuation":!1,"speech-rate":!1,stress:!1,"string-set":!1,"tab-size":!1,"table-layout":!1,"text-align":!0,"text-align-last":!0,"text-combine-upright":!0,"text-decoration":!0,"text-decoration-color":!0,"text-decoration-line":!0,"text-decoration-skip":!0,"text-decoration-style":!0,"text-emphasis":!0,"text-emphasis-color":!0,"text-emphasis-position":!0,"text-emphasis-style":!0,"text-height":!0,"text-indent":!0,"text-justify":!0,"text-orientation":!0,"text-overflow":!0,"text-shadow":!0,"text-space-collapse":!0,"text-transform":!0,"text-underline-position":!0,"text-wrap":!0,top:!1,transform:!1,"transform-origin":!1,"transform-style":!1,transition:!1,"transition-delay":!1,"transition-duration":!1,"transition-property":!1,"transition-timing-function":!1,"unicode-bidi":!1,"vertical-align":!1,visibility:!1,"voice-balance":!1,"voice-duration":!1,"voice-family":!1,"voice-pitch":!1,"voice-range":!1,"voice-rate":!1,"voice-stress":!1,"voice-volume":!1,volume:!1,"white-space":!1,widows:!1,width:!0,"will-change":!1,"word-break":!0,"word-spacing":!0,"word-wrap":!0,"wrap-flow":!1,"wrap-through":!1,"writing-mode":!1,"z-index":!1};return e}var r=/javascript\s*\:/gim;t.whiteList=n(),t.getDefaultWhiteList=n,t.onAttr=function(e,t,n){},t.onIgnoreAttr=function(e,t,n){},t.safeAttrValue=function(e,t){return r.test(t)?"":t}},83:function(e,t){e.exports={indexOf:function(e,t){var n,r;if(Array.prototype.indexOf)return e.indexOf(t);for(n=0,r=e.length;n0;t--){var n=e[t];if(" "!==n)return"="===n?t:-1}}function c(e){return function(e){return'"'===e[0]&&'"'===e[e.length-1]||"'"===e[0]&&"'"===e[e.length-1]}(e)?e.substr(1,e.length-2):e}t.parseTag=function(e,t,n){var r="",s=0,a=!1,l=!1,c=0,u=e.length,p="",h="";for(c=0;c"===g){r+=n(e.slice(s,a)),p=i(h=e.slice(a,c+1)),r+=t(a,r.length,p,h,o(h)),s=c+1,a=!1;continue}if(('"'===g||"'"===g)&&"="===e.charAt(c-1)){l=g;continue}}else if(g===l){l=!1;continue}}return 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 diff --git a/hassio/api/panel/chunk.14e484610f8259469e31.js b/hassio/api/panel/chunk.14e484610f8259469e31.js new file mode 100644 index 000000000..976c7213e --- /dev/null +++ b/hassio/api/panel/chunk.14e484610f8259469e31.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[3],{1:function(e,t,n){"use strict";n.r(t);n(71);var o=n(4),r=n(7),a=(n(33),n(94),n(20)),i=(n(26),function(e,t,n,o){o=o||{},n=null==n?{}:n;var r=new Event(t,{bubbles:void 0===o.bubbles||o.bubbles,cancelable:Boolean(o.cancelable),composed:void 0===o.composed||o.composed});return r.detail=n,e.dispatchEvent(r),r});function s(e){return(s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function c(){var e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(["\n \n "]);return c=function(){return e},e}function l(e){return(l=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function p(e,t){return(p=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function d(e){var t,n=m(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var o={kind:"field"===e.kind?"field":"method",key:n,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(o.decorators=e.decorators),"field"===e.kind&&(o.initializer=e.value),o}function f(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function h(e){return e.decorators&&e.decorators.length}function b(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function y(e,t){var n=e[t];if(void 0!==n&&"function"!=typeof n)throw new TypeError("Expected '"+t+"' to be a function");return n}function m(e){var t=function(e,t){if("object"!==s(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,t||"default");if("object"!==s(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===s(t)?t:String(t)}!function(e,t,n,o){var r=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(n){t.forEach(function(t){t.kind===n&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var n=e.prototype;["method","field"].forEach(function(o){t.forEach(function(t){var r=t.placement;if(t.kind===o&&("static"===r||"prototype"===r)){var a="static"===r?e:n;this.defineClassElement(a,t)}},this)},this)},defineClassElement:function(e,t){var n=t.descriptor;if("field"===t.kind){var o=t.initializer;n={enumerable:n.enumerable,writable:n.writable,configurable:n.configurable,value:void 0===o?void 0:o.call(e)}}Object.defineProperty(e,t.key,n)},decorateClass:function(e,t){var n=[],o=[],r={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,r)},this),e.forEach(function(e){if(!h(e))return n.push(e);var t=this.decorateElement(e,r);n.push(t.element),n.push.apply(n,t.extras),o.push.apply(o,t.finishers)},this),!t)return{elements:n,finishers:o};var a=this.decorateConstructor(n,t);return o.push.apply(o,a.finishers),a.finishers=o,a},addElementPlacement:function(e,t,n){var o=t[e.placement];if(!n&&-1!==o.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");o.push(e.key)},decorateElement:function(e,t){for(var n=[],o=[],r=e.decorators,a=r.length-1;a>=0;a--){var i=t[e.placement];i.splice(i.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,r[a])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&o.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;o--){var r=this.fromClassDescriptor(e),a=this.toClassDescriptor((0,t[o])(r)||r);if(void 0!==a.finisher&&n.push(a.finisher),void 0!==a.elements){e=a.elements;for(var i=0;i\n "]);return R=function(){return e},e}function z(){var e=H(["\n \n "]);return z=function(){return e},e}function I(){var e=H(["\n \n ",'\n \n
    \n \n
    \n ']);return I=function(){return e},e}function H(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function L(e){return(L=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function N(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function F(e,t){return(F=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function B(e){var t,n=W(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var o={kind:"field"===e.kind?"field":"method",key:n,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(o.decorators=e.decorators),"field"===e.kind&&(o.initializer=e.value),o}function M(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function U(e){return e.decorators&&e.decorators.length}function q(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function $(e,t){var n=e[t];if(void 0!==n&&"function"!=typeof n)throw new TypeError("Expected '"+t+"' to be a function");return n}function W(e){var t=function(e,t){if("object"!==A(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,t||"default");if("object"!==A(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===A(t)?t:String(t)}(function(e,t,n,o){var r=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(n){t.forEach(function(t){t.kind===n&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var n=e.prototype;["method","field"].forEach(function(o){t.forEach(function(t){var r=t.placement;if(t.kind===o&&("static"===r||"prototype"===r)){var a="static"===r?e:n;this.defineClassElement(a,t)}},this)},this)},defineClassElement:function(e,t){var n=t.descriptor;if("field"===t.kind){var o=t.initializer;n={enumerable:n.enumerable,writable:n.writable,configurable:n.configurable,value:void 0===o?void 0:o.call(e)}}Object.defineProperty(e,t.key,n)},decorateClass:function(e,t){var n=[],o=[],r={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,r)},this),e.forEach(function(e){if(!U(e))return n.push(e);var t=this.decorateElement(e,r);n.push(t.element),n.push.apply(n,t.extras),o.push.apply(o,t.finishers)},this),!t)return{elements:n,finishers:o};var a=this.decorateConstructor(n,t);return o.push.apply(o,a.finishers),a.finishers=o,a},addElementPlacement:function(e,t,n){var o=t[e.placement];if(!n&&-1!==o.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");o.push(e.key)},decorateElement:function(e,t){for(var n=[],o=[],r=e.decorators,a=r.length-1;a>=0;a--){var i=t[e.placement];i.splice(i.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,r[a])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&o.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;o--){var r=this.fromClassDescriptor(e),a=this.toClassDescriptor((0,t[o])(r)||r);if(void 0!==a.finisher&&n.push(a.finisher),void 0!==a.elements){e=a.elements;for(var i=0;i\n \n\n \n"),document.head.appendChild(J.content);n(77);var G=n(10);function Y(e){return(Y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function V(e,t){for(var n=0;n=0?t:null}:null}),e._resize();for(var t=document.createTreeWalker(e,1,null,!1);t.nextNode();){var n=t.currentNode;"A"===n.tagName&&n.host!==document.location.host?n.target="_blank":"IMG"===n.tagName&&n.addEventListener("load",e._resize)}}else 2===e._scriptLoaded&&(e.innerText=e.content)}))}}])&&te(o.prototype,a),i&&te(o,i),t}();customElements.define("ha-markdown",ce);n(112);var le=n(70),ue=n(6),pe=n(79),de={getTabbableNodes:function(e){var t=[];return this._collectTabbableNodes(e,t)?pe.a._sortByTabIndex(t):t},_collectTabbableNodes:function(e,t){if(e.nodeType!==Node.ELEMENT_NODE||!pe.a._isVisible(e))return!1;var n,o=e,r=pe.a._normalizedTabIndex(o),a=r>0;r>=0&&t.push(o),n="content"===o.localName||"slot"===o.localName?Object(ue.a)(o).getDistributedNodes():Object(ue.a)(o.shadowRoot||o.root||o).children;for(var i=0;i\n ha-paper-dialog {\n min-width: 350px;\n font-size: 14px;\n border-radius: 2px;\n }\n app-toolbar {\n margin: 0;\n padding: 0 16px;\n color: var(--primary-text-color);\n background-color: var(--secondary-background-color);\n }\n app-toolbar [main-title] {\n margin-left: 16px;\n }\n paper-checkbox {\n display: block;\n margin: 4px;\n }\n @media all and (max-width: 450px), all and (max-height: 500px) {\n ha-paper-dialog {\n max-height: 100%;\n }\n ha-paper-dialog::before {\n content: "";\n position: fixed;\n z-index: -1;\n top: 0px;\n left: 0px;\n right: 0px;\n bottom: 0px;\n background-color: inherit;\n }\n app-toolbar {\n color: var(--text-primary-color);\n background-color: var(--primary-color);\n }\n }\n \n \n \n \n
    [[title]]
    \n
    \n \n \n \n
    \n ']);return ke=function(){return e},e}function Oe(e,t){for(var n=0;n\n :host,\n paper-card,\n paper-dropdown-menu {\n display: block;\n }\n .errors {\n color: var(--google-red-500);\n margin-bottom: 16px;\n }\n paper-item {\n width: 450px;\n }\n .card-actions {\n text-align: right;\n }\n \n \n
    \n \n\n \n \n \n \n \n \n \n \n \n \n
    \n
    \n Save\n
    \n
    \n '],['\n \n \n
    \n \n\n \n \n \n \n \n \n \n \n \n \n
    \n
    \n Save\n
    \n
    \n ']);return Ee=function(){return e},e}function Ce(e,t){for(var n=0;n\n .container {\n position: relative;\n display: inline-block;\n }\n\n mwc-button {\n transition: all 1s;\n }\n\n .success mwc-button {\n --mdc-theme-primary: white;\n background-color: var(--google-green-500);\n transition: none;\n }\n\n .error mwc-button {\n --mdc-theme-primary: white;\n background-color: var(--google-red-500);\n transition: none;\n }\n\n .progress {\n @apply --layout;\n @apply --layout-center-center;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n }\n \n
    \n \n \n \n \n
    \n ']);return Ie=function(){return e},e}function He(e,t){for(var n=0;n\n ']);return $e=function(){return e},e}function We(e,t){return!t||"object"!==Ue(t)&&"function"!=typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):t}function Je(e){return(Je=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function Ge(e,t){for(var n=0;n\n :host {\n display: block;\n }\n paper-card {\n display: block;\n }\n .card-actions {\n @apply --layout;\n @apply --layout-justified;\n }\n .errors {\n color: var(--google-red-500);\n margin-bottom: 16px;\n }\n iron-autogrow-textarea {\n width: 100%;\n font-family: monospace;\n }\n .syntaxerror {\n color: var(--google-red-500);\n }\n \n \n
    \n \n \n
    \n
    \n Reset to defaults\n Save\n
    \n
    \n ']);return Qe=function(){return e},e}function Ze(e,t){for(var n=0;n bit more top margin */\n font-weight: 500;\n overflow: hidden;\n text-transform: uppercase;\n text-overflow: ellipsis;\n transition: background-color 0.3s ease-in-out;\n text-transform: var(--ha-label-badge-label-text-transform, uppercase);\n }\n .label-badge .label.big span {\n font-size: 90%;\n padding: 10% 12% 7% 12%; /* push smaller text a bit down to center vertically */\n }\n .badge-container .title {\n margin-top: 1em;\n font-size: var(--ha-label-badge-title-font-size, 0.9em);\n width: var(--ha-label-badge-title-width, 5em);\n font-weight: var(--ha-label-badge-title-font-weight, 400);\n overflow: hidden;\n text-overflow: ellipsis;\n line-height: normal;\n }\n "]);return bt=function(){return e},e}function yt(){var e=kt(['\n
    ',"
    \n "]);return yt=function(){return e},e}function mt(){var e=kt(['\n \n ',"\n \n "]);return mt=function(){return e},e}function vt(){var e=kt(["\n ","\n "]);return vt=function(){return e},e}function gt(){var e=kt(['\n \n ']);return gt=function(){return e},e}function wt(){var e=kt(['\n
    \n
    \n \n ',"\n ","\n
    \n ","\n
    \n ","\n \n "]);return wt=function(){return e},e}function kt(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function Ot(e,t){for(var n=0;n4)}),!this.icon||this.value||this.image?"":Object(a.d)(gt(),this.icon),this.value&&!this.image?Object(a.d)(vt(),this.value):"",this.label?Object(a.d)(mt(),Object(rt.a)({label:!0,big:this.label.length>5}),this.label):"",this.description?Object(a.d)(yt(),this.description):"")}},{key:"updated",value:function(e){_t(St(t.prototype),"updated",this).call(this,e),e.has("image")&&(this.shadowRoot.getElementById("badge").style.backgroundImage=this.image?"url(".concat(this.image,")"):"")}}])&&Ot(n.prototype,o),r&&Ot(n,r),t}();customElements.define("ha-label-badge",xt);var Et=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];n?history.replaceState(null,"",t):history.pushState(null,"",t),i(window,"location-changed",{replace:n})},Ct=[60,60,24,7],Tt=["second","minute","hour","day"];function At(e){return(At="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Dt(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},r=((o.compareTime||new Date).getTime()-e.getTime())/1e3,a=r>=0?"past":"future";r=Math.abs(r);for(var i=0;i\n iron-icon {\n margin-right: 16px;\n margin-top: 16px;\n float: left;\n color: var(--secondary-text-color);\n }\n iron-icon.update {\n color: var(--paper-orange-400);\n }\n iron-icon.running,\n iron-icon.installed {\n color: var(--paper-green-400);\n }\n iron-icon.hassupdate,\n iron-icon.snapshot {\n color: var(--paper-item-icon-color);\n }\n iron-icon.not_available {\n color: var(--google-red-500);\n }\n .title {\n color: var(--primary-text-color);\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n .addition {\n color: var(--secondary-text-color);\n overflow: hidden;\n position: relative;\n height: 2.4em;\n line-height: 1.2em;\n }\n ha-relative-time {\n display: block;\n }\n \n \n
    \n
    [[title]]
    \n
    \n \n \n \n
    \n
    \n '],['\n \n \n
    \n
    [[title]]
    \n
    \n \n \n \n
    \n
    \n ']);return Jt=function(){return e},e}function Gt(e,t){for(var n=0;n\n :host {\n display: block;\n }\n paper-card {\n display: block;\n margin-bottom: 16px;\n }\n paper-card.warning {\n background-color: var(--google-red-500);\n color: white;\n --paper-card-header-color: white;\n }\n paper-card.warning mwc-button {\n color: white !important;\n }\n .warning {\n color: var(--google-red-500);\n }\n .addon-header {\n @apply --paper-font-headline;\n }\n .light-color {\n color: var(--secondary-text-color);\n }\n .addon-version {\n float: right;\n font-size: 15px;\n vertical-align: middle;\n }\n .description {\n margin-bottom: 16px;\n }\n .logo img {\n max-height: 60px;\n margin: 16px 0;\n display: block;\n }\n .state div {\n width: 150px;\n display: inline-block;\n }\n paper-toggle-button {\n display: inline;\n }\n iron-icon.running {\n color: var(--paper-green-400);\n }\n iron-icon.stopped {\n color: var(--google-red-300);\n }\n ha-call-api-button {\n font-weight: 500;\n color: var(--primary-color);\n }\n .right {\n float: right;\n }\n ha-markdown img {\n max-width: 100%;\n }\n .red {\n --ha-label-badge-color: var(--label-badge-red, #df4c1e);\n }\n .blue {\n --ha-label-badge-color: var(--label-badge-blue, #039be5);\n }\n .green {\n --ha-label-badge-color: var(--label-badge-green, #0da035);\n }\n .yellow {\n --ha-label-badge-color: var(--label-badge-yellow, #f4b400);\n }\n .security {\n margin-bottom: 16px;\n }\n .security h3 {\n margin-bottom: 8px;\n font-weight: normal;\n }\n .security ha-label-badge {\n cursor: pointer;\n margin-right: 4px;\n --iron-icon-height: 45px;\n }\n \n\n \n\n \n
    \n
    \n [[addon.name]]\n
    \n \n \n
    \n
    \n
    \n \n \n
    \n

    Addon Security Rating

    \n
    \n Hass.io provides a security rating to each of the add-ons, which indicates the risks involved when using this add-on. The more access an addon requires on your system, the lower the score, thus raising the possible security risks.\n
    \n \n \n \n \n \n \n \n \n \n \n
    \n \n
    \n
    \n \n \n Open web UI\n \n \n \n
    \n \n \n ']);return Zt=function(){return e},e}function en(e,t){for(var n=0;n4?"green":e>2?"yellow":"red"}},{key:"startOnBootToggled",value:function(){var e={boot:"auto"===this.addon.boot?"manual":"auto"};this.hass.callApi("POST","hassio/addons/".concat(this.addonSlug,"/options"),e)}},{key:"autoUpdateToggled",value:function(){var e={auto_update:!this.addon.auto_update};this.hass.callApi("POST","hassio/addons/".concat(this.addonSlug,"/options"),e)}},{key:"protectionToggled",value:function(){var e={protected:!this.addon.protected};this.hass.callApi("POST","hassio/addons/".concat(this.addonSlug,"/security"),e),this.set("addon.protected",!this.addon.protected)}},{key:"showMoreInfo",value:function(e){var t=e.target.getAttribute("id");this.fire("hassio-markdown-dialog",{title:rn[t].title,content:rn[t].description})}},{key:"openChangelog",value:function(){var e=this;this.hass.callApi("get","hassio/addons/".concat(this.addonSlug,"/changelog")).then(function(e){return e},function(){return"Error getting changelog"}).then(function(t){e.fire("hassio-markdown-dialog",{title:"Changelog",content:t})})}},{key:"_unistallClicked",value:function(){var e=this;if(confirm("Are you sure you want to uninstall this add-on?")){var t="hassio/addons/".concat(this.addonSlug,"/uninstall"),n={path:t};this.hass.callApi("post",t).then(function(e){n.success=!0,n.response=e},function(e){n.success=!1,n.response=e}).then(function(){e.fire("hass-api-called",n)})}}}])&&en(n.prototype,a),i&&en(n,i),t}();function sn(){var e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(["\n \n"]);return sn=function(){return e},e}customElements.define("hassio-addon-info",an);var cn=Object(o.a)(sn());function ln(e){for(var t,n=document.createElement("pre"),o=/\033(?:\[(.*?)[@-~]|\].*?(?:\007|\033\\))/g,r=0,a={bold:!1,italic:!1,underline:!1,strikethrough:!1,foregroundColor:null,backgroundColor:null},i=function(e){var t=document.createElement("span");a.bold&&t.classList.add("bold"),a.italic&&t.classList.add("italic"),a.underline&&t.classList.add("underline"),a.strikethrough&&t.classList.add("strikethrough"),null!==a.foregroundColor&&t.classList.add("fg-".concat(a.foregroundColor)),null!==a.backgroundColor&&t.classList.add("bg-".concat(a.backgroundColor)),t.appendChild(document.createTextNode(e)),n.appendChild(t)};null!==(t=o.exec(e));){var s=t.index;if(i(e.substring(r,s)),r=s+t[0].length,void 0!==t[1]){var c=!0,l=!1,u=void 0;try{for(var p,d=t[1].split(";")[Symbol.iterator]();!(c=(p=d.next()).done);c=!0){var f=p.value;switch(parseInt(f)){case 0:a.bold=!1,a.italic=!1,a.underline=!1,a.strikethrough=!1,a.foregroundColor=null,a.backgroundColor=null;break;case 1:a.bold=!0;break;case 3:a.italic=!0;break;case 4:a.underline=!0;break;case 9:a.strikethrough=!0;break;case 22:a.bold=!1;break;case 23:a.italic=!1;break;case 24:a.underline=!1;break;case 29:a.strikethrough=!1;break;case 30:a.foregroundColor=null;break;case 31:a.foregroundColor="red";break;case 32:a.foregroundColor="green";break;case 33:a.foregroundColor="yellow";break;case 34:a.foregroundColor="blue";break;case 35:a.foregroundColor="magenta";break;case 36:a.foregroundColor="cyan";break;case 37:a.foregroundColor="white";break;case 39:a.foregroundColor=null;break;case 40:a.backgroundColor="black";break;case 41:a.backgroundColor="red";break;case 42:a.backgroundColor="green";break;case 43:a.backgroundColor="yellow";break;case 44:a.backgroundColor="blue";break;case 45:a.backgroundColor="magenta";break;case 46:a.backgroundColor="cyan";break;case 47:a.backgroundColor="white";break;case 49:a.backgroundColor=null}}}catch(e){l=!0,u=e}finally{try{c||null==d.return||d.return()}finally{if(l)throw u}}}}return i(e.substring(r)),n}function un(e){return(un="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function pn(){var e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n \n ','\n \n
    \n
    \n Refresh\n
    \n
    \n ']);return pn=function(){return e},e}function dn(e,t){for(var n=0;n\n :host {\n display: block;\n }\n paper-card {\n display: block;\n }\n .errors {\n color: var(--google-red-500);\n margin-bottom: 16px;\n }\n .card-actions {\n @apply --layout;\n @apply --layout-justified;\n }\n \n \n
    \n \n\n \n \n \n \n \n \n \n \n
    ContainerHost
    \n
    \n
    \n Reset to defaults\n Save\n
    \n
    \n ']);return vn=function(){return e},e}function gn(e,t){for(var n=0;n\n :host {\n color: var(--primary-text-color);\n --paper-card-header-color: var(--primary-text-color);\n }\n .content {\n padding: 24px 0 32px;\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n hassio-addon-info,\n hassio-addon-network,\n hassio-addon-audio,\n hassio-addon-config {\n margin-bottom: 24px;\n width: 600px;\n }\n hassio-addon-logs {\n max-width: calc(100% - 8px);\n min-width: 600px;\n }\n @media only screen and (max-width: 600px) {\n hassio-addon-info,\n hassio-addon-network,\n hassio-addon-audio,\n hassio-addon-config,\n hassio-addon-logs {\n max-width: 100%;\n min-width: 100%;\n }\n }\n \n \n \n \n \n \n \n
    Hass.io: add-on details
    \n
    \n
    \n
    \n \n\n \n
    \n
    \n\n \n ']);return Sn=function(){return e},e}function Pn(e,t){for(var n=0;n\n "]);return Fn=function(){return e},e}function Bn(){var e=Un(["\n \n "]);return Bn=function(){return e},e}function Mn(){var e=Un(['\n
    \n ',"\n\n
    ",'
    \n \n
    \n
    \n ']);return Mn=function(){return e},e}function Un(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function qn(e){return(qn=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function $n(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function Wn(e,t){return(Wn=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function Jn(e){var t,n=Kn(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var o={kind:"field"===e.kind?"field":"method",key:n,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(o.decorators=e.decorators),"field"===e.kind&&(o.initializer=e.value),o}function Gn(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function Yn(e){return e.decorators&&e.decorators.length}function Vn(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function Xn(e,t){var n=e[t];if(void 0!==n&&"function"!=typeof n)throw new TypeError("Expected '"+t+"' to be a function");return n}function Kn(e){var t=function(e,t){if("object"!==Ln(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,t||"default");if("object"!==Ln(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Ln(t)?t:String(t)}!function(e,t,n,o){var r=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(n){t.forEach(function(t){t.kind===n&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var n=e.prototype;["method","field"].forEach(function(o){t.forEach(function(t){var r=t.placement;if(t.kind===o&&("static"===r||"prototype"===r)){var a="static"===r?e:n;this.defineClassElement(a,t)}},this)},this)},defineClassElement:function(e,t){var n=t.descriptor;if("field"===t.kind){var o=t.initializer;n={enumerable:n.enumerable,writable:n.writable,configurable:n.configurable,value:void 0===o?void 0:o.call(e)}}Object.defineProperty(e,t.key,n)},decorateClass:function(e,t){var n=[],o=[],r={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,r)},this),e.forEach(function(e){if(!Yn(e))return n.push(e);var t=this.decorateElement(e,r);n.push(t.element),n.push.apply(n,t.extras),o.push.apply(o,t.finishers)},this),!t)return{elements:n,finishers:o};var a=this.decorateConstructor(n,t);return o.push.apply(o,a.finishers),a.finishers=o,a},addElementPlacement:function(e,t,n){var o=t[e.placement];if(!n&&-1!==o.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");o.push(e.key)},decorateElement:function(e,t){for(var n=[],o=[],r=e.decorators,a=r.length-1;a>=0;a--){var i=t[e.placement];i.splice(i.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,r[a])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&o.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;o--){var r=this.fromClassDescriptor(e),a=this.toClassDescriptor((0,t[o])(r)||r);if(void 0!==a.finisher&&n.push(a.finisher),void 0!==a.elements){e=a.elements;for(var i=0;i\n \n \n \n \n \n "]);return no=function(){return e},e}function oo(){var e=ro(["\n \n "]);return oo=function(){return e},e}function ro(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function ao(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function io(e,t){return(io=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function so(e){var t,n=fo(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var o={kind:"field"===e.kind?"field":"method",key:n,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(o.decorators=e.decorators),"field"===e.kind&&(o.initializer=e.value),o}function co(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function lo(e){return e.decorators&&e.decorators.length}function uo(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function po(e,t){var n=e[t];if(void 0!==n&&"function"!=typeof n)throw new TypeError("Expected '"+t+"' to be a function");return n}function fo(e){var t=function(e,t){if("object"!==Qn(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,t||"default");if("object"!==Qn(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Qn(t)?t:String(t)}function ho(e,t,n){return(ho="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(e,t,n){var o=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=bo(e)););return e}(e,t);if(o){var r=Object.getOwnPropertyDescriptor(o,t);return r.get?r.get.call(n):r.value}})(e,t,n||e)}function bo(e){return(bo=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var yo=function(e){var t=(e=e.substr("/ingress".length)).indexOf("/",1);return-1===t?e.substr(1):e.substr(1,t-1)};!function(e,t,n,o){var r=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(n){t.forEach(function(t){t.kind===n&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var n=e.prototype;["method","field"].forEach(function(o){t.forEach(function(t){var r=t.placement;if(t.kind===o&&("static"===r||"prototype"===r)){var a="static"===r?e:n;this.defineClassElement(a,t)}},this)},this)},defineClassElement:function(e,t){var n=t.descriptor;if("field"===t.kind){var o=t.initializer;n={enumerable:n.enumerable,writable:n.writable,configurable:n.configurable,value:void 0===o?void 0:o.call(e)}}Object.defineProperty(e,t.key,n)},decorateClass:function(e,t){var n=[],o=[],r={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,r)},this),e.forEach(function(e){if(!lo(e))return n.push(e);var t=this.decorateElement(e,r);n.push(t.element),n.push.apply(n,t.extras),o.push.apply(o,t.finishers)},this),!t)return{elements:n,finishers:o};var a=this.decorateConstructor(n,t);return o.push.apply(o,a.finishers),a.finishers=o,a},addElementPlacement:function(e,t,n){var o=t[e.placement];if(!n&&-1!==o.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");o.push(e.key)},decorateElement:function(e,t){for(var n=[],o=[],r=e.decorators,a=r.length-1;a>=0;a--){var i=t[e.placement];i.splice(i.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,r[a])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&o.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;o--){var r=this.fromClassDescriptor(e),a=this.toClassDescriptor((0,t[o])(r)||r);if(void 0!==a.finisher&&n.push(a.finisher),void 0!==a.elements){e=a.elements;for(var i=0;i\n paper-card {\n cursor: pointer;\n }\n .not_available {\n opacity: 0.6;\n }\n a.repo {\n display: block;\n color: var(--primary-text-color);\n }\n \n \n \n \n ']);return Ao=function(){return e},e}function Do(e,t){for(var n=0;n\n .add {\n padding: 12px 16px;\n }\n iron-icon {\n color: var(--secondary-text-color);\n margin-right: 16px;\n display: inline-block;\n }\n paper-input {\n width: calc(100% - 49px);\n display: inline-block;\n }\n \n
    \n
    \n Repositories\n
    \n Configure which add-on repositories to fetch data from:\n
    \n
    \n \n \n
    \n \n
    \n
    \n Remove\n
    \n
    \n \n \n
    \n \n \n
    \n
    \n Add\n
    \n
    \n
    \n ']);return No=function(){return e},e}function Fo(e,t){for(var n=0;n\n hassio-addon-repository {\n margin-top: 24px;\n }\n \n \n\n \n ']);return Wo=function(){return e},e}function Jo(e,t){for(var n=0;n\n paper-card {\n cursor: pointer;\n }\n \n
    \n
    Add-ons
    \n \n \n \n
    \n \n
    \n
    \n \n
    \n ']);return Zo=function(){return e},e}function er(e,t){for(var n=0;n\n paper-card {\n display: block;\n margin-bottom: 32px;\n }\n .errors {\n color: var(--google-red-500);\n margin-top: 16px;\n }\n a {\n color: var(--primary-color);\n }\n \n \n ']);return ar=function(){return e},e}function ir(e){return(ir="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function sr(e,t){for(var n=0;n\n .content {\n margin: 0 auto;\n }\n \n
    \n \n \n
    \n ']);return hr=function(){return e},e}function br(e,t){for(var n=0;n\n ha-paper-dialog {\n min-width: 350px;\n font-size: 14px;\n border-radius: 2px;\n }\n app-toolbar {\n margin: 0;\n padding: 0 16px;\n color: var(--primary-text-color);\n background-color: var(--secondary-background-color);\n }\n app-toolbar [main-title] {\n margin-left: 16px;\n }\n ha-paper-dialog-scrollable {\n margin: 0;\n }\n paper-checkbox {\n display: block;\n margin: 4px;\n }\n @media all and (max-width: 450px), all and (max-height: 500px) {\n ha-paper-dialog {\n max-height: 100%;\n height: 100%;\n }\n app-toolbar {\n color: var(--text-primary-color);\n background-color: var(--primary-color);\n }\n }\n .details {\n color: var(--secondary-text-color);\n }\n .download {\n color: var(--primary-color);\n }\n .warning,\n .error {\n color: var(--google-red-500);\n }\n \n \n \n \n
    [[_computeName(snapshot)]]
    \n
    \n
    \n [[_computeType(snapshot.type)]] ([[_computeSize(snapshot.size)]])
    \n [[_formatDatetime(snapshot.date)]]\n
    \n
    Home Assistant:
    \n \n Home Assistant [[snapshot.homeassistant]]\n \n \n \n \n \n \n \n
    \n \n \n Restore selected\n \n
    \n \n ']);return kr=function(){return e},e}function Or(e,t,n,o,r,a,i){try{var s=e[a](i),c=s.value}catch(e){return void n(e)}s.done?t(c):Promise.resolve(c).then(o,r)}function jr(e,t){for(var n=0;n\n paper-radio-group {\n display: block;\n }\n paper-radio-button {\n padding: 0 0 2px 2px;\n }\n paper-radio-button,\n paper-checkbox,\n paper-input[type="password"] {\n display: block;\n margin: 4px 0 4px 48px;\n }\n .pointer {\n cursor: pointer;\n }\n \n
    \n
    \n
    \n Create snapshot\n
    \n Snapshots allow you to easily backup and restore all data of your\n Hass.io instance.\n
    \n
    \n \n
    \n \n Type:\n \n \n Full snapshot\n \n \n Partial snapshot\n \n \n \n \n Security:\n Password protection\n \n \n
    \n
    \n Create\n
    \n
    \n
    \n\n
    \n
    Available snapshots
    \n \n \n \n
    \n \n
    \n
    \n \n
    \n
    \n ']);return Cr=function(){return e},e}function Tr(e,t){for(var n=0;n\n paper-card {\n display: inline-block;\n width: 400px;\n margin-left: 8px;\n }\n .card-content {\n height: 200px;\n color: var(--primary-text-color);\n }\n @media screen and (max-width: 830px) {\n paper-card {\n margin-top: 8px;\n margin-left: 0;\n width: 100%;\n }\n .card-content {\n height: auto;\n }\n }\n .info {\n width: 100%;\n }\n .info td:nth-child(2) {\n text-align: right;\n }\n .errors {\n color: var(--google-red-500);\n margin-top: 16px;\n }\n mwc-button.info {\n max-width: calc(50% - 12px);\n }\n table.info {\n margin-bottom: 10px;\n }\n \n \n
    \n

    Host system

    \n \n \n \n \n \n \n \n \n \n \n \n \n
    Hostname[[data.hostname]]
    System[[data.operating_system]]
    \n \n Hardware\n \n \n \n
    \n
    \n \n \n \n \n
    \n
    \n ']);return Hr=function(){return e},e}function Lr(e){return(Lr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Nr(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:"",o="";return Object.keys(e).forEach(function(r){"object"!==Lr(e[r])?o+="".concat(n,"- ").concat(r,": ").concat(e[r],"\n"):(o+="".concat(n,"- ").concat(r,":\n"),Array.isArray(e[r])?e[r].length&&(o+="".concat(n," - ")+e[r].join("\n".concat(n," - "))+"\n"):o+=t._objectToMarkdown(e[r]," ".concat(n)))}),o}},{key:"_changeHostnameClicked",value:function(){var e=this.data.hostname,t=prompt("Please enter a new hostname:",e);t&&t!==e&&this.hass.callApi("post","hassio/host/options",{hostname:t})}}])&&Nr(n.prototype,a),i&&Nr(n,i),t}();function $r(){var e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n \n \n
    \n

    Hass.io supervisor

    \n \n \n \n \n \n \n \n \n \n \n \n \n
    Version[[data.version]]
    Latest version[[data.last_version]]
    \n \n
    \n
    \n Reload\n \n \n \n
    \n
    \n ']);return $r=function(){return e},e}function Wr(e){return(Wr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Jr(e,t){for(var n=0;n\n paper-card {\n display: block;\n }\n pre {\n overflow-x: auto;\n white-space: pre-wrap;\n overflow-wrap: break-word;\n }\n .fg-green {\n color: var(--primary-text-color) !important;\n }\n \n ','\n \n
    \n
    \n Refresh\n
    \n
    \n ']);return Zr=function(){return e},e}function ea(e,t){for(var n=0;nError fetching logs'})}},{key:"refresh",value:function(){this.loadData()}}])&&ea(n.prototype,a),i&&ea(n,i),t}();function ia(e){return(ia="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function sa(){var e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n \n
    \n
    Information
    \n \n \n
    System log
    \n \n
    \n ']);return sa=function(){return e},e}function ca(e,t){for(var n=0;n\n :host {\n color: var(--primary-text-color);\n --paper-card-header-color: var(--primary-text-color);\n }\n paper-tabs {\n margin-left: 12px;\n --paper-tabs-selection-bar-color: #fff;\n text-transform: uppercase;\n }\n \n \n \n \n \n
    Hass.io
    \n \n
    \n \n Dashboard\n Snapshots\n Add-on store\n System\n \n
    \n \n \n \n \n
    \n\n \n\n \n ']);return ha=function(){return e},e}function ba(e,t){for(var n=0;n200?o.scrollTop=0:t._currentAnimationId===r&&(o.scrollTop=(n=c,-s*(n/=200)*(n-2)+i),requestAnimationFrame(e.bind(t)))}.call(t)}},{key:"equals",value:function(e,t){return e===t}},{key:"showRefreshButton",value:function(e){return"store"===e||"snapshots"===e}},{key:"refreshClicked",value:function(){"snapshots"===this.page?this.shadowRoot.querySelector("hassio-snapshots").refreshData():this.shadowRoot.querySelector("hassio-addon-store").refreshData()}},{key:"openMarkdown",value:function(e){this.setProperties({markdownTitle:e.detail.title,markdownContent:e.detail.content}),this.shadowRoot.querySelector("hassio-markdown-dialog").openDialog()}}])&&ba(n.prototype,a),i&&ba(n,i),t}();function ka(e){return(ka="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Oa(){var e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n \n \n\n \n\n \n ']);return Oa=function(){return e},e}function ja(e,t){for(var n=0;n3&&void 0!==arguments[3]&&arguments[3];e._themes||(e._themes={});var r=t.default_theme;("default"===n||n&&t.themes[n])&&(r=n);var a=Object.assign({},e._themes);if("default"!==r){var i=t.themes[r];Object.keys(i).forEach(function(t){var n="--"+t;e._themes[n]="",a[n]=i[t]})}if(e.updateStyles?e.updateStyles(a):window.ShadyCSS&&window.ShadyCSS.styleSubtree(e,a),o){var s=document.querySelector("meta[name=theme-color]");if(s){s.hasAttribute("default-content")||s.setAttribute("default-content",s.getAttribute("content"));var c=a["--primary-color"]||s.getAttribute("default-content");s.setAttribute("content",c)}}}(this,this.hass.themes,this.hass.selectedTheme,!0),this.addEventListener("hass-api-called",function(t){return e.apiCalled(t)}),this.addEventListener("hass-toggle-menu",function(){i(window.parent.customPanel,e.hass.dockedSidebar?"hass-close-menu":"hass-open-menu")}),window.addEventListener("location-changed",function(t){return i(e,t.type,t.detail,{bubbles:!1})})}},{key:"connectedCallback",value:function(){Sa(Pa(t.prototype),"connectedCallback",this).call(this),this.routeChanged(this.route)}},{key:"apiCalled",value:function(e){var t=this;if(e.detail.success){var n=1;!function e(){t.$.data.refresh().catch(function(){n+=1,setTimeout(e,1e3*Math.min(n,5))})}()}}},{key:"computeIsLoaded",value:function(e,t,n){return null!==e&&null!==t&&null!==n}},{key:"routeChanged",value:function(e){""===e.path&&"/hassio"===e.prefix&&this.navigate("/hassio/dashboard",!0),i(this,"iron-resize")}},{key:"equalsAddon",value:function(e){return e&&"addon"===e}},{key:"equalsDashboard",value:function(e){return!e||!["addon","ingress"].includes(e)}},{key:"equalsIngress",value:function(e){return e&&"ingress"===e}}])&&ja(n.prototype,a),s&&ja(n,s),t}();customElements.define("hassio-main",Ea)},36:function(e,t){var n=document.createElement("template");n.setAttribute("style","display: none;"),n.innerHTML='\n \n',document.head.appendChild(n.content)}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[3],{1:function(e,t,n){"use strict";n.r(t);n(71);var o=n(4),r=n(7),a=(n(33),n(94),n(20)),i=(n(26),function(e,t,n,o){o=o||{},n=null==n?{}:n;var r=new Event(t,{bubbles:void 0===o.bubbles||o.bubbles,cancelable:Boolean(o.cancelable),composed:void 0===o.composed||o.composed});return r.detail=n,e.dispatchEvent(r),r});function s(e){return(s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function c(){var e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(["\n \n "]);return c=function(){return e},e}function l(e){return(l=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function p(e,t){return(p=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function d(e){var t,n=m(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var o={kind:"field"===e.kind?"field":"method",key:n,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(o.decorators=e.decorators),"field"===e.kind&&(o.initializer=e.value),o}function f(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function h(e){return e.decorators&&e.decorators.length}function b(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function y(e,t){var n=e[t];if(void 0!==n&&"function"!=typeof n)throw new TypeError("Expected '"+t+"' to be a function");return n}function m(e){var t=function(e,t){if("object"!==s(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,t||"default");if("object"!==s(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===s(t)?t:String(t)}!function(e,t,n,o){var r=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(n){t.forEach(function(t){t.kind===n&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var n=e.prototype;["method","field"].forEach(function(o){t.forEach(function(t){var r=t.placement;if(t.kind===o&&("static"===r||"prototype"===r)){var a="static"===r?e:n;this.defineClassElement(a,t)}},this)},this)},defineClassElement:function(e,t){var n=t.descriptor;if("field"===t.kind){var o=t.initializer;n={enumerable:n.enumerable,writable:n.writable,configurable:n.configurable,value:void 0===o?void 0:o.call(e)}}Object.defineProperty(e,t.key,n)},decorateClass:function(e,t){var n=[],o=[],r={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,r)},this),e.forEach(function(e){if(!h(e))return n.push(e);var t=this.decorateElement(e,r);n.push(t.element),n.push.apply(n,t.extras),o.push.apply(o,t.finishers)},this),!t)return{elements:n,finishers:o};var a=this.decorateConstructor(n,t);return o.push.apply(o,a.finishers),a.finishers=o,a},addElementPlacement:function(e,t,n){var o=t[e.placement];if(!n&&-1!==o.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");o.push(e.key)},decorateElement:function(e,t){for(var n=[],o=[],r=e.decorators,a=r.length-1;a>=0;a--){var i=t[e.placement];i.splice(i.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,r[a])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&o.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;o--){var r=this.fromClassDescriptor(e),a=this.toClassDescriptor((0,t[o])(r)||r);if(void 0!==a.finisher&&n.push(a.finisher),void 0!==a.elements){e=a.elements;for(var i=0;i\n "]);return R=function(){return e},e}function z(){var e=H(["\n \n "]);return z=function(){return e},e}function I(){var e=H(["\n \n ",'\n \n
    \n \n
    \n ']);return I=function(){return e},e}function H(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function L(e){return(L=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function N(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function F(e,t){return(F=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function B(e){var t,n=W(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var o={kind:"field"===e.kind?"field":"method",key:n,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(o.decorators=e.decorators),"field"===e.kind&&(o.initializer=e.value),o}function M(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function U(e){return e.decorators&&e.decorators.length}function q(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function $(e,t){var n=e[t];if(void 0!==n&&"function"!=typeof n)throw new TypeError("Expected '"+t+"' to be a function");return n}function W(e){var t=function(e,t){if("object"!==A(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,t||"default");if("object"!==A(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===A(t)?t:String(t)}(function(e,t,n,o){var r=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(n){t.forEach(function(t){t.kind===n&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var n=e.prototype;["method","field"].forEach(function(o){t.forEach(function(t){var r=t.placement;if(t.kind===o&&("static"===r||"prototype"===r)){var a="static"===r?e:n;this.defineClassElement(a,t)}},this)},this)},defineClassElement:function(e,t){var n=t.descriptor;if("field"===t.kind){var o=t.initializer;n={enumerable:n.enumerable,writable:n.writable,configurable:n.configurable,value:void 0===o?void 0:o.call(e)}}Object.defineProperty(e,t.key,n)},decorateClass:function(e,t){var n=[],o=[],r={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,r)},this),e.forEach(function(e){if(!U(e))return n.push(e);var t=this.decorateElement(e,r);n.push(t.element),n.push.apply(n,t.extras),o.push.apply(o,t.finishers)},this),!t)return{elements:n,finishers:o};var a=this.decorateConstructor(n,t);return o.push.apply(o,a.finishers),a.finishers=o,a},addElementPlacement:function(e,t,n){var o=t[e.placement];if(!n&&-1!==o.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");o.push(e.key)},decorateElement:function(e,t){for(var n=[],o=[],r=e.decorators,a=r.length-1;a>=0;a--){var i=t[e.placement];i.splice(i.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,r[a])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&o.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;o--){var r=this.fromClassDescriptor(e),a=this.toClassDescriptor((0,t[o])(r)||r);if(void 0!==a.finisher&&n.push(a.finisher),void 0!==a.elements){e=a.elements;for(var i=0;i\n \n\n \n"),document.head.appendChild(J.content);n(77);var G=n(10);function Y(e){return(Y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function V(e,t){for(var n=0;n=0?t:null}:null}),e._resize();for(var t=document.createTreeWalker(e,1,null,!1);t.nextNode();){var n=t.currentNode;"A"===n.tagName&&n.host!==document.location.host?n.target="_blank":"IMG"===n.tagName&&n.addEventListener("load",e._resize)}}else 2===e._scriptLoaded&&(e.innerText=e.content)}))}}])&&te(o.prototype,a),i&&te(o,i),t}();customElements.define("ha-markdown",ce);n(112);var le=n(70),ue=n(6),pe=n(79),de={getTabbableNodes:function(e){var t=[];return this._collectTabbableNodes(e,t)?pe.a._sortByTabIndex(t):t},_collectTabbableNodes:function(e,t){if(e.nodeType!==Node.ELEMENT_NODE||!pe.a._isVisible(e))return!1;var n,o=e,r=pe.a._normalizedTabIndex(o),a=r>0;r>=0&&t.push(o),n="content"===o.localName||"slot"===o.localName?Object(ue.a)(o).getDistributedNodes():Object(ue.a)(o.shadowRoot||o.root||o).children;for(var i=0;i\n ha-paper-dialog {\n min-width: 350px;\n font-size: 14px;\n border-radius: 2px;\n }\n app-toolbar {\n margin: 0;\n padding: 0 16px;\n color: var(--primary-text-color);\n background-color: var(--secondary-background-color);\n }\n app-toolbar [main-title] {\n margin-left: 16px;\n }\n paper-checkbox {\n display: block;\n margin: 4px;\n }\n @media all and (max-width: 450px), all and (max-height: 500px) {\n ha-paper-dialog {\n max-height: 100%;\n }\n ha-paper-dialog::before {\n content: "";\n position: fixed;\n z-index: -1;\n top: 0px;\n left: 0px;\n right: 0px;\n bottom: 0px;\n background-color: inherit;\n }\n app-toolbar {\n color: var(--text-primary-color);\n background-color: var(--primary-color);\n }\n }\n \n \n \n \n
    [[title]]
    \n
    \n \n \n \n
    \n ']);return ke=function(){return e},e}function Oe(e,t){for(var n=0;n\n :host,\n paper-card,\n paper-dropdown-menu {\n display: block;\n }\n .errors {\n color: var(--google-red-500);\n margin-bottom: 16px;\n }\n paper-item {\n width: 450px;\n }\n .card-actions {\n text-align: right;\n }\n \n \n
    \n \n\n \n \n \n \n \n \n \n \n \n \n
    \n
    \n Save\n
    \n
    \n '],['\n \n \n
    \n \n\n \n \n \n \n \n \n \n \n \n \n
    \n
    \n Save\n
    \n
    \n ']);return Ee=function(){return e},e}function Ce(e,t){for(var n=0;n\n .container {\n position: relative;\n display: inline-block;\n }\n\n mwc-button {\n transition: all 1s;\n }\n\n .success mwc-button {\n --mdc-theme-primary: white;\n background-color: var(--google-green-500);\n transition: none;\n }\n\n .error mwc-button {\n --mdc-theme-primary: white;\n background-color: var(--google-red-500);\n transition: none;\n }\n\n .progress {\n @apply --layout;\n @apply --layout-center-center;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n }\n \n
    \n \n \n \n \n
    \n ']);return Ie=function(){return e},e}function He(e,t){for(var n=0;n\n ']);return $e=function(){return e},e}function We(e,t){return!t||"object"!==Ue(t)&&"function"!=typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):t}function Je(e){return(Je=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function Ge(e,t){for(var n=0;n\n :host {\n display: block;\n }\n paper-card {\n display: block;\n }\n .card-actions {\n @apply --layout;\n @apply --layout-justified;\n }\n .errors {\n color: var(--google-red-500);\n margin-bottom: 16px;\n }\n iron-autogrow-textarea {\n width: 100%;\n font-family: monospace;\n }\n .syntaxerror {\n color: var(--google-red-500);\n }\n \n \n
    \n \n \n
    \n
    \n Reset to defaults\n Save\n
    \n
    \n ']);return Qe=function(){return e},e}function Ze(e,t){for(var n=0;n bit more top margin */\n font-weight: 500;\n overflow: hidden;\n text-transform: uppercase;\n text-overflow: ellipsis;\n transition: background-color 0.3s ease-in-out;\n text-transform: var(--ha-label-badge-label-text-transform, uppercase);\n }\n .label-badge .label.big span {\n font-size: 90%;\n padding: 10% 12% 7% 12%; /* push smaller text a bit down to center vertically */\n }\n .badge-container .title {\n margin-top: 1em;\n font-size: var(--ha-label-badge-title-font-size, 0.9em);\n width: var(--ha-label-badge-title-width, 5em);\n font-weight: var(--ha-label-badge-title-font-weight, 400);\n overflow: hidden;\n text-overflow: ellipsis;\n line-height: normal;\n }\n "]);return bt=function(){return e},e}function yt(){var e=kt(['\n
    ',"
    \n "]);return yt=function(){return e},e}function mt(){var e=kt(['\n \n ',"\n \n "]);return mt=function(){return e},e}function vt(){var e=kt(["\n ","\n "]);return vt=function(){return e},e}function gt(){var e=kt(['\n \n ']);return gt=function(){return e},e}function wt(){var e=kt(['\n
    \n
    \n \n ',"\n ","\n
    \n ","\n
    \n ","\n \n "]);return wt=function(){return e},e}function kt(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function Ot(e,t){for(var n=0;n4)}),!this.icon||this.value||this.image?"":Object(a.d)(gt(),this.icon),this.value&&!this.image?Object(a.d)(vt(),this.value):"",this.label?Object(a.d)(mt(),Object(rt.a)({label:!0,big:this.label.length>5}),this.label):"",this.description?Object(a.d)(yt(),this.description):"")}},{key:"updated",value:function(e){_t(St(t.prototype),"updated",this).call(this,e),e.has("image")&&(this.shadowRoot.getElementById("badge").style.backgroundImage=this.image?"url(".concat(this.image,")"):"")}}])&&Ot(n.prototype,o),r&&Ot(n,r),t}();customElements.define("ha-label-badge",xt);var Et=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];n?history.replaceState(null,"",t):history.pushState(null,"",t),i(window,"location-changed",{replace:n})},Ct=[60,60,24,7],Tt=["second","minute","hour","day"];function At(e){return(At="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Dt(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},r=((o.compareTime||new Date).getTime()-e.getTime())/1e3,a=r>=0?"past":"future";r=Math.abs(r);for(var i=0;i\n iron-icon {\n margin-right: 16px;\n margin-top: 16px;\n float: left;\n color: var(--secondary-text-color);\n }\n iron-icon.update {\n color: var(--paper-orange-400);\n }\n iron-icon.running,\n iron-icon.installed {\n color: var(--paper-green-400);\n }\n iron-icon.hassupdate,\n iron-icon.snapshot {\n color: var(--paper-item-icon-color);\n }\n iron-icon.not_available {\n color: var(--google-red-500);\n }\n .title {\n color: var(--primary-text-color);\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n .addition {\n color: var(--secondary-text-color);\n overflow: hidden;\n position: relative;\n height: 2.4em;\n line-height: 1.2em;\n }\n ha-relative-time {\n display: block;\n }\n \n \n
    \n
    [[title]]
    \n
    \n \n \n \n
    \n
    \n '],['\n \n \n
    \n
    [[title]]
    \n
    \n \n \n \n
    \n
    \n ']);return Jt=function(){return e},e}function Gt(e,t){for(var n=0;n\n :host {\n display: block;\n }\n paper-card {\n display: block;\n margin-bottom: 16px;\n }\n paper-card.warning {\n background-color: var(--google-red-500);\n color: white;\n --paper-card-header-color: white;\n }\n paper-card.warning mwc-button {\n color: white !important;\n }\n .warning {\n color: var(--google-red-500);\n }\n .addon-header {\n @apply --paper-font-headline;\n }\n .light-color {\n color: var(--secondary-text-color);\n }\n .addon-version {\n float: right;\n font-size: 15px;\n vertical-align: middle;\n }\n .description {\n margin-bottom: 16px;\n }\n .logo img {\n max-height: 60px;\n margin: 16px 0;\n display: block;\n }\n .state div {\n width: 150px;\n display: inline-block;\n }\n paper-toggle-button {\n display: inline;\n }\n iron-icon.running {\n color: var(--paper-green-400);\n }\n iron-icon.stopped {\n color: var(--google-red-300);\n }\n ha-call-api-button {\n font-weight: 500;\n color: var(--primary-color);\n }\n .right {\n float: right;\n }\n ha-markdown img {\n max-width: 100%;\n }\n .red {\n --ha-label-badge-color: var(--label-badge-red, #df4c1e);\n }\n .blue {\n --ha-label-badge-color: var(--label-badge-blue, #039be5);\n }\n .green {\n --ha-label-badge-color: var(--label-badge-green, #0da035);\n }\n .yellow {\n --ha-label-badge-color: var(--label-badge-yellow, #f4b400);\n }\n .security {\n margin-bottom: 16px;\n }\n .security h3 {\n margin-bottom: 8px;\n font-weight: normal;\n }\n .security ha-label-badge {\n cursor: pointer;\n margin-right: 4px;\n --iron-icon-height: 45px;\n }\n \n\n \n\n \n
    \n
    \n [[addon.name]]\n
    \n \n \n
    \n
    \n
    \n [[addon.description]].
    \n Visit\n [[addon.name]] page for\n details.\n
    \n \n \n
    \n

    Addon Security Rating

    \n
    \n Hass.io provides a security rating to each of the add-ons, which indicates the risks involved when using this add-on. The more access an addon requires on your system, the lower the score, thus raising the possible security risks.\n
    \n \n \n \n \n \n \n \n \n \n \n
    \n \n
    \n
    \n \n \n Open web UI\n \n \n \n
    \n
    \n \n ']);return Zt=function(){return e},e}function en(e,t){for(var n=0;n4?"green":e>2?"yellow":"red"}},{key:"startOnBootToggled",value:function(){var e={boot:"auto"===this.addon.boot?"manual":"auto"};this.hass.callApi("POST","hassio/addons/".concat(this.addonSlug,"/options"),e)}},{key:"autoUpdateToggled",value:function(){var e={auto_update:!this.addon.auto_update};this.hass.callApi("POST","hassio/addons/".concat(this.addonSlug,"/options"),e)}},{key:"protectionToggled",value:function(){var e={protected:!this.addon.protected};this.hass.callApi("POST","hassio/addons/".concat(this.addonSlug,"/security"),e),this.set("addon.protected",!this.addon.protected)}},{key:"showMoreInfo",value:function(e){var t=e.target.getAttribute("id");this.fire("hassio-markdown-dialog",{title:rn[t].title,content:rn[t].description})}},{key:"openChangelog",value:function(){var e=this;this.hass.callApi("get","hassio/addons/".concat(this.addonSlug,"/changelog")).then(function(e){return e},function(){return"Error getting changelog"}).then(function(t){e.fire("hassio-markdown-dialog",{title:"Changelog",content:t})})}},{key:"_unistallClicked",value:function(){var e=this;if(confirm("Are you sure you want to uninstall this add-on?")){var t="hassio/addons/".concat(this.addonSlug,"/uninstall"),n={path:t};this.hass.callApi("post",t).then(function(e){n.success=!0,n.response=e},function(e){n.success=!1,n.response=e}).then(function(){e.fire("hass-api-called",n)})}}}])&&en(n.prototype,a),i&&en(n,i),t}();function sn(){var e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(["\n \n"]);return sn=function(){return e},e}customElements.define("hassio-addon-info",an);var cn=Object(o.a)(sn());function ln(e){for(var t,n=document.createElement("pre"),o=/\033(?:\[(.*?)[@-~]|\].*?(?:\007|\033\\))/g,r=0,a={bold:!1,italic:!1,underline:!1,strikethrough:!1,foregroundColor:null,backgroundColor:null},i=function(e){var t=document.createElement("span");a.bold&&t.classList.add("bold"),a.italic&&t.classList.add("italic"),a.underline&&t.classList.add("underline"),a.strikethrough&&t.classList.add("strikethrough"),null!==a.foregroundColor&&t.classList.add("fg-".concat(a.foregroundColor)),null!==a.backgroundColor&&t.classList.add("bg-".concat(a.backgroundColor)),t.appendChild(document.createTextNode(e)),n.appendChild(t)};null!==(t=o.exec(e));){var s=t.index;if(i(e.substring(r,s)),r=s+t[0].length,void 0!==t[1]){var c=!0,l=!1,u=void 0;try{for(var p,d=t[1].split(";")[Symbol.iterator]();!(c=(p=d.next()).done);c=!0){var f=p.value;switch(parseInt(f)){case 0:a.bold=!1,a.italic=!1,a.underline=!1,a.strikethrough=!1,a.foregroundColor=null,a.backgroundColor=null;break;case 1:a.bold=!0;break;case 3:a.italic=!0;break;case 4:a.underline=!0;break;case 9:a.strikethrough=!0;break;case 22:a.bold=!1;break;case 23:a.italic=!1;break;case 24:a.underline=!1;break;case 29:a.strikethrough=!1;break;case 30:a.foregroundColor=null;break;case 31:a.foregroundColor="red";break;case 32:a.foregroundColor="green";break;case 33:a.foregroundColor="yellow";break;case 34:a.foregroundColor="blue";break;case 35:a.foregroundColor="magenta";break;case 36:a.foregroundColor="cyan";break;case 37:a.foregroundColor="white";break;case 39:a.foregroundColor=null;break;case 40:a.backgroundColor="black";break;case 41:a.backgroundColor="red";break;case 42:a.backgroundColor="green";break;case 43:a.backgroundColor="yellow";break;case 44:a.backgroundColor="blue";break;case 45:a.backgroundColor="magenta";break;case 46:a.backgroundColor="cyan";break;case 47:a.backgroundColor="white";break;case 49:a.backgroundColor=null}}}catch(e){l=!0,u=e}finally{try{c||null==d.return||d.return()}finally{if(l)throw u}}}}return i(e.substring(r)),n}function un(e){return(un="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function pn(){var e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n \n ','\n \n
    \n
    \n Refresh\n
    \n
    \n ']);return pn=function(){return e},e}function dn(e,t){for(var n=0;n\n :host {\n display: block;\n }\n paper-card {\n display: block;\n }\n .errors {\n color: var(--google-red-500);\n margin-bottom: 16px;\n }\n .card-actions {\n @apply --layout;\n @apply --layout-justified;\n }\n \n \n
    \n \n\n \n \n \n \n \n \n \n \n
    ContainerHost
    \n
    \n
    \n Reset to defaults\n Save\n
    \n
    \n ']);return vn=function(){return e},e}function gn(e,t){for(var n=0;n\n :host {\n color: var(--primary-text-color);\n --paper-card-header-color: var(--primary-text-color);\n }\n .content {\n padding: 24px 0 32px;\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n hassio-addon-info,\n hassio-addon-network,\n hassio-addon-audio,\n hassio-addon-config {\n margin-bottom: 24px;\n width: 600px;\n }\n hassio-addon-logs {\n max-width: calc(100% - 8px);\n min-width: 600px;\n }\n @media only screen and (max-width: 600px) {\n hassio-addon-info,\n hassio-addon-network,\n hassio-addon-audio,\n hassio-addon-config,\n hassio-addon-logs {\n max-width: 100%;\n min-width: 100%;\n }\n }\n \n \n \n \n \n \n \n
    Hass.io: add-on details
    \n
    \n
    \n
    \n \n\n \n
    \n
    \n\n \n ']);return Sn=function(){return e},e}function Pn(e,t){for(var n=0;n\n "]);return Fn=function(){return e},e}function Bn(){var e=Un(["\n \n "]);return Bn=function(){return e},e}function Mn(){var e=Un(['\n
    \n ',"\n\n
    ",'
    \n \n
    \n
    \n ']);return Mn=function(){return e},e}function Un(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function qn(e){return(qn=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function $n(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function Wn(e,t){return(Wn=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function Jn(e){var t,n=Kn(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var o={kind:"field"===e.kind?"field":"method",key:n,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(o.decorators=e.decorators),"field"===e.kind&&(o.initializer=e.value),o}function Gn(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function Yn(e){return e.decorators&&e.decorators.length}function Vn(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function Xn(e,t){var n=e[t];if(void 0!==n&&"function"!=typeof n)throw new TypeError("Expected '"+t+"' to be a function");return n}function Kn(e){var t=function(e,t){if("object"!==Ln(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,t||"default");if("object"!==Ln(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Ln(t)?t:String(t)}!function(e,t,n,o){var r=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(n){t.forEach(function(t){t.kind===n&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var n=e.prototype;["method","field"].forEach(function(o){t.forEach(function(t){var r=t.placement;if(t.kind===o&&("static"===r||"prototype"===r)){var a="static"===r?e:n;this.defineClassElement(a,t)}},this)},this)},defineClassElement:function(e,t){var n=t.descriptor;if("field"===t.kind){var o=t.initializer;n={enumerable:n.enumerable,writable:n.writable,configurable:n.configurable,value:void 0===o?void 0:o.call(e)}}Object.defineProperty(e,t.key,n)},decorateClass:function(e,t){var n=[],o=[],r={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,r)},this),e.forEach(function(e){if(!Yn(e))return n.push(e);var t=this.decorateElement(e,r);n.push(t.element),n.push.apply(n,t.extras),o.push.apply(o,t.finishers)},this),!t)return{elements:n,finishers:o};var a=this.decorateConstructor(n,t);return o.push.apply(o,a.finishers),a.finishers=o,a},addElementPlacement:function(e,t,n){var o=t[e.placement];if(!n&&-1!==o.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");o.push(e.key)},decorateElement:function(e,t){for(var n=[],o=[],r=e.decorators,a=r.length-1;a>=0;a--){var i=t[e.placement];i.splice(i.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,r[a])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&o.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;o--){var r=this.fromClassDescriptor(e),a=this.toClassDescriptor((0,t[o])(r)||r);if(void 0!==a.finisher&&n.push(a.finisher),void 0!==a.elements){e=a.elements;for(var i=0;i\n \n \n \n

    _T%ekW3%D4rr;+ptufpzyX}pxz?wq*2ElHH`Iq-(e2}To#j>vl zQBJ@Tax#{wmQF<{ZzgUEQ^8deep3%h2_$6Y;|9Z!wcG@7`DPcVY;tY1Ngp#}ft&!y znWPZk2liG)>{ePoAM2AX)Vn16`R%9gt~cbQO6*Fw<-iZ3b>0@{E{1c~DVM4B5b6}R zjM;2n7||nTqlIyFhv+yARwJ1dO{+2zX>zrcVEp9jVO)eoEB=-D4=o9bfE(}#$O!f^m*IILhP4v?3ZjL)f=Yyv|*aD zVS?CZRHbTYaa4WUOBL^>3VW&I?GYnIFZNO@xH+UL8GEg@8+ABh7&RSK$%Dhx2is-~ zjblD?L}pTiY&7cC+vd0h?|j+llcBolma|XWbgu(V%=^FI=hwe{+{X#qQjAlrN*J78 z_K8jJ^5_lI5?&j73&lU}N$UlUs18$Sak`CB`~cG$Mj!gMargSb7>9$%M9zH|le!(B z<9p9XPPXc7!7CLTA#-Z+F_E*tiWx92BK16Rns5#Cf#U~t#BOs~>LL<#Z;k}COrH@C z0K3O&jj$b5?h^KoZ$JLwW>gPbK1F~v#AyX^;-*Q2TiDX4Qo1^M|DrGLp<F24xyKcta55PZ zn@1G1_Z@e63^)X&b~Rkioi>uW-HfUQdSbh|@>w^83VwBJPi7hHoz?OG{Qk`kpDwRY zf7Hj1uU}mbkncae`TR-&|F>_x|M1-}KfQVX`G5WR=Jogg>-En+Uv6I3AK$+F{{Mdb eUs5N(MEyVhzyII=_y6Pn_5TAS0rg&kl@kCYze|b$ diff --git a/hassio/api/panel/chunk.088b1034e27d00ee9329.js b/hassio/api/panel/chunk.088b1034e27d00ee9329.js deleted file mode 100644 index c3f9f2efe..000000000 --- a/hassio/api/panel/chunk.088b1034e27d00ee9329.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{101:function(e,t,n){(function(r){var i;function o(e){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}!function(r){"use strict";var s={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:y,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/,nptable:y,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:"^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?\\?>\\n*|\\n*|\\n*|)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$)|(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$))",def:/^ {0,3}\[(label)\]: *\n? *]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,table:y,lheading:/^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading| {0,3}>|<\/?(?:tag)(?: +|\n|\/?>)|<(?:script|pre|style|!--))[^\n]+)*)/,text:/^[^\n]+/};function a(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||A.defaults,this.rules=s.normal,this.options.pedantic?this.rules=s.pedantic:this.options.gfm&&(this.options.tables?this.rules=s.tables:this.rules=s.gfm)}s._label=/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,s._title=/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/,s.def=m(s.def).replace("label",s._label).replace("title",s._title).getRegex(),s.bullet=/(?:[*+-]|\d{1,9}\.)/,s.item=/^( *)(bull) ?[^\n]*(?:\n(?!\1bull ?)[^\n]*)*/,s.item=m(s.item,"gm").replace(/bull/g,s.bullet).getRegex(),s.list=m(s.list).replace(/bull/g,s.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+s.def.source+")").getRegex(),s._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",s._comment=//,s.html=m(s.html,"i").replace("comment",s._comment).replace("tag",s._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),s.paragraph=m(s.paragraph).replace("hr",s.hr).replace("heading",s.heading).replace("lheading",s.lheading).replace("tag",s._tag).getRegex(),s.blockquote=m(s.blockquote).replace("paragraph",s.paragraph).getRegex(),s.normal=w({},s),s.gfm=w({},s.normal,{fences:/^ {0,3}(`{3,}|~{3,})([^`\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,paragraph:/^/,heading:/^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/}),s.gfm.paragraph=m(s.paragraph).replace("(?!","(?!"+s.gfm.fences.source.replace("\\1","\\2")+"|"+s.list.source.replace("\\1","\\3")+"|").getRegex(),s.tables=w({},s.gfm,{nptable:/^ *([^|\n ].*\|.*)\n *([-:]+ *\|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/,table:/^ *\|(.+)\n *\|?( *[-:]+[-| :]*)(?:\n((?: *[^>\n ].*(?:\n|$))*)\n*|$)/}),s.pedantic=w({},s.normal,{html:m("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",s._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/}),a.rules=s,a.lex=function(e,t){return new a(t).lex(e)},a.prototype.lex=function(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n"),this.token(e,!0)},a.prototype.token=function(e,t){var n,r,i,o,a,l,c,u,p,h,g,f,d,m,b,x;for(e=e.replace(/^ +$/gm,"");e;)if((i=this.rules.newline.exec(e))&&(e=e.substring(i[0].length),i[0].length>1&&this.tokens.push({type:"space"})),i=this.rules.code.exec(e))e=e.substring(i[0].length),i=i[0].replace(/^ {4}/gm,""),this.tokens.push({type:"code",text:this.options.pedantic?i:_(i,"\n")});else if(i=this.rules.fences.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"code",lang:i[2]?i[2].trim():i[2],text:i[3]||""});else if(i=this.rules.heading.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"heading",depth:i[1].length,text:i[2]});else if(t&&(i=this.rules.nptable.exec(e))&&(l={type:"table",header:v(i[1].replace(/^ *| *\| *$/g,"")),align:i[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:i[3]?i[3].replace(/\n$/,"").split("\n"):[]}).header.length===l.align.length){for(e=e.substring(i[0].length),g=0;g ?/gm,""),this.token(i,t),this.tokens.push({type:"blockquote_end"});else if(i=this.rules.list.exec(e)){for(e=e.substring(i[0].length),c={type:"list_start",ordered:m=(o=i[2]).length>1,start:m?+o:"",loose:!1},this.tokens.push(c),u=[],n=!1,d=(i=i[0].match(this.rules.item)).length,g=0;g1?1===a.length:a.length>1||this.options.smartLists&&a!==o)&&(e=i.slice(g+1).join("\n")+e,g=d-1)),r=n||/\n\n(?!\s*$)/.test(l),g!==d-1&&(n="\n"===l.charAt(l.length-1),r||(r=n)),r&&(c.loose=!0),x=void 0,(b=/^\[[ xX]\] /.test(l))&&(x=" "!==l[1],l=l.replace(/^\[[ xX]\] +/,"")),p={type:"list_item_start",task:b,checked:x,loose:r},u.push(p),this.tokens.push(p),this.token(l,!1),this.tokens.push({type:"list_item_end"});if(c.loose)for(d=u.length,g=0;g?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:y,tag:"^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^",link:/^!?\[(label)\]\(href(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,strong:/^__([^\s_])__(?!_)|^\*\*([^\s*])\*\*(?!\*)|^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)/,em:/^_([^\s_])_(?!_)|^\*([^\s*"<\[])\*(?!\*)|^_([^\s][\s\S]*?[^\s_])_(?!_|[^\spunctuation])|^_([^\s_][\s\S]*?[^\s])_(?!_|[^\spunctuation])|^\*([^\s"<\[][\s\S]*?[^\s*])\*(?!\*)|^\*([^\s*"<\[][\s\S]*?[^\s])\*(?!\*)/,code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:y,text:/^(`+|[^`])[\s\S]*?(?=[\\?@\\[^_{|}~",l.em=m(l.em).replace(/punctuation/g,l._punctuation).getRegex(),l._escapes=/\\([!"#$%&'()*+,\-.\/:;<=>?@\[\]\\^_`{|}~])/g,l._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,l._email=/[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,l.autolink=m(l.autolink).replace("scheme",l._scheme).replace("email",l._email).getRegex(),l._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,l.tag=m(l.tag).replace("comment",s._comment).replace("attribute",l._attribute).getRegex(),l._label=/(?:\[[^\[\]]*\]|\\[\[\]]?|`[^`]*`|[^\[\]\\])*?/,l._href=/\s*(<(?:\\[<>]?|[^\s<>\\])*>|(?:\\[()]?|\([^\s\x00-\x1f\\]*\)|[^\s\x00-\x1f()\\])*?)/,l._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,l.link=m(l.link).replace("label",l._label).replace("href",l._href).replace("title",l._title).getRegex(),l.reflink=m(l.reflink).replace("label",l._label).getRegex(),l.normal=w({},l),l.pedantic=w({},l.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/,link:m(/^!?\[(label)\]\((.*?)\)/).replace("label",l._label).getRegex(),reflink:m(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",l._label).getRegex()}),l.gfm=w({},l.normal,{escape:m(l.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^~+(?=\S)([\s\S]*?\S)~+/,text:m(l.text).replace("]|","~]|").replace("|$","|https?://|ftp://|www\\.|[a-zA-Z0-9.!#$%&'*+/=?^_`{\\|}~-]+@|$").getRegex()}),l.gfm.url=m(l.gfm.url,"i").replace("email",l.gfm._extended_email).getRegex(),l.breaks=w({},l.gfm,{br:m(l.br).replace("{2,}","*").getRegex(),text:m(l.gfm.text).replace("{2,}","*").getRegex()}),c.rules=l,c.output=function(e,t,n){return new c(t,n).output(e)},c.prototype.output=function(e){for(var t,n,r,i,o,s,a="";e;)if(o=this.rules.escape.exec(e))e=e.substring(o[0].length),a+=f(o[1]);else if(o=this.rules.tag.exec(e))!this.inLink&&/^/i.test(o[0])&&(this.inLink=!1),!this.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(o[0])?this.inRawBlock=!0:this.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(o[0])&&(this.inRawBlock=!1),e=e.substring(o[0].length),a+=this.options.sanitize?this.options.sanitizer?this.options.sanitizer(o[0]):f(o[0]):o[0];else if(o=this.rules.link.exec(e))e=e.substring(o[0].length),this.inLink=!0,r=o[2],this.options.pedantic?(t=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(r))?(r=t[1],i=t[3]):i="":i=o[3]?o[3].slice(1,-1):"",r=r.trim().replace(/^<([\s\S]*)>$/,"$1"),a+=this.outputLink(o,{href:c.escapes(r),title:c.escapes(i)}),this.inLink=!1;else if((o=this.rules.reflink.exec(e))||(o=this.rules.nolink.exec(e))){if(e=e.substring(o[0].length),t=(o[2]||o[1]).replace(/\s+/g," "),!(t=this.links[t.toLowerCase()])||!t.href){a+=o[0].charAt(0),e=o[0].substring(1)+e;continue}this.inLink=!0,a+=this.outputLink(o,t),this.inLink=!1}else if(o=this.rules.strong.exec(e))e=e.substring(o[0].length),a+=this.renderer.strong(this.output(o[4]||o[3]||o[2]||o[1]));else if(o=this.rules.em.exec(e))e=e.substring(o[0].length),a+=this.renderer.em(this.output(o[6]||o[5]||o[4]||o[3]||o[2]||o[1]));else if(o=this.rules.code.exec(e))e=e.substring(o[0].length),a+=this.renderer.codespan(f(o[2].trim(),!0));else if(o=this.rules.br.exec(e))e=e.substring(o[0].length),a+=this.renderer.br();else if(o=this.rules.del.exec(e))e=e.substring(o[0].length),a+=this.renderer.del(this.output(o[1]));else if(o=this.rules.autolink.exec(e))e=e.substring(o[0].length),r="@"===o[2]?"mailto:"+(n=f(this.mangle(o[1]))):n=f(o[1]),a+=this.renderer.link(r,null,n);else if(this.inLink||!(o=this.rules.url.exec(e))){if(o=this.rules.text.exec(e))e=e.substring(o[0].length),this.inRawBlock?a+=this.renderer.text(o[0]):a+=this.renderer.text(f(this.smartypants(o[0])));else if(e)throw new Error("Infinite loop on byte: "+e.charCodeAt(0))}else{if("@"===o[2])r="mailto:"+(n=f(o[0]));else{do{s=o[0],o[0]=this.rules._backpedal.exec(o[0])[0]}while(s!==o[0]);n=f(o[0]),r="www."===o[1]?"http://"+n:n}e=e.substring(o[0].length),a+=this.renderer.link(r,null,n)}return a},c.escapes=function(e){return e?e.replace(c.rules._escapes,"$1"):e},c.prototype.outputLink=function(e,t){var n=t.href,r=t.title?f(t.title):null;return"!"!==e[0].charAt(0)?this.renderer.link(n,r,this.output(e[1])):this.renderer.image(n,r,f(e[1]))},c.prototype.smartypants=function(e){return this.options.smartypants?e.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014\/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014\/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…"):e},c.prototype.mangle=function(e){if(!this.options.mangle)return e;for(var t,n="",r=e.length,i=0;i.5&&(t="x"+t.toString(16)),n+="&#"+t+";";return n},u.prototype.code=function(e,t,n){var r=(t||"").match(/\S*/)[0];if(this.options.highlight){var i=this.options.highlight(e,r);null!=i&&i!==e&&(n=!0,e=i)}return r?'