| 
							
							
							
						 |  |  | @ -1,38 +1,61 @@ | 
		
	
		
			
				|  |  |  |  | #!/bin/bash | 
		
	
		
			
				|  |  |  |  | set -euo pipefail | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | # Load config | 
		
	
		
			
				|  |  |  |  | source config.conf | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | ENV_DIR="./envs" | 
		
	
		
			
				|  |  |  |  | EXPORT_FOLDER="export" | 
		
	
		
			
				|  |  |  |  | mkdir -p "$EXPORT_FOLDER" | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | # 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") | 
		
	
		
			
				|  |  |  |  | # Find all .env files in the ENV_DIR | 
		
	
		
			
				|  |  |  |  | env_files=("$ENV_DIR"/*.env) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | # Step 2: Parse zones (needs jq) | 
		
	
		
			
				|  |  |  |  | zone_count=$(echo "$zones_json" | jq '.result | length') | 
		
	
		
			
				|  |  |  |  | echo "Found $zone_count zones." | 
		
	
		
			
				|  |  |  |  | if [ ${#env_files[@]} -eq 0 ]; then | 
		
	
		
			
				|  |  |  |  |     echo "❌ No .env files found in $ENV_DIR" | 
		
	
		
			
				|  |  |  |  |     exit 1 | 
		
	
		
			
				|  |  |  |  | fi | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | # 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") | 
		
	
		
			
				|  |  |  |  | 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 | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     TIMESTAMP=$(date +"%Y%m%d_%H%M%S") | 
		
	
		
			
				|  |  |  |  |     OUTPUT_FILE="$EXPORT_FOLDER/${SITE_NAME}_$TIMESTAMP.txt" | 
		
	
		
			
				|  |  |  |  |     if [[ -z "${CLOUDFLARE_API_TOKEN:-}" ]]; then | 
		
	
		
			
				|  |  |  |  |         echo "⚠️  CLOUDFLARE_API_TOKEN not set in $env_file. Skipping." | 
		
	
		
			
				|  |  |  |  |         continue | 
		
	
		
			
				|  |  |  |  |     fi | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     echo "Exporting DNS records for $SITE_NAME..." | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/export" \ | 
		
	
		
			
				|  |  |  |  |     # 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" | tee "$OUTPUT_FILE" | 
		
	
		
			
				|  |  |  |  |         -H "Content-Type: application/json") | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     echo " -> Saved to $OUTPUT_FILE" | 
		
	
		
			
				|  |  |  |  |     # 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="$EXPORT_FOLDER/${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 complete. Files are in the '$EXPORT_FOLDER' folder." | 
		
	
		
			
				|  |  |  |  | echo "🎉 All exports finished. Files are in the '$EXPORT_FOLDER' folder." | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
	
		
			
				
					
					| 
							
							
							
						 |  |  | 
 |