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
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)
|
|
|