diff options
Diffstat (limited to 'update.sh')
-rwxr-xr-x | update.sh | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/update.sh b/update.sh new file mode 100755 index 0000000..9fba7be --- /dev/null +++ b/update.sh @@ -0,0 +1,40 @@ +#!/usr/bin/env sh +set -e +if [ $# -ne 2 ]; then + echo "Usage: ./update.sh DOMAIN API_CONFIG" >&2 + exit 1 +fi + +DOMAIN=$1 +API_CONFIG=$2 + +source $API_CONFIG +config_ip=$(dig +short $DOMAIN) +actual_ip=$(curl https://ipinfo.io/ip) + +if [ "$config_ip" != "$actual_ip" ]; then + echo "Updating IP from $config_id to $actual_ip for $DOMAIN" + res=$(curl -X POST "https://porkbun.com/api/json/v3/dns/retrieve/$DOMAIN" \ + -d "{ \"secretapikey\": \"${SECRETAPIKEY}\", \"apikey\": \"${APIKEY}\" }") + status=$(echo "$res" | jq -r '.status') + if [ "$status" != "SUCCESS" ]; then + echo "Failed to fetch domain ID:\n\t$res" >&2 + exit 1 + fi + ID=$(echo "$res" | jq -r ".records[] | select(.type == \"A\") | select(.content == \"${config_ip}\") | .id") + res=$(curl -X POST "https://porkbun.com/api/json/v3/dns/edit/$DOMAIN/$ID" \ + -d "{ \"secretapikey\": \"${SECRETAPIKEY}\", \"apikey\": \"${APIKEY}\", \"content\": \"${actual_ip}\", \"ttl\": \"600\", \"type\": \"A\", \"name\": \"\" }") + status=$(echo "$res" | jq -r '.status') + if [ "$status" == "SUCCESS" ]; then + echo "Successfully updated $DOMAIN record $ID from $config_ip to $actual_ip" + else + echo "Failed to update DNS record for $DOMAIN with $ID from $config_ip to $actual_ip" >&2 + pretty=$(echo "$res" | jq '.') + echo "$pretty" >&2 + exit 1 + fi +else + echo "$DOMAIN is currently registered properly: $config_ip $actual_ip" +fi + +exit 0 |