async def test_ws_current_user(hass, hass_ws_client, hass_access_token): """Test the current user command with homeassistant creds.""" assert await async_setup_component(hass, "auth", {}) refresh_token = await hass.auth.async_validate_access_token( hass_access_token) user = refresh_token.user credential = Credentials(auth_provider_type="homeassistant", auth_provider_id=None, data={}, id="test-id") user.credentials.append(credential) assert len(user.credentials) == 1 client = await hass_ws_client(hass, hass_access_token) await client.send_json({"id": 5, "type": auth.WS_TYPE_CURRENT_USER}) result = await client.receive_json() assert result["success"], result user_dict = result["result"] assert user_dict["name"] == user.name assert user_dict["id"] == user.id assert user_dict["is_owner"] == user.is_owner assert len(user_dict["credentials"]) == 1 hass_cred = user_dict["credentials"][0] assert hass_cred["auth_provider_type"] == "homeassistant" assert hass_cred["auth_provider_id"] is None assert "data" not in hass_cred
def async_create_credentials(self, data): """Create credentials.""" return Credentials( auth_provider_type=self.type, auth_provider_id=self.id, data=data, )
async def hass_admin_credential(hass, local_auth): """Provide credentials for admin user.""" return Credentials( id="mock-credential-id", auth_provider_type="homeassistant", auth_provider_id=None, data={"username": "******"}, is_new=False, )
def mock_credential(): """Return a mock credential.""" return Credentials( id="mock-credential-id", auth_provider_type="insecure_example", auth_provider_id=None, data={"username": "******"}, is_new=False, )
def hass_read_only_access_token(hass, hass_read_only_user, local_auth): """Return a Home Assistant read only user.""" credential = Credentials( id="mock-readonly-credential-id", auth_provider_type="homeassistant", auth_provider_id=None, data={"username": "******"}, is_new=False, ) hass_read_only_user.credentials.append(credential) refresh_token = hass.loop.run_until_complete( hass.auth.async_create_refresh_token(hass_read_only_user, CLIENT_ID, credential=credential)) return hass.auth.async_create_access_token(refresh_token)
async def async_setup_user_refresh_token(hass): """Create a testing user with a connected credential.""" user = await hass.auth.async_create_user("Test User") credential = Credentials( id="mock-credential-id", auth_provider_type="insecure_example", auth_provider_id=None, data={"username": "******"}, is_new=False, ) user.credentials.append(credential) return await hass.auth.async_create_refresh_token(user, CLIENT_ID, credential=credential)
async def test_ws_current_user(hass, hass_ws_client, hass_access_token): """Test the current user command with homeassistant creds.""" assert await async_setup_component(hass, 'auth', {'http': { 'api_password': '******' }}) refresh_token = await hass.auth.async_validate_access_token( hass_access_token) user = refresh_token.user credential = Credentials(auth_provider_type='homeassistant', auth_provider_id=None, data={}, id='test-id') user.credentials.append(credential) assert len(user.credentials) == 1 with patch('homeassistant.auth.AuthManager.active', return_value=True): client = await hass_ws_client(hass, hass_access_token) await client.send_json({ 'id': 5, 'type': auth.WS_TYPE_CURRENT_USER, }) result = await client.receive_json() assert result['success'], result user_dict = result['result'] assert user_dict['name'] == user.name assert user_dict['id'] == user.id assert user_dict['is_owner'] == user.is_owner assert len(user_dict['credentials']) == 1 hass_cred = user_dict['credentials'][0] assert hass_cred['auth_provider_type'] == 'homeassistant' assert hass_cred['auth_provider_id'] is None assert 'data' not in hass_cred
async def test_login(hass): """Test login flow with auth module.""" hass.auth = await auth.auth_manager_from_config( hass, [{ 'type': 'insecure_example', 'users': [{ 'username': '******', 'password': '******' }], }], [{ 'type': 'insecure_example', 'data': [{ 'user_id': 'mock-user', 'pin': '123456' }] }]) user = MockUser( id='mock-user', is_owner=False, is_active=False, name='Paulus', ).add_to_auth_manager(hass.auth) await hass.auth.async_link_user( user, Credentials( id='mock-id', auth_provider_type='insecure_example', auth_provider_id=None, data={'username': '******'}, is_new=False, )) provider = hass.auth.auth_providers[0] result = await hass.auth.login_flow.async_init( (provider.type, provider.id)) assert result['type'] == data_entry_flow.RESULT_TYPE_FORM result = await hass.auth.login_flow.async_configure( result['flow_id'], { 'username': '******', 'password': '******', }) assert result['type'] == data_entry_flow.RESULT_TYPE_FORM assert result['errors']['base'] == 'invalid_auth' result = await hass.auth.login_flow.async_configure( result['flow_id'], { 'username': '******', 'password': '******', }) assert result['type'] == data_entry_flow.RESULT_TYPE_FORM assert result['errors']['base'] == 'invalid_auth' result = await hass.auth.login_flow.async_configure( result['flow_id'], { 'username': '******', 'password': '******', }) assert result['type'] == data_entry_flow.RESULT_TYPE_FORM assert result['step_id'] == 'mfa' assert result['data_schema'].schema.get('pin') == str result = await hass.auth.login_flow.async_configure( result['flow_id'], {'pin': 'invalid-code'}) assert result['type'] == data_entry_flow.RESULT_TYPE_FORM assert result['errors']['base'] == 'invalid_code' result = await hass.auth.login_flow.async_configure( result['flow_id'], {'pin': '123456'}) assert result['type'] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY assert result['data'].id == 'mock-user'
async def test_login(hass): """Test login flow with auth module.""" hass.auth = await auth.auth_manager_from_config( hass, [ { "type": "insecure_example", "users": [{"username": "******", "password": "******"}], } ], [ { "type": "insecure_example", "data": [{"user_id": "mock-user", "pin": "123456"}], } ], ) user = MockUser( id="mock-user", is_owner=False, is_active=False, name="Paulus" ).add_to_auth_manager(hass.auth) await hass.auth.async_link_user( user, Credentials( id="mock-id", auth_provider_type="insecure_example", auth_provider_id=None, data={"username": "******"}, is_new=False, ), ) provider = hass.auth.auth_providers[0] result = await hass.auth.login_flow.async_init((provider.type, provider.id)) assert result["type"] == data_entry_flow.RESULT_TYPE_FORM result = await hass.auth.login_flow.async_configure( result["flow_id"], {"username": "******", "password": "******"} ) assert result["type"] == data_entry_flow.RESULT_TYPE_FORM assert result["errors"]["base"] == "invalid_auth" result = await hass.auth.login_flow.async_configure( result["flow_id"], {"username": "******", "password": "******"} ) assert result["type"] == data_entry_flow.RESULT_TYPE_FORM assert result["errors"]["base"] == "invalid_auth" result = await hass.auth.login_flow.async_configure( result["flow_id"], {"username": "******", "password": "******"} ) assert result["type"] == data_entry_flow.RESULT_TYPE_FORM assert result["step_id"] == "mfa" assert result["data_schema"].schema.get("pin") == str result = await hass.auth.login_flow.async_configure( result["flow_id"], {"pin": "invalid-code"} ) assert result["type"] == data_entry_flow.RESULT_TYPE_FORM assert result["errors"]["base"] == "invalid_code" result = await hass.auth.login_flow.async_configure( result["flow_id"], {"pin": "123456"} ) assert result["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY assert result["data"].id == "mock-user"