cyberhybridhub/scripts/add-firebase-auth-domain.sh
2026-06-04 19:31:04 +00:00

62 lines
2.0 KiB
Bash
Executable File

#!/usr/bin/env bash
# Append hostname(s) to Firebase Auth authorizedDomains via Identity Platform API v2.
# Usage: ./scripts/add-firebase-auth-domain.sh [domain ...]
# Example: ./scripts/add-firebase-auth-domain.sh cyberhybridhub.com www.cyberhybridhub.com
set -euo pipefail
PROJECT="${FIREBASE_PROJECT_ID:-cyberhybridhub}"
DOMAINS=("$@")
if [ "${#DOMAINS[@]}" -eq 0 ]; then
DOMAINS=(cyberhybridhub.com www.cyberhybridhub.com)
fi
if ! command -v gcloud >/dev/null 2>&1; then
echo "gcloud not found. Add domains manually in Firebase Console, or install gcloud and run:" >&2
echo " gcloud auth login" >&2
exit 1
fi
TOKEN="$(gcloud auth print-access-token)"
BASE="https://identitytoolkit.googleapis.com/v2/projects/${PROJECT}/config"
echo "Reading current config for project ${PROJECT}..."
CURRENT="$(curl -s -H "Authorization: Bearer ${TOKEN}" -H "x-goog-user-project: ${PROJECT}" "${BASE}")"
if ! echo "$CURRENT" | python3 -c "import json,sys; json.load(sys.stdin)" 2>/dev/null; then
echo "Failed to read config:" >&2
echo "$CURRENT" >&2
exit 1
fi
UPDATED="$(echo "$CURRENT" | DOMAINS="${DOMAINS[*]}" python3 -c "
import json, os, sys
data = json.load(sys.stdin)
domains = list(data.get('authorizedDomains', []))
for d in os.environ['DOMAINS'].split():
d = d.strip().lower()
if d and d not in domains:
domains.append(d)
data['authorizedDomains'] = domains
print(json.dumps({'authorizedDomains': domains}))
")"
echo "Patching authorizedDomains: ${DOMAINS[*]}"
RESPONSE="$(curl -s -X PATCH \
-H "Authorization: Bearer ${TOKEN}" \
-H "x-goog-user-project: ${PROJECT}" \
-H "Content-Type: application/json" \
"${BASE}?updateMask=authorizedDomains" \
-d "${UPDATED}")"
if echo "$RESPONSE" | python3 -c "import json,sys; json.load(sys.stdin)" 2>/dev/null; then
echo "$RESPONSE" | python3 -m json.tool
echo ""
echo "Done. Verify:"
echo " ./scripts/check-firebase-auth-domains.sh"
else
echo "Patch failed:" >&2
echo "$RESPONSE" >&2
exit 1
fi