scripts: add update-service enrollment helper
This commit is contained in:
97
scripts/enroll_update_service.sh
Executable file
97
scripts/enroll_update_service.sh
Executable file
@ -0,0 +1,97 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ENV_FILE="${ENV_FILE:-/etc/skd/env}"
|
||||
SERVICE_URL="${SKD_UPDATE_SERVICE_URL:-}"
|
||||
PROJECT_ID="${SKD_UPDATE_PROJECT_ID:-}"
|
||||
TOKEN_FILE="${SKD_UPDATE_TOKEN_FILE:-}"
|
||||
CLIENT_ID=""
|
||||
SOFTWARE_ID="safe-kiddo"
|
||||
ENROLL_TOKEN=""
|
||||
OUTPUT_PATH=""
|
||||
|
||||
usage() {
|
||||
cat <<'EOF'
|
||||
Usage: enroll_update_service.sh --enroll-token TOKEN [options]
|
||||
|
||||
Options:
|
||||
--service-url URL Update-Service URL (default: SKD_UPDATE_SERVICE_URL)
|
||||
--project-id ID Project ID (default: SKD_UPDATE_PROJECT_ID)
|
||||
--client-id ID Client ID (default: hostname)
|
||||
--software-id ID Software ID (default: safe-kiddo)
|
||||
--output PATH Write token to PATH (default: SKD_UPDATE_TOKEN_FILE if set)
|
||||
--env-file PATH Read env file (default: /etc/skd/env)
|
||||
-h, --help Show this help
|
||||
EOF
|
||||
}
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
--service-url) SERVICE_URL="$2"; shift 2 ;;
|
||||
--project-id) PROJECT_ID="$2"; shift 2 ;;
|
||||
--client-id) CLIENT_ID="$2"; shift 2 ;;
|
||||
--software-id) SOFTWARE_ID="$2"; shift 2 ;;
|
||||
--enroll-token) ENROLL_TOKEN="$2"; shift 2 ;;
|
||||
--output) OUTPUT_PATH="$2"; shift 2 ;;
|
||||
--env-file) ENV_FILE="$2"; shift 2 ;;
|
||||
-h|--help) usage; exit 0 ;;
|
||||
*) echo "Unknown option: $1" >&2; usage; exit 1 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ -f "${ENV_FILE}" ]]; then
|
||||
set -a
|
||||
# shellcheck disable=SC1090
|
||||
. "${ENV_FILE}"
|
||||
set +a
|
||||
fi
|
||||
|
||||
SERVICE_URL="${SERVICE_URL:-${SKD_UPDATE_SERVICE_URL:-}}"
|
||||
PROJECT_ID="${PROJECT_ID:-${SKD_UPDATE_PROJECT_ID:-}}"
|
||||
TOKEN_FILE="${OUTPUT_PATH:-${TOKEN_FILE}}"
|
||||
CLIENT_ID="${CLIENT_ID:-$(hostname)}"
|
||||
|
||||
if [[ -z "${SERVICE_URL}" || -z "${PROJECT_ID}" ]]; then
|
||||
echo "Missing service URL or project ID." >&2
|
||||
echo "Set SKD_UPDATE_SERVICE_URL and SKD_UPDATE_PROJECT_ID or pass --service-url/--project-id." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -z "${ENROLL_TOKEN}" ]]; then
|
||||
echo "Missing --enroll-token." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
payload=$(python3 - <<PY
|
||||
import json
|
||||
print(json.dumps({
|
||||
"project_id": "${PROJECT_ID}",
|
||||
"client_id": "${CLIENT_ID}",
|
||||
"software_id": "${SOFTWARE_ID}",
|
||||
"enroll_token": "${ENROLL_TOKEN}"
|
||||
}))
|
||||
PY
|
||||
)
|
||||
|
||||
response=$(curl -fsS -H "Content-Type: application/json" \
|
||||
-d "${payload}" "${SERVICE_URL%/}/v1/enroll")
|
||||
|
||||
token=$(python3 - <<PY
|
||||
import json, sys
|
||||
data = json.loads(sys.stdin.read())
|
||||
token = data.get("token", "")
|
||||
if not token:
|
||||
sys.exit("Enrollment response missing token")
|
||||
print(token)
|
||||
PY
|
||||
<<<"${response}")
|
||||
|
||||
if [[ -n "${TOKEN_FILE}" ]]; then
|
||||
umask 177
|
||||
mkdir -p "$(dirname "${TOKEN_FILE}")"
|
||||
printf '%s' "${token}" > "${TOKEN_FILE}"
|
||||
chmod 600 "${TOKEN_FILE}"
|
||||
echo "Token written to ${TOKEN_FILE}"
|
||||
else
|
||||
echo "${token}"
|
||||
fi
|
||||
Reference in New Issue
Block a user