sss
This commit is contained in:
@@ -13,6 +13,13 @@ def env(name: str, default: str) -> str:
|
||||
return value if value not in {None, ""} else default
|
||||
|
||||
|
||||
def env_enabled(name: str, default: bool = False) -> bool:
|
||||
raw = os.environ.get(name)
|
||||
if raw in {None, ""}:
|
||||
return default
|
||||
return raw.strip().lower() in {"1", "true", "yes", "on", "enable", "enabled"}
|
||||
|
||||
|
||||
def q(value: str) -> str:
|
||||
return json.dumps(str(value), ensure_ascii=False)
|
||||
|
||||
@@ -49,6 +56,8 @@ def render(count: int) -> str:
|
||||
base_profile = env("NEKO_PROFILE_HOST_DIR", str(Path.cwd() / "data" / "chromium-profile-v2"))
|
||||
http_base = int(env("NEKO_HTTP_PORT", "9200"))
|
||||
mux_base = int(env("NEKO_WEBRTC_TCPMUX", "52300"))
|
||||
managed_policies = env_enabled("NEKO_MANAGED_POLICIES", False)
|
||||
policy_dir = "./policies" if managed_policies else "./no-managed-policies"
|
||||
|
||||
lines = [
|
||||
"# Generated by tools/render_neko_compose.py - do not hand-edit",
|
||||
@@ -85,6 +94,7 @@ def render(count: int) -> str:
|
||||
' NEKO_PLUGINS_DIR: "/etc/neko/plugins/"',
|
||||
f" NEKO_START_URL: {q(start_url)}",
|
||||
f" NEKO_BROWSER_RENDER_MODE: {q(render_mode)}",
|
||||
f" NEKO_MANAGED_POLICIES: {q('1' if managed_policies else '0')}",
|
||||
f" NEKO_WEBRTC_EPR: {q(epr)}",
|
||||
f" NEKO_WEBRTC_TCPMUX: {q(tcp_mux)}",
|
||||
f" NEKO_WEBRTC_UDPMUX: {q(udp_mux)}",
|
||||
@@ -96,8 +106,14 @@ def render(count: int) -> str:
|
||||
" volumes:",
|
||||
f" - {q(f'{profile}:/home/neko/.config/chromium')}",
|
||||
f" - {q(f'{profile}:/home/neko/.config/google-chrome')}",
|
||||
' - "./policies:/etc/chromium/policies/managed:ro"',
|
||||
' - "./policies:/etc/opt/chrome/policies/managed:ro"',
|
||||
f" - {q(f'{policy_dir}:/etc/chromium/policies/managed:ro')}",
|
||||
f" - {q(f'{policy_dir}:/etc/chromium-browser/policies/managed:ro')}",
|
||||
f" - {q(f'{policy_dir}:/etc/opt/chrome/policies/managed:ro')}",
|
||||
' - "./external-extensions:/opt/google/chrome/extensions:ro"',
|
||||
' - "./external-extensions:/usr/share/chromium/extensions:ro"',
|
||||
' - "./external-extensions:/usr/share/chromium-browser/extensions:ro"',
|
||||
' - "./tampermonkey-seed:/etc/neko/tampermonkey-seed:ro"',
|
||||
' - "./youtube-auto-dismiss-extension:/etc/neko/youtube-auto-dismiss-extension:ro"',
|
||||
' - "./provisioning:/var/www/provisioning:ro"',
|
||||
' - "./browser-launch.sh:/etc/neko/browser-launch.sh:ro"',
|
||||
f" - {q(f'./{supervisor_conf}:/etc/neko/supervisord/{supervisor_conf}:ro')}",
|
||||
|
||||
@@ -285,6 +285,7 @@ def verify_neko(checks: list[dict[str, Any]], env: dict[str, str], *, timeout: f
|
||||
if not env_flag(env, "ENABLE_NEKO", True):
|
||||
check(checks, "neko_enabled", "Neko enabled", True, required=False, detail="disabled")
|
||||
return
|
||||
managed_policies = env_flag(env, "NEKO_MANAGED_POLICIES", False)
|
||||
docker_ok, names, err = docker_ps_names()
|
||||
check(
|
||||
checks,
|
||||
@@ -332,6 +333,30 @@ def verify_neko(checks: list[dict[str, Any]], env: dict[str, str], *, timeout: f
|
||||
detail=(out or err2).strip(),
|
||||
hint="Make services/neko/browser-launch.sh executable and restart Neko.",
|
||||
)
|
||||
code, out, err2 = docker_exec(
|
||||
name,
|
||||
"find /etc/chromium/policies/managed /etc/chromium-browser/policies/managed /etc/opt/chrome/policies/managed "
|
||||
"-maxdepth 1 -type f -name '*.json' -print 2>/dev/null | head -1",
|
||||
timeout=timeout,
|
||||
)
|
||||
policy_file = out.strip()
|
||||
check(
|
||||
checks,
|
||||
f"neko_{idx}_personal_policy_mode",
|
||||
f"{name} personal Chrome policy mode",
|
||||
bool(policy_file) if managed_policies else not bool(policy_file),
|
||||
required=True,
|
||||
detail=(
|
||||
f"managed policy enabled: {policy_file}"
|
||||
if managed_policies and policy_file
|
||||
else ("no managed policy JSON" if not policy_file else f"unexpected managed policy: {policy_file}")
|
||||
),
|
||||
hint=(
|
||||
"NEKO_MANAGED_POLICIES=1 should mount services/neko/policies into Chrome policy dirs."
|
||||
if managed_policies
|
||||
else "Default personal mode should mount services/neko/no-managed-policies over Chrome policy dirs."
|
||||
),
|
||||
)
|
||||
code, out, err2 = docker_exec(name, "supervisorctl status tampermonkey-provisioning", timeout=timeout)
|
||||
check(
|
||||
checks,
|
||||
@@ -356,7 +381,14 @@ def verify_neko(checks: list[dict[str, Any]], env: dict[str, str], *, timeout: f
|
||||
)
|
||||
code, out, err2 = docker_exec(
|
||||
name,
|
||||
"grep -R -a -l 'YouTube Studio Auto Dismiss' /home/neko/.config/google-chrome/Default /home/neko/.config/chromium/Default 2>/dev/null | head -1",
|
||||
"for base in /home/neko/.config/google-chrome/Default /home/neko/.config/chromium/Default; do "
|
||||
"for area in 'Local Extension Settings' 'Managed Extension Settings'; do "
|
||||
"dir=\"$base/$area/dhdgffkkebhmkfjojejmpbldmpobfkfo\"; "
|
||||
"if [ -d \"$dir\" ] && grep -R -a -l 'YouTube Studio Auto Dismiss' \"$dir\" 2>/dev/null | head -1; then exit 0; fi; "
|
||||
"done; done; "
|
||||
"for cmd in /proc/[0-9]*/cmdline; do "
|
||||
"tr '\\0' '\\n' <\"$cmd\" 2>/dev/null | grep -q -- '--load-extension=.*youtube-auto-dismiss-extension' && echo '--load-extension youtube-auto-dismiss-extension' && exit 0; "
|
||||
"done; exit 1",
|
||||
timeout=timeout,
|
||||
)
|
||||
check(
|
||||
@@ -364,8 +396,13 @@ def verify_neko(checks: list[dict[str, Any]], env: dict[str, str], *, timeout: f
|
||||
f"neko_{idx}_tm_storage",
|
||||
f"{name} Tampermonkey script imported",
|
||||
code == 0 and bool(out.strip()),
|
||||
required=True,
|
||||
detail=out.strip() or err2.strip() or "not found",
|
||||
hint="Open Neko once or restart the browser so Chrome policy imports the provisioning payload.",
|
||||
hint=(
|
||||
"Open Neko once or restart the browser so Chrome policy imports the provisioning payload."
|
||||
if managed_policies
|
||||
else "Restart Neko so browser-launch.sh copies services/neko/tampermonkey-seed into the personal profile."
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user