Browse Source

rework root domain detection

Vladimir Berezhnoy 7 years ago
parent
commit
eb6be88fac
1 changed files with 50 additions and 7 deletions
  1. 50 7
      dnsapi/dns_yandex.sh

+ 50 - 7
dnsapi/dns_yandex.sh

@@ -16,8 +16,9 @@ dns_yandex_add() {
   _PDD_credentials || return 1
   export _H1="PddToken: $PDD_Token"
 
-  curDomain="$(echo "${fulldomain}" | rev | cut -d . -f 1-2 | rev)"
-  curSubdomain="$(echo "${fulldomain}" | rev | cut -d . -f 3- | rev)"
+  curDomain=$(_PDD_get_domain $fulldomain)
+  _debug "Found suitable domain in pdd: $curDomain"
+  curSubdomain="$(echo "${fulldomain}" | sed -e "s@.${curDomain}\$@@")"
   curData="domain=${curDomain}&type=TXT&subdomain=${curSubdomain}&ttl=360&content=${txtvalue}"
   curUri="https://pddimp.yandex.ru/api2/admin/dns/add"
   curResult="$(_post "${curData}" "${curUri}")"
@@ -33,8 +34,10 @@ dns_yandex_rm() {
   record_id=$(pdd_get_record_id "${fulldomain}")
   _debug "Result: $record_id"
 
-  curDomain="$(echo "${fulldomain}" | rev | cut -d . -f 1-2 | rev)"
-  curSubdomain="$(echo "${fulldomain}" | rev | cut -d . -f 3- | rev)"
+  curDomain=$(_PDD_get_domain $fulldomain)
+  _debug "Found suitable domain in pdd: $curDomain"
+  curSubdomain="$(echo "${fulldomain}" | sed -e "s@.${curDomain}\$@@")"
+
   curUri="https://pddimp.yandex.ru/api2/admin/dns/del"
   curData="domain=${curDomain}&record_id=${record_id}"
   curResult="$(_post "${curData}" "${curUri}")"
@@ -43,10 +46,47 @@ dns_yandex_rm() {
 
 ####################  Private functions below ##################################
 
+_PDD_get_domain() {
+  fulldomain="${1}"
+  __page=1
+  __last=0
+  while [ $__last -eq 0 ]; do
+    uri1="https://pddimp.yandex.ru/api2/admin/domain/domains?page=${__page}&on_page=20"
+    res1=$(_get $uri1 | _normalizeJson)
+    #_debug "$res1"
+    __found=$(echo "$res1" | sed -n -e 's#.* "found": \([^,]*\),.*#\1#p')
+    _debug "found: $__found results on page"
+    if [ $__found -lt 20 ]; then
+      _debug "last page: $__page"
+      __last=1
+    fi
+
+    __all_domains="$__all_domains $(echo "$res1" | sed -e "s@,@\n@g" | grep '"name"' | cut -d: -f2 | sed -e 's@"@@g')"
+
+    __page=$(_math $__page + 1)
+  done
+
+  k=2
+  while [ $k -lt 10 ]; do
+    __t=$(echo "$fulldomain" | cut -d . -f $k-100)
+    _debug "finding zone for domain $__t"
+    for d in $__all_domains; do
+      if [ "$d" == "$__t" ]; then
+        echo "$__t"
+        return
+      fi
+    done
+    k=$(_math $k + 1)
+  done
+  _err "No suitable domain found in your account"
+  return 1
+}
+
 _PDD_credentials() {
   if [ -z "${PDD_Token}" ]; then
     PDD_Token=""
-    _err "You haven't specified the ISPConfig Login data."
+    _err "You need to export PDD_Token=xxxxxxxxxxxxxxxxx"
+    _err "You can get it at https://pddimp.yandex.ru/api2/admin/get_token"
     return 1
   else
     _saveaccountconf PDD_Token "${PDD_Token}"
@@ -55,8 +95,11 @@ _PDD_credentials() {
 
 pdd_get_record_id() {
   fulldomain="${1}"
-  curDomain="$(echo "${fulldomain}" | rev | cut -d . -f 1-2 | rev)"
-  curSubdomain="$(echo "${fulldomain}" | rev | cut -d . -f 3- | rev)"
+
+  curDomain=$(_PDD_get_domain $fulldomain)
+  _debug "Found suitable domain in pdd: $curDomain"
+  curSubdomain="$(echo "${fulldomain}" | sed -e "s@.${curDomain}\$@@")"
+
   curUri="https://pddimp.yandex.ru/api2/admin/dns/list?domain=${curDomain}"
   curResult="$(_get "${curUri}" | _normalizeJson)"
   _debug "Result: $curResult"