diff --git a/net/ddns-scripts/files/update_CloudFlare.sh b/net/ddns-scripts/files/update_CloudFlare.sh index 22817404a..15f3afd32 100644 --- a/net/ddns-scripts/files/update_CloudFlare.sh +++ b/net/ddns-scripts/files/update_CloudFlare.sh @@ -57,55 +57,57 @@ cleanup() { sed -i "#'##g" $DATFILE # remove "'" (single quote) } -# build url according to cloudflare client api at https://www.cloudflare.com/docs/client-api.html -# to "rec_load_all" to detect rec_id needed for update -__URL="https://www.cloudflare.com/api_json.html" # https://www.cloudflare.com/api_json.html -__URL="${__URL}?a=rec_load_all" # -d 'a=rec_load_all' -__URL="${__URL}&tkn=$password" # -d 'tkn=8afbe6dea02407989af4dd4c97bb6e25' -__URL="${__URL}&email=$username" # -d 'email=sample@example.com' -__URL="${__URL}&z=$__DOMAIN" # -d 'z=example.com' - -# lets request the data -do_transfer "$__URL" || return 1 - -cleanup # cleanup dat file -json_load "$(cat $DATFILE)" # lets extract data -__FOUND=0 # found record indicator -json_get_var __RES "result" # cloudflare result of last request -json_get_var __MSG "msg" # cloudflare error message -[ "$__RES" != "success" ] && { - write_log 4 "'rec_load_all' failed with error: \n$__MSG" - return 1 -} - -json_select "response" -json_select "recs" -json_select "objs" -json_get_keys __KEYS -for __KEY in $__KEYS; do - local __ZONE __DISPLAY __NAME __TYPE - json_select "$__KEY" -# json_get_var __ZONE "zone_name" # for debugging -# json_get_var __DISPLAY "display_name" # for debugging - json_get_var __NAME "name" - json_get_var __TYPE "type" - if [ "$__NAME" = "$domain" ]; then - # we must verify IPv4 and IPv6 because there might be both for the same host - [ \( $use_ipv6 -eq 0 -a "$__TYPE" = "A" \) -o \( $use_ipv6 -eq 1 -a "$__TYPE" = "AAAA" \) ] && { - __FOUND=1 # mark found - break # found leave for loop - } - fi - json_select .. -done -[ $__FOUND -eq 0 ] && { - # we don't need to continue trying to update cloudflare because record to update does not exist - # user has to setup record first outside ddns-scripts - write_log 14 "No valid record found at Cloudflare setup. Please create first!" +[ -n "$rec_id" ] && __RECID="$rec_id" || { + # build url according to cloudflare client api at https://www.cloudflare.com/docs/client-api.html + # to "rec_load_all" to detect rec_id needed for update + __URL="https://www.cloudflare.com/api_json.html" # https://www.cloudflare.com/api_json.html + __URL="${__URL}?a=rec_load_all" # -d 'a=rec_load_all' + __URL="${__URL}&tkn=$password" # -d 'tkn=8afbe6dea02407989af4dd4c97bb6e25' + __URL="${__URL}&email=$username" # -d 'email=sample@example.com' + __URL="${__URL}&z=$__DOMAIN" # -d 'z=example.com' + + # lets request the data + do_transfer "$__URL" || return 1 + + cleanup # cleanup dat file + json_load "$(cat $DATFILE)" # lets extract data + __FOUND=0 # found record indicator + json_get_var __RES "result" # cloudflare result of last request + json_get_var __MSG "msg" # cloudflare error message + [ "$__RES" != "success" ] && { + write_log 4 "'rec_load_all' failed with error: \n$__MSG" + return 1 + } + + json_select "response" + json_select "recs" + json_select "objs" + json_get_keys __KEYS + for __KEY in $__KEYS; do + local __ZONE __DISPLAY __NAME __TYPE + json_select "$__KEY" + # json_get_var __ZONE "zone_name" # for debugging + # json_get_var __DISPLAY "display_name" # for debugging + json_get_var __NAME "name" + json_get_var __TYPE "type" + if [ "$__NAME" = "$domain" ]; then + # we must verify IPv4 and IPv6 because there might be both for the same host + [ \( $use_ipv6 -eq 0 -a "$__TYPE" = "A" \) -o \( $use_ipv6 -eq 1 -a "$__TYPE" = "AAAA" \) ] && { + __FOUND=1 # mark found + break # found leave for loop + } + fi + json_select .. + done + [ $__FOUND -eq 0 ] && { + # we don't need to continue trying to update cloudflare because record to update does not exist + # user has to setup record first outside ddns-scripts + write_log 14 "No valid record found at Cloudflare setup. Please create first!" + } + json_get_var __RECID "rec_id" # last thing to do get rec_id + json_cleanup # cleanup + write_log 7 "rec_id '$__RECID' detected for host/domain '$domain'" } -json_get_var __RECID "rec_id" # last thing to do get rec_id -json_cleanup # cleanup -write_log 7 "rec_id '$__RECID' detected for host/domain '$domain'" # build url according to cloudflare client api at https://www.cloudflare.com/docs/client-api.html # for "rec_edit" to update IP address