Convert auth websocket commands to use async_response decorator (#17755)

This commit is contained in:
Paulus Schoutsen 2018-10-24 15:23:09 +02:00 committed by Pascal Vizeli
parent 8283f50e22
commit c7c0ed89c8

View File

@ -424,54 +424,46 @@ def _create_auth_code_store():
@websocket_api.ws_require_user() @websocket_api.ws_require_user()
@callback @websocket_api.async_response
def websocket_current_user( async def websocket_current_user(
hass: HomeAssistant, connection: websocket_api.ActiveConnection, msg): hass: HomeAssistant, connection: websocket_api.ActiveConnection, msg):
"""Return the current user.""" """Return the current user."""
async def async_get_current_user(user): user = connection.user
"""Get current user.""" enabled_modules = await hass.auth.async_get_enabled_mfa(user)
enabled_modules = await hass.auth.async_get_enabled_mfa(user)
connection.send_message( connection.send_message(
websocket_api.result_message(msg['id'], { websocket_api.result_message(msg['id'], {
'id': user.id, 'id': user.id,
'name': user.name, 'name': user.name,
'is_owner': user.is_owner, 'is_owner': user.is_owner,
'credentials': [{'auth_provider_type': c.auth_provider_type, 'credentials': [{'auth_provider_type': c.auth_provider_type,
'auth_provider_id': c.auth_provider_id} 'auth_provider_id': c.auth_provider_id}
for c in user.credentials], for c in user.credentials],
'mfa_modules': [{ 'mfa_modules': [{
'id': module.id, 'id': module.id,
'name': module.name, 'name': module.name,
'enabled': module.id in enabled_modules, 'enabled': module.id in enabled_modules,
} for module in hass.auth.auth_mfa_modules], } for module in hass.auth.auth_mfa_modules],
})) }))
hass.async_create_task(async_get_current_user(connection.user))
@websocket_api.ws_require_user() @websocket_api.ws_require_user()
@callback @websocket_api.async_response
def websocket_create_long_lived_access_token( async def websocket_create_long_lived_access_token(
hass: HomeAssistant, connection: websocket_api.ActiveConnection, msg): hass: HomeAssistant, connection: websocket_api.ActiveConnection, msg):
"""Create or a long-lived access token.""" """Create or a long-lived access token."""
async def async_create_long_lived_access_token(user): refresh_token = await hass.auth.async_create_refresh_token(
"""Create or a long-lived access token.""" connection.user,
refresh_token = await hass.auth.async_create_refresh_token( client_name=msg['client_name'],
user, client_icon=msg.get('client_icon'),
client_name=msg['client_name'], token_type=TOKEN_TYPE_LONG_LIVED_ACCESS_TOKEN,
client_icon=msg.get('client_icon'), access_token_expiration=timedelta(days=msg['lifespan']))
token_type=TOKEN_TYPE_LONG_LIVED_ACCESS_TOKEN,
access_token_expiration=timedelta(days=msg['lifespan']))
access_token = hass.auth.async_create_access_token( access_token = hass.auth.async_create_access_token(
refresh_token) refresh_token)
connection.send_message( connection.send_message(
websocket_api.result_message(msg['id'], access_token)) websocket_api.result_message(msg['id'], access_token))
hass.async_create_task(
async_create_long_lived_access_token(connection.user))
@websocket_api.ws_require_user() @websocket_api.ws_require_user()
@ -494,22 +486,17 @@ def websocket_refresh_tokens(
@websocket_api.ws_require_user() @websocket_api.ws_require_user()
@callback @websocket_api.async_response
def websocket_delete_refresh_token( async def websocket_delete_refresh_token(
hass: HomeAssistant, connection: websocket_api.ActiveConnection, msg): hass: HomeAssistant, connection: websocket_api.ActiveConnection, msg):
"""Handle a delete refresh token request.""" """Handle a delete refresh token request."""
async def async_delete_refresh_token(user, refresh_token_id): refresh_token = connection.user.refresh_tokens.get(msg['refresh_token_id'])
"""Delete a refresh token."""
refresh_token = connection.user.refresh_tokens.get(refresh_token_id)
if refresh_token is None: if refresh_token is None:
return websocket_api.error_message( return websocket_api.error_message(
msg['id'], 'invalid_token_id', 'Received invalid token') msg['id'], 'invalid_token_id', 'Received invalid token')
await hass.auth.async_remove_refresh_token(refresh_token) await hass.auth.async_remove_refresh_token(refresh_token)
connection.send_message( connection.send_message(
websocket_api.result_message(msg['id'], {})) websocket_api.result_message(msg['id'], {}))
hass.async_create_task(
async_delete_refresh_token(connection.user, msg['refresh_token_id']))