From 9a02d29a21eb541ddfcd050f40210674af717bf0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolai=20Marck=20=C3=98dum?= Date: Thu, 21 Dec 2023 11:50:06 +0100 Subject: [PATCH] Enhanced UltraDNS zone retrieval for accounts with over 100 zones: 1. Modified API call to fetch up to 1000 zones per request. 2. Implemented looping mechanism for thorough search when the correct zone is not initially found. 3. Integrated query filtering to narrow down results to relevant zones only. --- dnsapi/dns_ultra.sh | 42 ++++++++++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/dnsapi/dns_ultra.sh b/dnsapi/dns_ultra.sh index 0f26bd97..255d32d6 100644 --- a/dnsapi/dns_ultra.sh +++ b/dnsapi/dns_ultra.sh @@ -113,25 +113,39 @@ _get_root() { while true; do h=$(printf "%s" "$domain" | cut -d . -f $i-100) _debug h "$h" - _debug response "$response" if [ -z "$h" ]; then #not valid return 1 fi - if ! _ultra_rest GET "zones"; then - return 1 - fi - if _contains "${response}" "${h}." >/dev/null; then - _domain_id=$(echo "$response" | _egrep_o "${h}" | head -1) - if [ "$_domain_id" ]; then - _sub_domain=$(printf "%s" "$domain" | cut -d . -f 1-$p) - _domain="${h}" - _debug sub_domain "${_sub_domain}" - _debug domain "${_domain}" - return 0 + while true; do + if ! _ultra_rest GET "zones?limit=1000&q=name:${h}${_cursor_next}"; then + return 1 fi - return 1 - fi + _debug response "$response" + _zones=$(echo "$response" | _egrep_o '"zones":\[.*\]') + _debug _zones "${_zones}" + if _contains "${_zones}" "${h}." >/dev/null; then + _domain_id=$(echo "$_zones" | _egrep_o "${h}" | head -1) + _debug "Domainid: $_domain_id" + if [ "$_domain_id" ]; then + _sub_domain=$(printf "%s" "$domain" | cut -d . -f 1-$p) + _domain="${h}" + _debug sub_domain "${_sub_domain}" + _debug domain "${_domain}" + return 0 + fi + return 1 + fi + _cursor_info=$(echo "$response" | _egrep_o "\"cursorInfo\":\s*{[^}]*}") + _debug _cursor_info "${_cursor_info}" + if _contains "${_cursor_info}" "\"next\""; then + _next_token=$(echo "${_cursor_info}" | cut -d':' -f3 | cut -d',' -f1 | tr -d '"' ) + _debug _next_token "${_next_token}" + _cursor_next="&cursor=${_next_token}" + else + break + fi + done p=$i i=$(_math "$i" + 1) done