From 15a454159553d33ea15f6fae9d72f4a0b9bcd294 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Wed, 10 Jan 2018 18:14:32 +0100 Subject: [PATCH] HomeAssistant API token (#303) * Add a uuid to home-assistant * Add API_TOKEN to homeassistant * Update homeassistant.py * Update addon.py --- hassio/addons/addon.py | 2 +- hassio/docker/addon.py | 2 +- hassio/docker/homeassistant.py | 1 + hassio/homeassistant.py | 7 ++++++- hassio/validate.py | 7 +++++-- 5 files changed, 14 insertions(+), 5 deletions(-) diff --git a/hassio/addons/addon.py b/hassio/addons/addon.py index 032a2ec56..7944de1b6 100644 --- a/hassio/addons/addon.py +++ b/hassio/addons/addon.py @@ -160,7 +160,7 @@ class Addon(CoreSysAttributes): return self._mesh[ATTR_TIMEOUT] @property - def api_token(self): + def uuid(self): """Return a API token for this add-on.""" if self.is_installed: return self._data.user[self._id][ATTR_UUID] diff --git a/hassio/docker/addon.py b/hassio/docker/addon.py index 760207143..e69512139 100644 --- a/hassio/docker/addon.py +++ b/hassio/docker/addon.py @@ -82,7 +82,7 @@ class DockerAddon(DockerInterface): # Set api token if any API access is needed if self.addon.access_hassio_api or self.addon.access_homeassistant_api: - addon_env['API_TOKEN'] = self.addon.api_token + addon_env['HASSIO_TOKEN'] = self.addon.uuid return { **addon_env, diff --git a/hassio/docker/homeassistant.py b/hassio/docker/homeassistant.py index 148e9c78e..9fff28172 100644 --- a/hassio/docker/homeassistant.py +++ b/hassio/docker/homeassistant.py @@ -54,6 +54,7 @@ class DockerHomeAssistant(DockerInterface): environment={ 'HASSIO': self._docker.network.supervisor, 'TZ': self._config.timezone, + 'HASSIO_TOKEN': self._homeassistant.uuid, }, volumes={ str(self._config.path_extern_config): diff --git a/hassio/homeassistant.py b/hassio/homeassistant.py index 6ee12289d..c36949e87 100644 --- a/hassio/homeassistant.py +++ b/hassio/homeassistant.py @@ -8,7 +8,7 @@ import aiohttp from aiohttp.hdrs import CONTENT_TYPE from .const import ( - FILE_HASSIO_HOMEASSISTANT, ATTR_IMAGE, ATTR_LAST_VERSION, + FILE_HASSIO_HOMEASSISTANT, ATTR_IMAGE, ATTR_LAST_VERSION, ATTR_UUID, ATTR_BOOT, ATTR_PASSWORD, ATTR_PORT, ATTR_SSL, ATTR_WATCHDOG, HEADER_HA_ACCESS, CONTENT_TYPE_JSON) from .coresys import CoreSysAttributes @@ -143,6 +143,11 @@ class HomeAssistant(JsonConfig, CoreSysAttributes): """Set home-assistant boot options.""" self._data[ATTR_BOOT] = value + @property + def uuid(self): + """Return a UUID of this HomeAssistant.""" + return self._data[ATTR_UUID] + async def install_landingpage(self): """Install a landingpage.""" _LOGGER.info("Setup HomeAssistant landingpage") diff --git a/hassio/validate.py b/hassio/validate.py index 4cd60ee43..0c56d2405 100644 --- a/hassio/validate.py +++ b/hassio/validate.py @@ -1,6 +1,7 @@ """Validate functions.""" -import voluptuous as vol +import uuid +import voluptuous as vol import pytz from .const import ( @@ -8,7 +9,7 @@ from .const import ( ATTR_SECURITY, ATTR_BETA_CHANNEL, ATTR_TIMEZONE, ATTR_ADDONS_CUSTOM_LIST, ATTR_AUDIO_OUTPUT, ATTR_AUDIO_INPUT, ATTR_HOMEASSISTANT, ATTR_HASSIO, ATTR_BOOT, ATTR_LAST_BOOT, ATTR_SSL, ATTR_PORT, ATTR_WATCHDOG, - ATTR_WAIT_BOOT) + ATTR_WAIT_BOOT, ATTR_UUID) NETWORK_PORT = vol.All(vol.Coerce(int), vol.Range(min=1, max=65535)) @@ -59,6 +60,8 @@ DOCKER_PORTS = vol.Schema({ # pylint: disable=no-value-for-parameter SCHEMA_HASS_CONFIG = vol.Schema({ + vol.Optional(ATTR_UUID, default=lambda: uuid.uuid4().hex): + vol.Match(r"^[0-9a-f]{32}$"), vol.Optional(ATTR_BOOT, default=True): vol.Boolean(), vol.Inclusive(ATTR_IMAGE, 'custom_hass'): vol.Coerce(str), vol.Inclusive(ATTR_LAST_VERSION, 'custom_hass'): vol.Coerce(str),