Files
git.stella-ops.org/scripts/rotate-policy-cli-secret.sh
root 68da90a11a
Some checks failed
Docs CI / lint-and-preview (push) Has been cancelled
Restructure solution layout by module
2025-10-28 15:10:40 +02:00

64 lines
1.4 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
usage() {
cat <<'EOF'
Usage: rotate-policy-cli-secret.sh [--output <path>] [--dry-run]
Generates a new random shared secret suitable for the Authority
`policy-cli` client and optionally writes it to the target file
in `etc/secrets/` with the standard header comment.
Options:
--output <path> Destination file (default: etc/secrets/policy-cli.secret)
--dry-run Print the generated secret to stdout without writing.
-h, --help Show this help.
EOF
}
OUTPUT="etc/secrets/policy-cli.secret"
DRY_RUN=0
while [[ $# -gt 0 ]]; do
case "$1" in
--output)
OUTPUT="$2"
shift 2
;;
--dry-run)
DRY_RUN=1
shift
;;
-h|--help)
usage
exit 0
;;
*)
echo "Unknown argument: $1" >&2
usage >&2
exit 1
;;
esac
done
if ! command -v openssl >/dev/null 2>&1; then
echo "openssl is required to generate secrets" >&2
exit 1
fi
# Generate a 48-byte random secret, base64 encoded without padding.
RAW_SECRET=$(openssl rand -base64 48 | tr -d '\n=')
SECRET="policy-cli-${RAW_SECRET}"
if [[ "$DRY_RUN" -eq 1 ]]; then
echo "$SECRET"
exit 0
fi
cat <<EOF > "$OUTPUT"
# generated $(date -u +%Y-%m-%dT%H:%M:%SZ) via scripts/rotate-policy-cli-secret.sh
$SECRET
EOF
echo "Wrote new policy-cli secret to $OUTPUT"