diff --git a/hassio/api/security.py b/hassio/api/security.py index 1e9115ecc..69888786b 100644 --- a/hassio/api/security.py +++ b/hassio/api/security.py @@ -44,13 +44,18 @@ class SecurityMiddleware(CoreSysAttributes): if hassio_token == self.sys_homeassistant.uuid: _LOGGER.debug("%s access from Home-Assistant", request.path) request[REQUEST_FROM] = 'homeassistant' - return await handler(request) + + # Host + if hassio_token == self.sys_machine_id: + _LOGGER.debug("%s access from Host", request.path) + request[REQUEST_FROM] = 'host' # Add-on addon = self.sys_addons.from_uuid(hassio_token) if addon: _LOGGER.info("%s access from %s", request.path, addon.slug) request[REQUEST_FROM] = addon.slug - return await handler(request) - raise HTTPUnauthorized() + if not request.get(REQUEST_FROM): + raise HTTPUnauthorized() + return await handler(request) diff --git a/hassio/bootstrap.py b/hassio/bootstrap.py index a2fcda3cc..828d0cdb4 100644 --- a/hassio/bootstrap.py +++ b/hassio/bootstrap.py @@ -24,6 +24,11 @@ from .dbus import DBusManager _LOGGER = logging.getLogger(__name__) +ENV_SHARE = 'SUPERVISOR_SHARE' +ENV_NAME = 'SUPERVISOR_NAME' +ENV_REPO = 'HOMEASSISTANT_REPOSITORY' +ENV_MACHINE = 'MACHINE_ID' + def initialize_coresys(loop): """Initialize HassIO coresys/objects.""" @@ -46,6 +51,9 @@ def initialize_coresys(loop): # bootstrap config initialize_system_data(coresys) + # Set Machine/Host ID + coresys.machine_id = os.environ.get(ENV_MACHINE) + return coresys @@ -139,8 +147,7 @@ def initialize_logging(): def check_environment(): """Check if all environment are exists.""" # check environment variables - for key in ('SUPERVISOR_SHARE', 'SUPERVISOR_NAME', - 'HOMEASSISTANT_REPOSITORY'): + for key in (ENV_SHARE, ENV_NAME, ENV_REPO): try: os.environ[key] except KeyError: diff --git a/hassio/coresys.py b/hassio/coresys.py index a5f84352d..fe8ef696e 100644 --- a/hassio/coresys.py +++ b/hassio/coresys.py @@ -17,6 +17,7 @@ class CoreSys: """Initialize coresys.""" # Static attributes self.exit_code = 0 + self.machine_id = None # External objects self._loop = loop