Skip to content

Commit 611af9c

Browse files
marcelveldtCopilotarturpragacz
authored
Add support for authentication to the Music Assistant integration (home-assistant#157257)
Co-authored-by: Copilot <[email protected]> Co-authored-by: Artur Pragacz <[email protected]> Co-authored-by: Artur Pragacz <[email protected]>
1 parent c2b7a63 commit 611af9c

File tree

7 files changed

+1061
-38
lines changed

7 files changed

+1061
-38
lines changed

homeassistant/components/music_assistant/__init__.py

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,25 @@
88
from typing import TYPE_CHECKING
99

1010
from music_assistant_client import MusicAssistantClient
11-
from music_assistant_client.exceptions import CannotConnect, InvalidServerVersion
11+
from music_assistant_client.exceptions import (
12+
CannotConnect,
13+
InvalidServerVersion,
14+
MusicAssistantClientException,
15+
)
1216
from music_assistant_models.config_entries import PlayerConfig
1317
from music_assistant_models.enums import EventType
14-
from music_assistant_models.errors import ActionUnavailable, MusicAssistantError
18+
from music_assistant_models.errors import (
19+
ActionUnavailable,
20+
AuthenticationFailed,
21+
InvalidToken,
22+
MusicAssistantError,
23+
)
1524
from music_assistant_models.player import Player
1625

1726
from homeassistant.config_entries import ConfigEntry, ConfigEntryState
1827
from homeassistant.const import CONF_URL, EVENT_HOMEASSISTANT_STOP, Platform
1928
from homeassistant.core import Event, HomeAssistant
20-
from homeassistant.exceptions import ConfigEntryNotReady
29+
from homeassistant.exceptions import ConfigEntryAuthFailed, ConfigEntryNotReady
2130
from homeassistant.helpers import config_validation as cv, device_registry as dr
2231
from homeassistant.helpers.aiohttp_client import async_get_clientsession
2332
from homeassistant.helpers.issue_registry import (
@@ -26,7 +35,7 @@
2635
async_delete_issue,
2736
)
2837

29-
from .const import ATTR_CONF_EXPOSE_PLAYER_TO_HA, DOMAIN, LOGGER
38+
from .const import ATTR_CONF_EXPOSE_PLAYER_TO_HA, CONF_TOKEN, DOMAIN, LOGGER
3039
from .helpers import get_music_assistant_client
3140
from .services import register_actions
3241

@@ -59,6 +68,7 @@ class MusicAssistantEntryData:
5968
async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
6069
"""Set up the Music Assistant component."""
6170
register_actions(hass)
71+
6272
return True
6373

6474

@@ -68,7 +78,9 @@ async def async_setup_entry( # noqa: C901
6878
"""Set up Music Assistant from a config entry."""
6979
http_session = async_get_clientsession(hass, verify_ssl=False)
7080
mass_url = entry.data[CONF_URL]
71-
mass = MusicAssistantClient(mass_url, http_session)
81+
# Get token from config entry (for schema >= AUTH_SCHEMA_VERSION)
82+
token = entry.data.get(CONF_TOKEN)
83+
mass = MusicAssistantClient(mass_url, http_session, token=token)
7284

7385
try:
7486
async with asyncio.timeout(CONNECT_TIMEOUT):
@@ -87,6 +99,14 @@ async def async_setup_entry( # noqa: C901
8799
translation_key="invalid_server_version",
88100
)
89101
raise ConfigEntryNotReady(f"Invalid server version: {err}") from err
102+
except (AuthenticationFailed, InvalidToken) as err:
103+
raise ConfigEntryAuthFailed(
104+
f"Authentication failed for {mass_url}: {err}"
105+
) from err
106+
except MusicAssistantClientException as err:
107+
raise ConfigEntryNotReady(
108+
f"Failed to connect to music assistant server {mass_url}: {err}"
109+
) from err
90110
except MusicAssistantError as err:
91111
LOGGER.exception("Failed to connect to music assistant server", exc_info=err)
92112
raise ConfigEntryNotReady(

0 commit comments

Comments
 (0)