67 lines
1.6 KiB
Bash
67 lines
1.6 KiB
Bash
|
|
#!/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
|
||
|
|
|