- Add comprehensive database migrations (001-024) for schema evolution - Enhance API schema with expanded type definitions and resolvers - Add new middleware: audit logging, rate limiting, MFA enforcement, security, tenant auth - Implement new services: AI optimization, billing, blockchain, compliance, marketplace - Add adapter layer for cloud integrations (Cloudflare, Kubernetes, Proxmox, storage) - Update Crossplane provider with enhanced VM management capabilities - Add comprehensive test suite for API endpoints and services - Update frontend components with improved GraphQL subscriptions and real-time updates - Enhance security configurations and headers (CSP, CORS, etc.) - Update documentation and configuration files - Add new CI/CD workflows and validation scripts - Implement design system improvements and UI enhancements
179 lines
5.1 KiB
Bash
Executable File
179 lines
5.1 KiB
Bash
Executable File
#!/bin/bash
|
|
# get-cloudflare-info.sh
|
|
# Gets Cloudflare Zone ID and Account ID using credentials from .env
|
|
|
|
set -euo pipefail
|
|
|
|
# Load environment variables from .env if it exists
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
if [ -f "${SCRIPT_DIR}/../.env" ]; then
|
|
set -a
|
|
source <(grep -v '^#' "${SCRIPT_DIR}/../.env" | grep -v '^$' | sed 's/^/export /')
|
|
set +a
|
|
fi
|
|
|
|
# Colors
|
|
GREEN='\033[0;32m'
|
|
RED='\033[0;31m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m'
|
|
|
|
DOMAIN="${DOMAIN:-sankofa.nexus}"
|
|
API_TOKEN="${CLOUDFLARE_API_TOKEN:-}"
|
|
API_KEY="${CLOUDFLARE_API_KEY:-}"
|
|
API_EMAIL="${CLOUDFLARE_EMAIL:-}"
|
|
|
|
log() {
|
|
echo -e "${GREEN}[INFO]${NC} $1"
|
|
}
|
|
|
|
error() {
|
|
echo -e "${RED}[ERROR]${NC} $1" >&2
|
|
exit 1
|
|
}
|
|
|
|
warn() {
|
|
echo -e "${YELLOW}[WARN]${NC} $1"
|
|
}
|
|
|
|
info() {
|
|
echo -e "${BLUE}[INFO]${NC} $1"
|
|
}
|
|
|
|
check_auth() {
|
|
if [ -z "$API_TOKEN" ] && [ -z "$API_KEY" ]; then
|
|
error "Either CLOUDFLARE_API_TOKEN or CLOUDFLARE_API_KEY must be set"
|
|
fi
|
|
|
|
if [ -z "$API_TOKEN" ] && [ -z "$API_EMAIL" ]; then
|
|
error "If using CLOUDFLARE_API_KEY, CLOUDFLARE_EMAIL must also be set"
|
|
fi
|
|
}
|
|
|
|
get_zone_id() {
|
|
log "Getting Zone ID for ${DOMAIN}..."
|
|
|
|
local zone_id
|
|
if [ -n "$API_TOKEN" ]; then
|
|
zone_id=$(curl -s -X GET \
|
|
-H "Authorization: Bearer ${API_TOKEN}" \
|
|
-H "Content-Type: application/json" \
|
|
"https://api.cloudflare.com/client/v4/zones?name=${DOMAIN}" | \
|
|
jq -r '.result[0].id')
|
|
else
|
|
zone_id=$(curl -s -X GET \
|
|
-H "X-Auth-Email: ${API_EMAIL}" \
|
|
-H "X-Auth-Key: ${API_KEY}" \
|
|
-H "Content-Type: application/json" \
|
|
"https://api.cloudflare.com/client/v4/zones?name=${DOMAIN}" | \
|
|
jq -r '.result[0].id')
|
|
fi
|
|
|
|
if [ "$zone_id" != "null" ] && [ -n "$zone_id" ]; then
|
|
echo "CLOUDFLARE_ZONE_ID=${zone_id}"
|
|
log "✓ Zone ID: ${zone_id}"
|
|
return 0
|
|
else
|
|
warn "Could not get Zone ID for ${DOMAIN}"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
get_account_id() {
|
|
log "Getting Account ID..."
|
|
|
|
local account_id
|
|
if [ -n "$API_TOKEN" ]; then
|
|
account_id=$(curl -s -X GET \
|
|
-H "Authorization: Bearer ${API_TOKEN}" \
|
|
-H "Content-Type: application/json" \
|
|
"https://api.cloudflare.com/client/v4/accounts" | \
|
|
jq -r '.result[0].id')
|
|
else
|
|
account_id=$(curl -s -X GET \
|
|
-H "X-Auth-Email: ${API_EMAIL}" \
|
|
-H "X-Auth-Key: ${API_KEY}" \
|
|
-H "Content-Type: application/json" \
|
|
"https://api.cloudflare.com/client/v4/accounts" | \
|
|
jq -r '.result[0].id')
|
|
fi
|
|
|
|
if [ "$account_id" != "null" ] && [ -n "$account_id" ]; then
|
|
echo "CLOUDFLARE_ACCOUNT_ID=${account_id}"
|
|
log "✓ Account ID: ${account_id}"
|
|
return 0
|
|
else
|
|
warn "Could not get Account ID"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
update_env_file() {
|
|
local zone_id=$1
|
|
local account_id=$2
|
|
|
|
local env_file="${SCRIPT_DIR}/../.env"
|
|
|
|
if [ ! -f "$env_file" ]; then
|
|
warn ".env file not found, creating it..."
|
|
touch "$env_file"
|
|
fi
|
|
|
|
# Update or add Zone ID
|
|
if grep -q "^CLOUDFLARE_ZONE_ID=" "$env_file"; then
|
|
sed -i "s/^CLOUDFLARE_ZONE_ID=.*/CLOUDFLARE_ZONE_ID=${zone_id}/" "$env_file"
|
|
else
|
|
echo "CLOUDFLARE_ZONE_ID=${zone_id}" >> "$env_file"
|
|
fi
|
|
|
|
# Update or add Account ID
|
|
if grep -q "^CLOUDFLARE_ACCOUNT_ID=" "$env_file"; then
|
|
sed -i "s/^CLOUDFLARE_ACCOUNT_ID=.*/CLOUDFLARE_ACCOUNT_ID=${account_id}/" "$env_file"
|
|
else
|
|
echo "CLOUDFLARE_ACCOUNT_ID=${account_id}" >> "$env_file"
|
|
fi
|
|
|
|
log "✓ Updated .env file"
|
|
}
|
|
|
|
main() {
|
|
echo ""
|
|
echo "╔══════════════════════════════════════════════════════════════╗"
|
|
echo "║ Cloudflare Information Retrieval ║"
|
|
echo "╚══════════════════════════════════════════════════════════════╝"
|
|
echo ""
|
|
|
|
check_auth
|
|
|
|
local zone_id_output=$(get_zone_id)
|
|
local account_id_output=$(get_account_id)
|
|
|
|
echo ""
|
|
info "Retrieved Information:"
|
|
echo "$zone_id_output"
|
|
echo "$account_id_output"
|
|
|
|
# Extract values
|
|
local zone_id=$(echo "$zone_id_output" | cut -d'=' -f2)
|
|
local account_id=$(echo "$account_id_output" | cut -d'=' -f2)
|
|
|
|
if [ -n "$zone_id" ] && [ "$zone_id" != "null" ] && [ -n "$account_id" ] && [ "$account_id" != "null" ]; then
|
|
echo ""
|
|
read -p "Update .env file with these values? (y/N): " -n 1 -r
|
|
echo
|
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|
update_env_file "$zone_id" "$account_id"
|
|
else
|
|
info "Values not saved. Add them manually to .env:"
|
|
echo "$zone_id_output"
|
|
echo "$account_id_output"
|
|
fi
|
|
else
|
|
warn "Some values could not be retrieved. Check your credentials and domain."
|
|
fi
|
|
}
|
|
|
|
main "$@"
|
|
|