Make sure we only run ingress with installed add-ons (#1903)

* Make sure we only run ingress with installed add-ons

* Make sure we reload tokens after uninstall

* Optimize token handling

* Fix error
This commit is contained in:
Pascal Vizeli 2020-08-13 10:43:36 +02:00 committed by GitHub
parent f5dda39f63
commit a374d4e817
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 6 deletions

View File

@ -45,7 +45,7 @@ class AddonManager(CoreSysAttributes):
"""Return a list of all installed add-ons."""
return list(self.local.values())
def get(self, addon_slug: str) -> Optional[AnyAddon]:
def get(self, addon_slug: str, local_only: bool = False) -> Optional[AnyAddon]:
"""Return an add-on from slug.
Prio:
@ -54,7 +54,9 @@ class AddonManager(CoreSysAttributes):
"""
if addon_slug in self.local:
return self.local[addon_slug]
return self.store.get(addon_slug)
if not local_only:
return self.store.get(addon_slug)
return None
def from_token(self, token: str) -> Optional[Addon]:
"""Return an add-on from Supervisor token."""
@ -156,7 +158,12 @@ class AddonManager(CoreSysAttributes):
raise AddonsError() from None
else:
self.local[slug] = addon
_LOGGER.info("Add-on '%s' successfully installed", slug)
# Reload ingress tokens
if addon.with_ingress:
await self.sys_ingress.reload()
_LOGGER.info("Add-on '%s' successfully installed", slug)
async def uninstall(self, slug: str) -> None:
"""Remove an add-on."""
@ -188,7 +195,9 @@ class AddonManager(CoreSysAttributes):
await self.sys_ingress.update_hass_panel(addon)
# Cleanup Ingress dynamic port assignment
self.sys_ingress.del_dynamic_port(slug)
if addon.with_ingress:
self.sys_create_task(self.sys_ingress.reload())
self.sys_ingress.del_dynamic_port(slug)
# Cleanup discovery data
for message in self.sys_discovery.list_messages:
@ -302,6 +311,7 @@ class AddonManager(CoreSysAttributes):
# Update ingress
if addon.with_ingress:
await self.sys_ingress.reload()
with suppress(HomeAssistantAPIError):
await self.sys_ingress.update_hass_panel(addon)

View File

@ -28,8 +28,8 @@ class Ingress(JsonConfig, CoreSysAttributes):
def get(self, token: str) -> Optional[Addon]:
"""Return addon they have this ingress token."""
if token not in self.tokens:
self._update_token_list()
return self.sys_addons.get(self.tokens.get(token))
return None
return self.sys_addons.get(self.tokens[token], local_only=True)
@property
def sessions(self) -> Dict[str, float]:
@ -61,6 +61,7 @@ class Ingress(JsonConfig, CoreSysAttributes):
async def reload(self) -> None:
"""Reload/Validate sessions."""
self._cleanup_sessions()
self._update_token_list()
async def unload(self) -> None:
"""Shutdown sessions."""