Files
carmanagement/scripts/setup-clerk-keys.sh
2026-06-10 00:40:19 -04:00

113 lines
2.8 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
ENV_FILE="${ROOT_DIR}/.env.local"
SECRET_KEY="${CLERK_SECRET_KEY:-}"
PUBLISHABLE_KEY="${NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY:-${CLERK_PUBLISHABLE_KEY:-}}"
usage() {
cat <<'EOF'
Usage:
scripts/setup-clerk-keys.sh --secret-key sk_test_xxx --publishable-key pk_test_xxx
Options:
--secret-key VALUE Clerk secret key to store as CLERK_SECRET_KEY
--publishable-key VALUE Clerk publishable key to store as NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY
--env-file PATH Target env file (default: .env.local)
--help Show this message
Notes:
- Real Clerk keys are created by Clerk, not generated offline by this script.
- Find them in the Clerk Dashboard > API Keys.
EOF
}
while [[ $# -gt 0 ]]; do
case "$1" in
--secret-key)
SECRET_KEY="${2:-}"
shift 2
;;
--publishable-key)
PUBLISHABLE_KEY="${2:-}"
shift 2
;;
--env-file)
ENV_FILE="${2:-}"
shift 2
;;
--help|-h)
usage
exit 0
;;
*)
echo "Unknown argument: $1" >&2
usage >&2
exit 1
;;
esac
done
prompt_if_missing() {
local var_name="$1"
local label="$2"
local current_value="$3"
if [[ -n "$current_value" ]]; then
printf '%s' "$current_value"
return 0
fi
read -r -p "${label}: " current_value
printf '%s' "$current_value"
}
SECRET_KEY="$(prompt_if_missing "CLERK_SECRET_KEY" "Enter your Clerk secret key (sk_test_... or sk_live_...)" "$SECRET_KEY")"
PUBLISHABLE_KEY="$(prompt_if_missing "NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY" "Enter your Clerk publishable key (pk_test_... or pk_live_...)" "$PUBLISHABLE_KEY")"
validate_prefix() {
local value="$1"
local name="$2"
local prefix_a="$3"
local prefix_b="$4"
if [[ -z "$value" ]]; then
echo "${name} is required." >&2
exit 1
fi
if [[ "$value" != "${prefix_a}"* && "$value" != "${prefix_b}"* ]]; then
echo "${name} must start with ${prefix_a} or ${prefix_b}." >&2
exit 1
fi
}
validate_prefix "$SECRET_KEY" "CLERK_SECRET_KEY" "sk_test_" "sk_live_"
validate_prefix "$PUBLISHABLE_KEY" "NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY" "pk_test_" "pk_live_"
mkdir -p "$(dirname "$ENV_FILE")"
touch "$ENV_FILE"
upsert_env_var() {
local file="$1"
local key="$2"
local value="$3"
local escaped_value
escaped_value="$(printf '%s' "$value" | sed 's/[&|]/\\&/g')"
if grep -q "^${key}=" "$file"; then
sed -i "s|^${key}=.*|${key}=${escaped_value}|" "$file"
else
printf '\n%s=%s\n' "$key" "$value" >> "$file"
fi
}
upsert_env_var "$ENV_FILE" "CLERK_SECRET_KEY" "$SECRET_KEY"
upsert_env_var "$ENV_FILE" "NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY" "$PUBLISHABLE_KEY"
echo "Updated ${ENV_FILE}"
echo " CLERK_SECRET_KEY=${SECRET_KEY:0:10}..."
echo " NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=${PUBLISHABLE_KEY:0:10}..."