Home Assistant Setup für die LUG
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

61 lines
2.0 KiB

"""HACS http endpoints."""
import os
from homeassistant.components.http import HomeAssistantView
from aiohttp import web
from hacs_frontend import locate_gz, locate_debug_gz
from .hacsbase import Hacs
class HacsFrontend(HomeAssistantView, Hacs):
"""Base View Class for HACS."""
requires_auth = False
name = "hacs_frontend"
url = r"/hacs_frontend/{requested_file:.+}"
async def get(self, request, requested_file): # pylint: disable=unused-argument
"""Handle HACS Web requests."""
if self.configuration.debug:
servefile = await self.hass.async_add_executor_job(locate_debug_gz)
self.logger.debug("Serving DEBUG frontend")
else:
servefile = await self.hass.async_add_executor_job(locate_gz)
if os.path.exists(servefile):
return web.FileResponse(servefile)
return web.Response(status=404)
class HacsPluginView(HomeAssistantView, Hacs):
"""Serve plugins."""
requires_auth = False
name = "hacs_plugin"
url = r"/community_plugin/{requested_file:.+}"
async def get(self, request, requested_file): # pylint: disable=unused-argument
"""Serve plugins for lovelace."""
try:
file = f"{self.system.config_path}/www/community/{requested_file}"
# Serve .gz if it exist
if os.path.exists(file + ".gz"):
file += ".gz"
if os.path.exists(file):
self.logger.debug("Serving {} from {}".format(requested_file, file))
response = web.FileResponse(file)
response.headers["Cache-Control"] = "max-age=0, must-revalidate"
return response
else:
self.logger.error(f"Tried to serve up '{file}' but it does not exist")
except Exception as error: # pylint: disable=broad-except
self.logger.debug(
"there was an issue trying to serve {} - {}".format(
requested_file, error
)
)
return web.Response(status=404)