diff --git a/API.md b/API.md index 4a9955a03..d5fb57bcd 100644 --- a/API.md +++ b/API.md @@ -660,3 +660,17 @@ This service performs an auto discovery to Home-Assistant. ``` - DEL `/services/mqtt` + +### Misc + +- GET `/version` +```json +{ + "supervisor": "version", + "homeassistant": "version", + "hassos": "null|version", + "machine": "type", + "arch": "arch", + "channel": "stable|beta|dev" +} +``` diff --git a/hassio/api/__init__.py b/hassio/api/__init__.py index a9b6ba9de..637290f93 100644 --- a/hassio/api/__init__.py +++ b/hassio/api/__init__.py @@ -14,6 +14,7 @@ from .proxy import APIProxy from .supervisor import APISupervisor from .snapshots import APISnapshots from .services import APIServices +from .version import APIVersion from .security import SecurityMiddleware from ..coresys import CoreSysAttributes @@ -47,6 +48,7 @@ class RestAPI(CoreSysAttributes): self._register_snapshots() self._register_discovery() self._register_services() + self._register_version() def _register_host(self): """Register hostcontrol functions.""" @@ -90,6 +92,15 @@ class RestAPI(CoreSysAttributes): web.get('/hardware/audio', api_hardware.audio), ]) + def _register_version(self): + """Register version functions.""" + api_version = APIVersion() + api_version.coresys = self.coresys + + self.webapp.add_routes([ + web.get('/version', api_version.info), + ]) + def _register_supervisor(self): """Register Supervisor functions.""" api_supervisor = APISupervisor() diff --git a/hassio/api/security.py b/hassio/api/security.py index 8476c8daa..90982acaf 100644 --- a/hassio/api/security.py +++ b/hassio/api/security.py @@ -34,6 +34,7 @@ NO_SECURITY_CHECK = re.compile( ADDONS_API_BYPASS = re.compile( r"^(?:" r"|/addons/self/(?!security)[^/]+)?" + r"|/version" r")$" ) diff --git a/hassio/api/version.py b/hassio/api/version.py new file mode 100644 index 000000000..4757f3119 --- /dev/null +++ b/hassio/api/version.py @@ -0,0 +1,26 @@ +"""Init file for Hass.io version RESTful API.""" +import logging + +from .utils import api_process +from ..const import ( + ATTR_HOMEASSISTANT, ATTR_SUPERVISOR, ATTR_MACHINE, ATTR_ARCH, ATTR_HASSOS, + ATTR_CHANNEL) +from ..coresys import CoreSysAttributes + +_LOGGER = logging.getLogger(__name__) + + +class APIVersion(CoreSysAttributes): + """Handle RESTful API for version functions.""" + + @api_process + async def info(self, request): + """Show version info.""" + return { + ATTR_SUPERVISOR: self.sys_supervisor.version, + ATTR_HOMEASSISTANT: self.sys_homeassistant.version, + ATTR_HASSOS: self.sys_hassos.version, + ATTR_MACHINE: self.sys_machine, + ATTR_ARCH: self.sys_arch, + ATTR_CHANNEL: self.sys_channel, + } diff --git a/hassio/const.py b/hassio/const.py index b3ef7a5da..0ed613821 100644 --- a/hassio/const.py +++ b/hassio/const.py @@ -185,6 +185,7 @@ ATTR_FULL_ACCESS = 'full_access' ATTR_PROTECTED = 'protected' ATTR_RATING = 'rating' ATTR_HASSIO_ROLE = 'hassio_role' +ATTR_SUPERVISOR = 'supervisor' SERVICE_MQTT = 'mqtt'