diff --git a/homeassistant/components/hassio/auth.py b/homeassistant/components/hassio/auth.py index 951110271d4..4be3ba9956c 100644 --- a/homeassistant/components/hassio/auth.py +++ b/homeassistant/components/hassio/auth.py @@ -14,16 +14,16 @@ from homeassistant.components.http import HomeAssistantView from homeassistant.components.http.const import KEY_REAL_IP from homeassistant.components.http.data_validator import RequestDataValidator -_LOGGER = logging.getLogger(__name__) +from .const import ATTR_USERNAME, ATTR_PASSWORD, ATTR_ADDON -ATTR_USERNAME = 'username' -ATTR_PASSWORD = 'password' +_LOGGER = logging.getLogger(__name__) SCHEMA_API_AUTH = vol.Schema({ vol.Required(ATTR_USERNAME): cv.string, vol.Required(ATTR_PASSWORD): cv.string, -}) + vol.Required(ATTR_ADDON): cv.string, +}, extra=vol.ALLOW_EXTRA) @callback diff --git a/homeassistant/components/hassio/const.py b/homeassistant/components/hassio/const.py new file mode 100644 index 00000000000..c539169ebe3 --- /dev/null +++ b/homeassistant/components/hassio/const.py @@ -0,0 +1,12 @@ +"""Hass.io const variables.""" + +ATTR_DISCOVERY = 'discovery' +ATTR_ADDON = 'addon' +ATTR_NAME = 'name' +ATTR_SERVICE = 'service' +ATTR_CONFIG = 'config' +ATTR_UUID = 'uuid' +ATTR_USERNAME = 'username' +ATTR_PASSWORD = 'password' + +X_HASSIO = 'X-HASSIO-KEY' diff --git a/homeassistant/components/hassio/discovery.py b/homeassistant/components/hassio/discovery.py index 3c5242607c1..4c7c5a6597f 100644 --- a/homeassistant/components/hassio/discovery.py +++ b/homeassistant/components/hassio/discovery.py @@ -10,16 +10,12 @@ from homeassistant.const import EVENT_HOMEASSISTANT_START from homeassistant.components.http import HomeAssistantView from .handler import HassioAPIError +from .const import ( + ATTR_DISCOVERY, ATTR_ADDON, ATTR_NAME, ATTR_SERVICE, ATTR_CONFIG, + ATTR_UUID) _LOGGER = logging.getLogger(__name__) -ATTR_DISCOVERY = 'discovery' -ATTR_ADDON = 'addon' -ATTR_NAME = 'name' -ATTR_SERVICE = 'service' -ATTR_CONFIG = 'config' -ATTR_UUID = 'uuid' - @callback def async_setup_discovery(hass, hassio, config): diff --git a/homeassistant/components/hassio/handler.py b/homeassistant/components/hassio/handler.py index 7c450b49bcc..91019776eeb 100644 --- a/homeassistant/components/hassio/handler.py +++ b/homeassistant/components/hassio/handler.py @@ -16,9 +16,9 @@ from homeassistant.components.http import ( CONF_SSL_CERTIFICATE) from homeassistant.const import CONF_TIME_ZONE, SERVER_PORT -_LOGGER = logging.getLogger(__name__) +from .const import X_HASSIO -X_HASSIO = 'X-HASSIO-KEY' +_LOGGER = logging.getLogger(__name__) class HassioAPIError(RuntimeError): diff --git a/homeassistant/components/hassio/http.py b/homeassistant/components/hassio/http.py index abd1c16ba8b..c3bd18fa9bb 100644 --- a/homeassistant/components/hassio/http.py +++ b/homeassistant/components/hassio/http.py @@ -18,9 +18,10 @@ from aiohttp.web_exceptions import HTTPBadGateway from homeassistant.const import CONTENT_TYPE_TEXT_PLAIN from homeassistant.components.http import KEY_AUTHENTICATED, HomeAssistantView +from .const import X_HASSIO + _LOGGER = logging.getLogger(__name__) -X_HASSIO = 'X-HASSIO-KEY' NO_TIMEOUT = re.compile( r'^(?:' diff --git a/tests/components/hassio/test_auth.py b/tests/components/hassio/test_auth.py index b3a6ae223f9..fdf3230dedc 100644 --- a/tests/components/hassio/test_auth.py +++ b/tests/components/hassio/test_auth.py @@ -19,7 +19,8 @@ async def test_login_success(hass, hassio_client): '/api/hassio_auth', json={ "username": "test", - "password": "123456" + "password": "123456", + "addon": "samba", }, headers={ HTTP_HEADER_HA_AUTH: API_PASSWORD @@ -42,7 +43,8 @@ async def test_login_error(hass, hassio_client): '/api/hassio_auth', json={ "username": "test", - "password": "123456" + "password": "123456", + "addon": "samba", }, headers={ HTTP_HEADER_HA_AUTH: API_PASSWORD @@ -83,7 +85,8 @@ async def test_login_no_username(hass, hassio_client): resp = await hassio_client.post( '/api/hassio_auth', json={ - "password": "123456" + "password": "123456", + "addon": "samba", }, headers={ HTTP_HEADER_HA_AUTH: API_PASSWORD @@ -93,3 +96,28 @@ async def test_login_no_username(hass, hassio_client): # Check we got right response assert resp.status == 400 assert not mock_login.called + + +async def test_login_success_extra(hass, hassio_client): + """Test auth with extra data.""" + await register_auth_provider(hass, {'type': 'homeassistant'}) + + with patch('homeassistant.auth.providers.homeassistant.' + 'HassAuthProvider.async_validate_login', + Mock(return_value=mock_coro())) as mock_login: + resp = await hassio_client.post( + '/api/hassio_auth', + json={ + "username": "test", + "password": "123456", + "addon": "samba", + "path": "/share", + }, + headers={ + HTTP_HEADER_HA_AUTH: API_PASSWORD + } + ) + + # Check we got right response + assert resp.status == 200 + mock_login.assert_called_with("test", "123456")