return_type: None = ...,
) -> ConfigValueType: ...
- @api_command("config/providers/get_value")
+ @api_command("config/providers/get_value", required_role="admin")
async def get_provider_config_value(
self,
instance_id: str,
self._value_cache[cache_key] = val
return val
- @api_command("config/providers/get_entries")
+ @api_command("config/providers/get_entries", required_role="admin")
async def get_provider_config_entries( # noqa: PLR0915
self,
provider_domain: str,
return
self.remove(conf_key)
- @api_command("config/players")
+ @api_command("config/players", required_role="admin")
async def get_player_configs(
self, provider: str | None = None, include_values: bool = False
) -> list[PlayerConfig]:
and (provider in (None, raw_conf["provider"]))
]
- @api_command("config/players/get")
+ @api_command("config/players/get", required_role="admin")
async def get_player_config(
self,
player_id: str,
msg = f"No config found for player id {player_id}"
raise KeyError(msg)
- @api_command("config/players/get_entries")
+ @api_command("config/players/get_entries", required_role="admin")
async def get_player_config_entries(
self,
player_id: str,
return_type: None = ...,
) -> ConfigValueType: ...
- @api_command("config/players/get_value")
+ @api_command("config/players/get_value", required_role="admin")
async def get_player_config_value(
self,
player_id: str,
conf_key = f"{CONF_PLAYERS}/{player_id}/default_name"
self.set(conf_key, default_name)
- @api_command("config/players/dsp/get")
+ @api_command("config/players/dsp/get", required_role="admin")
def get_player_dsp_config(self, player_id: str) -> DSPConfig:
"""
Return the DSP Configuration for a player.
)
return config
- @api_command("config/dsp_presets/get")
+ @api_command("config/dsp_presets/get", required_role="admin")
async def get_dsp_presets(self) -> list[DSPConfigPreset]:
"""Return all user-defined DSP presets."""
raw_presets = self.get(CONF_PLAYER_DSP_PRESETS, {})
for core_controller in CONFIGURABLE_CORE_CONTROLLERS
]
- @api_command("config/core/get")
+ @api_command("config/core/get", required_role="admin")
async def get_core_config(self, domain: str) -> CoreConfig:
"""Return configuration for a single core controller."""
raw_conf = self.get(f"{CONF_CORE}/{domain}", {"domain": domain})
return_type: None = ...,
) -> ConfigValueType: ...
- @api_command("config/core/get_value")
+ @api_command("config/core/get_value", required_role="admin")
async def get_core_config_value(
self,
domain: str,
else conf.values[key].default_value
)
- @api_command("config/core/get_entries")
+ @api_command("config/core/get_entries", required_role="admin")
async def get_core_config_entries(
self,
domain: str,
for player_id in list(player_ids):
await self.cmd_ungroup(player_id)
- @api_command("players/create_group_player")
+ @api_command("players/create_group_player", required_role="admin")
async def create_group_player(
self, provider: str, name: str, members: list[str], dynamic: bool = True
) -> Player:
f"Provider {provider} does not support creating group players"
)
- @api_command("players/remove_group_player")
+ @api_command("players/remove_group_player", required_role="admin")
async def remove_group_player(self, player_id: str) -> None:
"""
Remove a group player.
self.delete_player_config(player_id)
self.mass.signal_event(EventType.PLAYER_REMOVED, player_id)
- @api_command("players/remove")
+ @api_command("players/remove", required_role="admin")
async def remove(self, player_id: str) -> None:
"""
Remove a player from a provider.
# add info
routes.append(("GET", "/info", self._handle_server_info))
routes.append(("OPTIONS", "/info", self._handle_cors_preflight))
- # add logging
- routes.append(("GET", "/music-assistant.log", self._handle_application_log))
- routes.append(("OPTIONS", "/music-assistant.log", self._handle_cors_preflight))
# add websocket api
routes.append(("GET", "/ws", self._handle_ws_client))
# also host the image proxy on the webserver
self.logger.exception("Error executing command %s: %s", command_msg.command, error)
return web.Response(status=500, text="Internal server error")
- async def _handle_application_log(self, request: web.Request) -> web.Response:
- """Handle request to get the application log."""
- log_data = await self.mass.get_application_log()
- return web.Response(
- text=log_data,
- content_type="text/text",
- headers={
- "Access-Control-Allow-Origin": "*",
- "Access-Control-Allow-Methods": "GET, OPTIONS",
- "Access-Control-Allow-Headers": "Content-Type, Authorization",
- },
- )
-
async def _handle_api_intro(self, request: web.Request) -> web.Response:
"""Handle request for API introduction/documentation page."""
intro_html_path = str(RESOURCES_DIR.joinpath("api_docs.html"))