#!/bin/sh set -eu [ "$(id -u)" = "0" ] || { echo "FAIL must_run_as_root"; exit 1; } config=/root/.xtao-secret-agent/config.env [ -r "$config" ] || { echo "FAIL missing_config"; exit 2; } . "$config" master=/root/.xtao-secret-agent/master.key shared=${XTAO_SECRET_AGENT_SHARED:-/volume1/xtao-data/secret-agent} db=${XTAO_SECRET_AGENT_DB:-/root/.xtao-secret-agent/db/xtao-automation.kdbx} image=${XTAO_SECRET_AGENT_PY_IMAGE:-python@sha256:cab2dbf575e971934a81e4622f5aba17aa7929719bd7e31033a3a83b97fd0464} backup=${XTAO_SECRET_AGENT_BACKUP:-/volume2/xtao-backup/secret-agent/kdbx} db_dir=$(dirname "$db") db_name=$(basename "$db") site="$shared/runtime/site" wheels="$shared/runtime/wheels" runner="$shared/bin/secret_agent_runner.py" lock=/root/.xtao-secret-agent/locks/agent.lock [ -s "$master" ] || { echo "FAIL missing_unlock_input"; exit 2; } [ -s "$db" ] || { echo "FAIL missing_kdbx"; exit 2; } [ -r "$runner" ] || { echo "FAIL missing_runner"; exit 2; } mkdir -p "$site" "$backup" "$(dirname "$lock")" chmod 700 "$shared" "$shared/runtime" "$shared/bin" "$backup" "$(dirname "$lock")" ensure_runtime() { if [ -f "$site/pykeepass/__init__.py" ]; then return 0 fi [ -d "$wheels" ] || { echo "FAIL missing_wheels"; exit 2; } /usr/local/bin/docker run --rm --network none \ -v "$wheels:/wheels:ro" \ -v "$site:/site" \ "$image" \ python -m pip install --root-user-action ignore --no-index --find-links /wheels --target /site pykeepass >/dev/null [ -f "$site/pykeepass/__init__.py" ] || { echo "FAIL runtime_install"; exit 2; } } ensure_runtime cmd=${1:-probe} shift || true exec 9>"$lock" flock -x 9 cat "$master" | /usr/local/bin/docker run --rm -i --network none \ -v "$db_dir:/kdbx" \ -v "$backup:/backup" \ -v "$site:/site:ro" \ -v "$runner:/runner/secret_agent_runner.py:ro" \ -e PYTHONPATH=/site \ "$image" \ python /runner/secret_agent_runner.py --db "/kdbx/$db_name" --backup-dir /backup "$cmd" "$@"