70 lines
2.0 KiB
Bash
Executable File
70 lines
2.0 KiB
Bash
Executable File
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
# Get the directory where the script is located
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
ENV_DIR="$SCRIPT_DIR/envs"
|
|
EXPORT_FOLDER="$SCRIPT_DIR/export"
|
|
|
|
# Create export folder and a dated subfolder with time (YYYY-MM-DD_HH-MM-SS)
|
|
mkdir -p "$EXPORT_FOLDER"
|
|
DATE_DIR="$(date +"%Y-%m-%d_%H-%M-%S")"
|
|
OUTPUT_DIR="$EXPORT_FOLDER/$DATE_DIR"
|
|
mkdir -p "$OUTPUT_DIR"
|
|
|
|
# Find all .env files in the ENV_DIR
|
|
env_files=("$ENV_DIR"/*.env)
|
|
|
|
if [ ${#env_files[@]} -eq 0 ]; then
|
|
echo "No .env files found in $ENV_DIR"
|
|
exit 1
|
|
fi
|
|
|
|
for env_file in "${env_files[@]}"; do
|
|
echo "Processing environment file: $env_file"
|
|
|
|
# Load environment variables from .env file
|
|
set -o allexport
|
|
source "$env_file"
|
|
set +o allexport
|
|
|
|
if [[ -z "${CLOUDFLARE_API_TOKEN:-}" ]]; then
|
|
echo "CLOUDFLARE_API_TOKEN not set in $env_file. Skipping."
|
|
continue
|
|
fi
|
|
|
|
# Step 1: Fetch all zones from Cloudflare
|
|
echo "Fetching zone list from Cloudflare..."
|
|
zones_json=$(curl -s https://api.cloudflare.com/client/v4/zones \
|
|
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
|
|
-H "Content-Type: application/json")
|
|
|
|
# Step 2: Parse zones (needs jq)
|
|
zone_count=$(echo "$zones_json" | jq '.result | length')
|
|
echo "Found $zone_count zones."
|
|
|
|
# Step 3: Loop through zones
|
|
for ((i=0; i<zone_count; i++)); do
|
|
ZONE_ID=$(echo "$zones_json" | jq -r ".result[$i].id")
|
|
SITE_NAME=$(echo "$zones_json" | jq -r ".result[$i].name")
|
|
|
|
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
|
|
OUTPUT_FILE="$OUTPUT_DIR/${SITE_NAME}_$TIMESTAMP.txt"
|
|
|
|
echo "Exporting DNS records for $SITE_NAME..."
|
|
|
|
curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/export" \
|
|
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
|
|
-H "Content-Type: application/json" | tee "$OUTPUT_FILE"
|
|
|
|
echo " -> Saved to $OUTPUT_FILE"
|
|
done
|
|
|
|
echo "Export complete for $env_file"
|
|
echo ""
|
|
done
|
|
|
|
echo "All exports finished. Files are in the '$OUTPUT_DIR' folder."
|
|
|