1 """Home Assistant Cast integration for Cast."""
3 from __future__
import annotations
5 import voluptuous
as vol
7 from homeassistant
import auth, config_entries, core
14 from .const
import DOMAIN, SIGNAL_HASS_CAST_SHOW_VIEW, HomeAssistantControllerData
16 SERVICE_SHOW_VIEW =
"show_lovelace_view"
17 ATTR_VIEW_PATH =
"view_path"
18 ATTR_URL_PATH =
"dashboard_path"
19 CAST_USER_NAME =
"Home Assistant Cast"
20 NO_URL_AVAILABLE_ERROR = (
21 "Home Assistant Cast requires your instance to be reachable via HTTPS. Enable Home"
22 " Assistant Cloud or set up an external URL with valid SSL certificates"
29 """Set up Home Assistant Cast."""
30 user_id: str |
None = entry.data.get(
"user_id")
33 if user_id
is not None:
34 user = await hass.auth.async_get_user(user_id)
37 user = await hass.auth.async_create_system_user(
38 CAST_USER_NAME, group_ids=[auth.const.GROUP_ID_ADMIN]
40 hass.config_entries.async_update_entry(
41 entry, data={**entry.data,
"user_id": user.id}
44 if user.refresh_tokens:
47 refresh_token = await hass.auth.async_create_refresh_token(user)
49 async
def handle_show_view(call: core.ServiceCall) ->
None:
50 """Handle a Show View service call."""
52 hass_url =
get_url(hass, require_ssl=
True, prefer_external=
True)
53 except NoURLAvailableError
as err:
56 hass_uuid = await instance_id.async_get(hass)
65 refresh_token=refresh_token.token,
68 dispatcher.async_dispatcher_send(
70 SIGNAL_HASS_CAST_SHOW_VIEW,
72 call.data[ATTR_ENTITY_ID],
73 call.data[ATTR_VIEW_PATH],
74 call.data.get(ATTR_URL_PATH),
84 ATTR_ENTITY_ID: cv.entity_id,
86 vol.Optional(ATTR_URL_PATH): str,
95 """Remove Home Assistant Cast user."""
96 user_id: str |
None = entry.data.get(
"user_id")
98 if user_id
is not None and (user := await hass.auth.async_get_user(user_id)):
99 await hass.auth.async_remove_user(user)
def async_setup_ha_cast(core.HomeAssistant hass, config_entries.ConfigEntry entry)
def async_remove_user(core.HomeAssistant hass, config_entries.ConfigEntry entry)
str get_url(HomeAssistant hass, *bool require_current_request=False, bool require_ssl=False, bool require_standard_port=False, bool require_cloud=False, bool allow_internal=True, bool allow_external=True, bool allow_cloud=True, bool|None allow_ip=None, bool|None prefer_external=None, bool prefer_cloud=False)
None async_register_admin_service(HomeAssistant hass, str domain, str service, Callable[[ServiceCall], Awaitable[None]|None] service_func, VolSchemaType schema=vol.Schema({}, extra=vol.PREVENT_EXTRA))