| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- #!/usr/bin/env bash
- # generate-jwt-secret.sh — Generate a BA_AUTHD_JWT_SECRET and append
- # it to .env (or print to stdout if --print).
- #
- # Usage:
- # scripts/generate-jwt-secret.sh # appends/writes .env
- # scripts/generate-jwt-secret.sh --print # prints to stdout only
- #
- # In docker-compose the secret is read via ${BA_AUTHD_JWT_SECRET:?}
- # (required), so a fresh checkout won't start until you run this.
- # The generated secret is 48 random bytes encoded as base64 (= 64
- # chars, well above the 32-byte minimum).
- #
- # Idempotent: if .env already has a non-empty value, the script
- # does nothing (use --force to overwrite).
- set -euo pipefail
- ENV_FILE="$(dirname "$0")/../.env"
- PRINT_ONLY=0
- FORCE=0
- for arg in "$@"; do
- case "$arg" in
- --print) PRINT_ONLY=1 ;;
- --force) FORCE=1 ;;
- -h|--help)
- echo "usage: $0 [--print] [--force]" >&2
- exit 0
- ;;
- esac
- done
- # Read existing value if .env exists
- existing=""
- if [[ -f "$ENV_FILE" ]]; then
- existing=$(grep -E '^BA_AUTHD_JWT_SECRET=' "$ENV_FILE" | tail -1 | cut -d= -f2- || true)
- fi
- if [[ -n "$existing" && $FORCE -eq 0 ]]; then
- if [[ $PRINT_ONLY -eq 1 ]]; then
- echo "$existing"
- else
- echo "BA_AUTHD_JWT_SECRET already set in $ENV_FILE (use --force to overwrite)"
- fi
- exit 0
- fi
- # 48 random bytes = 64 base64 chars. Plenty for HS256.
- new_secret=$(openssl rand -base64 48)
- if [[ $PRINT_ONLY -eq 1 ]]; then
- echo "$new_secret"
- exit 0
- fi
- # Write/append to .env
- if [[ ! -f "$ENV_FILE" ]]; then
- # Start from .env.example if present
- if [[ -f "${ENV_FILE}.example" ]]; then
- cp "${ENV_FILE}.example" "$ENV_FILE"
- else
- touch "$ENV_FILE"
- fi
- fi
- if grep -qE '^BA_AUTHD_JWT_SECRET=' "$ENV_FILE"; then
- # Replace existing line
- tmp=$(mktemp)
- grep -vE '^BA_AUTHD_JWT_SECRET=' "$ENV_FILE" > "$tmp"
- echo "BA_AUTHD_JWT_SECRET=$new_secret" >> "$tmp"
- mv "$tmp" "$ENV_FILE"
- echo "updated BA_AUTHD_JWT_SECRET in $ENV_FILE"
- else
- # Append
- echo "" >> "$ENV_FILE"
- echo "# Generated by scripts/generate-jwt-secret.sh on $(date -u +%Y-%m-%dT%H:%M:%SZ)" >> "$ENV_FILE"
- echo "BA_AUTHD_JWT_SECRET=$new_secret" >> "$ENV_FILE"
- echo "appended BA_AUTHD_JWT_SECRET to $ENV_FILE"
- fi
- echo ""
- echo "next steps:"
- echo " 1. docker compose up -d authd # starts the IdP"
- echo " 2. bash scripts/m13a_smoke.sh # end-to-end smoke"
|