mirror of
https://github.com/eitchtee/WYGIWYH.git
synced 2026-11-13 12:23:44 +01:00
Import uploads were always written to /usr/src/app/temp, presets were read from /usr/src/app/import_presets and the caches lived in /var/tmp, so WYGIWYH only worked from the Docker image's layout. Running it as a systemd service with a strict sandbox, or on an immutable distro like NixOS, needs these folders to follow the app or be configurable. - Presets are read from IMPORT_PRESETS_ROOT, the import_presets folder next to the app. - Uploads wait in IMPORT_TEMP_ROOT, the temp folder next to the app by default, and movable with the IMPORT_TEMP_ROOT env var. The web views, the API and the import service all use it. - The file-based caches live under CACHE_ROOT, /var/tmp by default, and movable with the CACHE_ROOT env var. In the Docker image the app sits in /usr/src/app, so every default resolves to the same folder as before. The import service checked that a file was inside the temp folder with a plain string prefix, which also accepted sibling folders such as /usr/src/app/temp-other. It now compares paths. CI no longer needs to create /usr/src/app before running the tests. Fixes #472
46 lines
1.6 KiB
Python
46 lines
1.6 KiB
Python
import json
|
|
from pathlib import Path
|
|
|
|
from django.conf import settings
|
|
|
|
from apps.import_app.models import ImportProfile
|
|
|
|
|
|
class PresetService:
|
|
@classmethod
|
|
def get_all_presets(cls):
|
|
presets = []
|
|
|
|
for folder in settings.IMPORT_PRESETS_ROOT.iterdir():
|
|
if folder.is_dir():
|
|
manifest_path = folder / "manifest.json"
|
|
config_path = folder / "config.yml"
|
|
|
|
if manifest_path.exists() and config_path.exists():
|
|
with open(manifest_path) as f:
|
|
manifest = json.load(f)
|
|
|
|
with open(config_path) as f:
|
|
config = json.dumps(f.read())
|
|
|
|
try:
|
|
preset = {
|
|
"name": manifest.get("name", folder.name),
|
|
"description": manifest.get("description", ""),
|
|
"message": json.dumps(manifest.get("message", "")),
|
|
"authors": manifest.get("author", "").split(","),
|
|
"schema_version": (int(manifest.get("schema_version", 1))),
|
|
"folder_name": folder.name,
|
|
"config": config,
|
|
}
|
|
|
|
ImportProfile.Versions(
|
|
preset["schema_version"]
|
|
) # Check if schema version is valid
|
|
except Exception as e:
|
|
pass
|
|
else:
|
|
presets.append(preset)
|
|
|
|
return presets
|