mirror of
https://github.com/checktheroads/hyperglass
synced 2024-05-11 05:55:08 +00:00
fix app directory validation
This commit is contained in:
@@ -37,15 +37,13 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||
"""
|
||||
|
||||
# Standard Library
|
||||
import os
|
||||
import sys
|
||||
import getpass
|
||||
from pathlib import Path
|
||||
|
||||
# Third Party
|
||||
import uvloop
|
||||
|
||||
# Project
|
||||
from hyperglass.util import set_app_path
|
||||
from hyperglass.constants import METADATA
|
||||
|
||||
try:
|
||||
@@ -59,39 +57,7 @@ else:
|
||||
_style = "plaintext"
|
||||
stackprinter.set_excepthook(style=_style)
|
||||
|
||||
config_path = None
|
||||
|
||||
_CONFIG_PATHS = (Path.home() / "hyperglass", Path("/etc/hyperglass/"))
|
||||
|
||||
for path in _CONFIG_PATHS:
|
||||
try:
|
||||
if not isinstance(path, Path):
|
||||
path = Path(path)
|
||||
|
||||
if path.exists():
|
||||
tmp = path / "test.tmp"
|
||||
tmp.touch()
|
||||
if tmp.exists():
|
||||
config_path = path
|
||||
tmp.unlink()
|
||||
break
|
||||
except Exception:
|
||||
config_path = None
|
||||
|
||||
if config_path is None:
|
||||
raise RuntimeError(
|
||||
"""
|
||||
No configuration directories were determined to both exist and be readable
|
||||
by hyperglass. hyperglass is running as user '{un}' (UID '{uid}'), and tried to access
|
||||
the following directories:
|
||||
{dir}""".format(
|
||||
un=getpass.getuser(),
|
||||
uid=os.getuid(),
|
||||
dir="\n".join([" - " + str(p) for p in _CONFIG_PATHS]),
|
||||
)
|
||||
)
|
||||
|
||||
os.environ["hyperglass_directory"] = str(config_path)
|
||||
set_app_path()
|
||||
|
||||
uvloop.install()
|
||||
|
||||
|
@@ -14,7 +14,7 @@ from aiofile import AIOFile
|
||||
from pydantic import ValidationError
|
||||
|
||||
# Project
|
||||
from hyperglass.util import log, check_path
|
||||
from hyperglass.util import log, check_path, set_app_path
|
||||
from hyperglass.constants import (
|
||||
CREDIT,
|
||||
LOG_LEVELS,
|
||||
@@ -31,6 +31,8 @@ from hyperglass.configuration.models import routers as _routers
|
||||
from hyperglass.configuration.models import commands as _commands
|
||||
from hyperglass.configuration.markdown import get_markdown
|
||||
|
||||
set_app_path()
|
||||
|
||||
CONFIG_PATH = Path(os.environ["hyperglass_directory"])
|
||||
log.info("Configuration directory: {d}", d=str(CONFIG_PATH))
|
||||
|
||||
|
@@ -365,7 +365,7 @@ async def build_frontend( # noqa: C901
|
||||
Compare repository's static assets with build directory's
|
||||
assets. If the contents don't match, re-copy the files.
|
||||
"""
|
||||
asset_dir = Path(__file__).parent.parent / "assets"
|
||||
asset_dir = Path(__file__).parent.parent / "images"
|
||||
target_dir = app_path / "static" / "images"
|
||||
comparison = dircmp(asset_dir, target_dir, ignore=[".DS_Store"])
|
||||
|
||||
@@ -381,3 +381,43 @@ async def build_frontend( # noqa: C901
|
||||
raise RuntimeError(str(e))
|
||||
|
||||
return True
|
||||
|
||||
|
||||
def set_app_path(required=False):
|
||||
"""Find app directory and set value to environment variable."""
|
||||
import os
|
||||
from pathlib import Path
|
||||
from getpass import getuser
|
||||
|
||||
matched_path = None
|
||||
|
||||
config_paths = (Path.home() / "hyperglass", Path("/etc/hyperglass/"))
|
||||
|
||||
for path in config_paths:
|
||||
try:
|
||||
if path.exists():
|
||||
tmp = path / "test.tmp"
|
||||
tmp.touch()
|
||||
if tmp.exists():
|
||||
matched_path = path
|
||||
tmp.unlink()
|
||||
break
|
||||
except Exception:
|
||||
matched_path = None
|
||||
|
||||
if required and matched_path is None:
|
||||
# Only raise an error if required is True
|
||||
raise RuntimeError(
|
||||
"""
|
||||
No configuration directories were determined to both exist and be readable
|
||||
by hyperglass. hyperglass is running as user '{un}' (UID '{uid}'), and tried
|
||||
to access the following directories:
|
||||
{dir}""".format(
|
||||
un=getuser(),
|
||||
uid=os.getuid(),
|
||||
dir="\n".join([" - " + str(p) for p in config_paths]),
|
||||
)
|
||||
)
|
||||
|
||||
os.environ["hyperglass_directory"] = str(matched_path)
|
||||
return True
|
||||
|
Reference in New Issue
Block a user