fix(precheck): require the explicit notifier decision before host start (#1816, Vikunja 614). Untested

This commit is contained in:
jason.woltje committed 2026-10-23 16:37:24 -05:00
1 parent f9202a7701
commit ea4eaf388f
4 files changed
+142

No files matched your search

+19
View File
@@ -9,6 +9,7 @@
#
# Checks: the config and business file validate; `sudo -n true` fails and
# `id -G` prints one group; bus.tester is off for library and on for factory,
# the explicit notifier config is valid at 0600 in a private 0700 directory;
# and factory refuses a business file with a library project
# (profile-library-business); the run root is 0700; XDG_DATA_HOME is unset or
# <home>/.local/share; node is 24 or later; bwrap runs; the unprivileged port
@@ -172,6 +173,11 @@ const say = (...f) => console.log(f.join("\t"));
let system;
try { system = loadSystem(); } catch (e) { say("CONFIG", "bad", e.message.split("\n")[0]); process.exit(0); }
say("CONFIG", "ok", system.dataRoot, configDir());
try {
const { readNotifyConfig } = await import(`${repo}/packages/cli/src/cli.mjs`);
readNotifyConfig(system.dataRoot, id);
say("NOTIFY", "ok");
} catch (e) { say("NOTIFY", "bad", e.message.split("\n")[0]); }
const file = businessFilePath(id);
let raw;
try { raw = JSON.parse(readFileSync(file, "utf8")); } catch (e) { say("BUSINESS", "bad", `cannot read ${file}: ${e.code ?? e.message}`); process.exit(0); }
@@ -204,6 +210,19 @@ case "$cfg" in
*) refuse "config: the check did not run: $(printf '%s' "$facts" | head -n 1)" ;;
esac
# Use the CLI's exact file/owner/mode/JSON rule; its journal also needs a private directory.
if [ -n "$DATA_ROOT" ]; then
notify_dir="$DATA_ROOT/notify/$BUSINESS"
notify="$(line NOTIFY)"
case "$notify" in
"NOTIFY ok")
if private_dir "$notify_dir"; then ok "notifier config $notify_dir/notify.json validates (directory 0700, file 0600)"
else refuse "notifier config: $notify_dir must be $ME's 0700 directory"; fi ;;
"NOTIFY bad "*) refuse "notifier config: ${notify#NOTIFY bad }" ;;
*) refuse "notifier config: the check did not run" ;;
esac
fi
# Tester and profile.
library="$(line LIBRARY | cut -f2)"
biz="$(line BUSINESS)"