Hass.io auth/sso part2 (#17324)
* Update discovery.py * Create const.py * Update auth.py * Update const.py * Update const.py * Update http.py * Update handler.py * Update auth.py * Update auth.py * Update test_auth.pypull/17164/merge
parent
cffb704311
commit
f5d3aa1826
homeassistant/components/hassio
tests/components/hassio
|
@ -14,16 +14,16 @@ from homeassistant.components.http import HomeAssistantView
|
||||||
from homeassistant.components.http.const import KEY_REAL_IP
|
from homeassistant.components.http.const import KEY_REAL_IP
|
||||||
from homeassistant.components.http.data_validator import RequestDataValidator
|
from homeassistant.components.http.data_validator import RequestDataValidator
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
from .const import ATTR_USERNAME, ATTR_PASSWORD, ATTR_ADDON
|
||||||
|
|
||||||
ATTR_USERNAME = 'username'
|
_LOGGER = logging.getLogger(__name__)
|
||||||
ATTR_PASSWORD = 'password'
|
|
||||||
|
|
||||||
|
|
||||||
SCHEMA_API_AUTH = vol.Schema({
|
SCHEMA_API_AUTH = vol.Schema({
|
||||||
vol.Required(ATTR_USERNAME): cv.string,
|
vol.Required(ATTR_USERNAME): cv.string,
|
||||||
vol.Required(ATTR_PASSWORD): cv.string,
|
vol.Required(ATTR_PASSWORD): cv.string,
|
||||||
})
|
vol.Required(ATTR_ADDON): cv.string,
|
||||||
|
}, extra=vol.ALLOW_EXTRA)
|
||||||
|
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
|
|
|
@ -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'
|
|
@ -10,16 +10,12 @@ from homeassistant.const import EVENT_HOMEASSISTANT_START
|
||||||
from homeassistant.components.http import HomeAssistantView
|
from homeassistant.components.http import HomeAssistantView
|
||||||
|
|
||||||
from .handler import HassioAPIError
|
from .handler import HassioAPIError
|
||||||
|
from .const import (
|
||||||
|
ATTR_DISCOVERY, ATTR_ADDON, ATTR_NAME, ATTR_SERVICE, ATTR_CONFIG,
|
||||||
|
ATTR_UUID)
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
ATTR_DISCOVERY = 'discovery'
|
|
||||||
ATTR_ADDON = 'addon'
|
|
||||||
ATTR_NAME = 'name'
|
|
||||||
ATTR_SERVICE = 'service'
|
|
||||||
ATTR_CONFIG = 'config'
|
|
||||||
ATTR_UUID = 'uuid'
|
|
||||||
|
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def async_setup_discovery(hass, hassio, config):
|
def async_setup_discovery(hass, hassio, config):
|
||||||
|
|
|
@ -16,9 +16,9 @@ from homeassistant.components.http import (
|
||||||
CONF_SSL_CERTIFICATE)
|
CONF_SSL_CERTIFICATE)
|
||||||
from homeassistant.const import CONF_TIME_ZONE, SERVER_PORT
|
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):
|
class HassioAPIError(RuntimeError):
|
||||||
|
|
|
@ -18,9 +18,10 @@ from aiohttp.web_exceptions import HTTPBadGateway
|
||||||
from homeassistant.const import CONTENT_TYPE_TEXT_PLAIN
|
from homeassistant.const import CONTENT_TYPE_TEXT_PLAIN
|
||||||
from homeassistant.components.http import KEY_AUTHENTICATED, HomeAssistantView
|
from homeassistant.components.http import KEY_AUTHENTICATED, HomeAssistantView
|
||||||
|
|
||||||
|
from .const import X_HASSIO
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
X_HASSIO = 'X-HASSIO-KEY'
|
|
||||||
|
|
||||||
NO_TIMEOUT = re.compile(
|
NO_TIMEOUT = re.compile(
|
||||||
r'^(?:'
|
r'^(?:'
|
||||||
|
|
|
@ -19,7 +19,8 @@ async def test_login_success(hass, hassio_client):
|
||||||
'/api/hassio_auth',
|
'/api/hassio_auth',
|
||||||
json={
|
json={
|
||||||
"username": "test",
|
"username": "test",
|
||||||
"password": "123456"
|
"password": "123456",
|
||||||
|
"addon": "samba",
|
||||||
},
|
},
|
||||||
headers={
|
headers={
|
||||||
HTTP_HEADER_HA_AUTH: API_PASSWORD
|
HTTP_HEADER_HA_AUTH: API_PASSWORD
|
||||||
|
@ -42,7 +43,8 @@ async def test_login_error(hass, hassio_client):
|
||||||
'/api/hassio_auth',
|
'/api/hassio_auth',
|
||||||
json={
|
json={
|
||||||
"username": "test",
|
"username": "test",
|
||||||
"password": "123456"
|
"password": "123456",
|
||||||
|
"addon": "samba",
|
||||||
},
|
},
|
||||||
headers={
|
headers={
|
||||||
HTTP_HEADER_HA_AUTH: API_PASSWORD
|
HTTP_HEADER_HA_AUTH: API_PASSWORD
|
||||||
|
@ -83,7 +85,8 @@ async def test_login_no_username(hass, hassio_client):
|
||||||
resp = await hassio_client.post(
|
resp = await hassio_client.post(
|
||||||
'/api/hassio_auth',
|
'/api/hassio_auth',
|
||||||
json={
|
json={
|
||||||
"password": "123456"
|
"password": "123456",
|
||||||
|
"addon": "samba",
|
||||||
},
|
},
|
||||||
headers={
|
headers={
|
||||||
HTTP_HEADER_HA_AUTH: API_PASSWORD
|
HTTP_HEADER_HA_AUTH: API_PASSWORD
|
||||||
|
@ -93,3 +96,28 @@ async def test_login_no_username(hass, hassio_client):
|
||||||
# Check we got right response
|
# Check we got right response
|
||||||
assert resp.status == 400
|
assert resp.status == 400
|
||||||
assert not mock_login.called
|
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")
|
||||||
|
|
Loading…
Reference in New Issue