#!/bin/bash # Exit if any command fails set -e # Directory containing all .env config files ENV_DIR="./zones" # Fetch current IP from Mullvad echo "[*] Fetching IP info from Mullvad..." IP_INFO=$(curl -s https://ipv4.am.i.mullvad.net/json) IP=$(echo "$IP_INFO" | jq -r '.ip') if [[ -z "$IP" ]]; then echo "[!] Failed to extract IP address." exit 1 fi echo "[*] Current public IP is: $IP" echo # Loop through all .env files in ENV_DIR for ENV_FILE in "$ENV_DIR"/*.env; do echo "[*] Processing config: $ENV_FILE" # Load environment variables set -a source "$ENV_FILE" set +a # Check required variables if [[ -z "$ZONE_ID" || -z "$DNS_RECORD_ID" || -z "$CLOUDFLARE_EMAIL" || -z "$CLOUDFLARE_API_KEY" || -z "$DNS_NAME" ]]; then echo "[!] Missing required variables in $ENV_FILE" continue fi # Make the API request echo "[*] Updating Cloudflare record for $DNS_NAME..." UPDATE_RESPONSE=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$DNS_RECORD_ID" \ -H "Content-Type: application/json" \ -H "X-Auth-Email: $CLOUDFLARE_EMAIL" \ -H "X-Auth-Key: $CLOUDFLARE_API_KEY" \ -d '{ "name": "'$DNS_NAME'", "ttl": 3600, "type": "A", "comment": "Domain verification record", "content": "'$IP'", "proxied": true }') SUCCESS=$(echo "$UPDATE_RESPONSE" | jq -r '.success') if [[ "$SUCCESS" == "true" ]]; then echo "[+] $DNS_NAME updated successfully!" else echo "[!] Failed to update $DNS_NAME." echo "Cloudflare response:" echo "$UPDATE_RESPONSE" fi echo done