diff --git a/dnsapi/dns_arvancdn.sh b/dnsapi/dns_arvancdn.sh index 1662a40e..c93ef1c2 100644 --- a/dnsapi/dns_arvancdn.sh +++ b/dnsapi/dns_arvancdn.sh @@ -10,69 +10,68 @@ ARVAN_CDN_API="https://napi.arvancloud.com/cdn/4.0" #Usage: dns_arvancdn_add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs" dns_arvancdn_add() { - _fulldomain=$1 - _challenge=$2 + _fulldomain=$1 + _challenge=$2 - _debug "dns_arvan_add(): Started" + _debug "dns_arvan_add(): Started" - ARVAN_API_KEY="${ARVAN_API_KEY:-$(_readaccountconf_mutable ARVAN_API_KEY)}" - if [ -z "${ARVAN_API_KEY}" ]; then - ARVAN_API_KEY="" - _err "dns_arvan_add(): ARVAN_API_KEY has not been defined yet." - _err "dns_arvan_add(): export ARVAN_API_KEY=\"---YOUR-API-KEY---\"" - return 1 - fi - _saveaccountconf_mutable ARVAN_API_KEY "${ARVAN_API_KEY}" + ARVAN_API_KEY="${ARVAN_API_KEY:-$(_readaccountconf_mutable ARVAN_API_KEY)}" + if [ -z "${ARVAN_API_KEY}" ]; then + ARVAN_API_KEY="" + _err "dns_arvan_add(): ARVAN_API_KEY has not been defined yet." + _err "dns_arvan_add(): export ARVAN_API_KEY=\"---YOUR-API-KEY---\"" + return 1 + fi + _saveaccountconf_mutable ARVAN_API_KEY "${ARVAN_API_KEY}" - _debug "dns_arvan_add(): Check domain root zone availability for ${_fulldomain}" + _debug "dns_arvan_add(): Check domain root zone availability for ${_fulldomain}" - if ! _zone=$(_get_root "${_fulldomain}"); then - _err "dns_arvan_add(): Root zone for ${_fulldomain} not found!" - return 1 - fi + if ! _zone=$(_get_root "${_fulldomain}"); then + _err "dns_arvan_add(): Root zone for ${_fulldomain} not found!" + return 1 + fi - #_record_name=$(echo "${_zone}" | sed "s/\.\..*//") - _record_name=${_zone/\.\.*/} - #_zone=$(echo "${_zone}" | sed "s/.*\.\.//") - _zone=${_zone/*\.\./} + #_record_name=$(echo "${_zone}" | sed "s/\.\..*//") + _record_name=${_zone/\.\.*/} + #_zone=$(echo "${_zone}" | sed "s/.*\.\.//") + _zone=${_zone/*\.\./} - _debug "dns_arvan_add(): fulldomain ${_fulldomain}" - _debug "dns_arvan_add(): textvalue ${_challenge}" - _debug "dns_arvan_add(): domain ${_record_name}" - _debug "dns_arvan_add(): domain ${_zone}" + _debug "dns_arvan_add(): fulldomain ${_fulldomain}" + _debug "dns_arvan_add(): textvalue ${_challenge}" + _debug "dns_arvan_add(): domain ${_record_name}" + _debug "dns_arvan_add(): domain ${_zone}" - _record_add "${_record_name}" "${_zone}" "${_challenge}" + _record_add "${_record_name}" "${_zone}" "${_challenge}" } #Usage: dns_arvancdn_rm fulldomain txtvalue dns_arvancdn_rm() { - _fulldomain=$1 - _challenge=$2 + _fulldomain=$1 + _challenge=$2 - ARVAN_API_KEY="${ARVAN_API_KEY:-$(_readaccountconf_mutable ARVAN_API_KEY)}" - if [ -z "${ARVAN_API_KEY}" ]; then - ARVAN_API_KEY="" - _err "dns_arvan_rm(): ARVAN_API_KEY has not been defined yet." - _err "dns_arvan_rm(): export ARVAN_API_KEY=\"---YOUR-API-KEY---\"" - return 1 - fi + ARVAN_API_KEY="${ARVAN_API_KEY:-$(_readaccountconf_mutable ARVAN_API_KEY)}" + if [ -z "${ARVAN_API_KEY}" ]; then + ARVAN_API_KEY="" + _err "dns_arvan_rm(): ARVAN_API_KEY has not been defined yet." + _err "dns_arvan_rm(): export ARVAN_API_KEY=\"---YOUR-API-KEY---\"" + return 1 + fi - if ! _zone=$(_get_root "${_fulldomain}"); then - _err "dns_arvan_rm(): Root zone for ${_fulldomain} not found!" - return 1 - fi + if ! _zone=$(_get_root "${_fulldomain}"); then + _err "dns_arvan_rm(): Root zone for ${_fulldomain} not found!" + return 1 + fi - #_record_name=$(echo "${_zone}" | sed "s/\.\..*//") - _record_name=${_zone/\.\.*/} - #_zone=$(echo "${_zone}" | sed "s/.*\.\.//") - _zone=${_zone/*\.\./} + #_record_name=$(echo "${_zone}" | sed "s/\.\..*//") + _record_name=${_zone/\.\.*/} + #_zone=$(echo "${_zone}" | sed "s/.*\.\.//") + _zone=${_zone/*\.\./} + _record_id=$(_record_get_id "${_zone}" "${_challenge}") - _record_id=$(_record_get_id "${_zone}" "${_challenge}") - - _record_remove "${_zone}" "${_record_id}" + _record_remove "${_zone}" "${_record_id}" } @@ -82,84 +81,83 @@ dns_arvancdn_rm() { #Usage: _get_root zone _get_root() { - _fulldomain=$1 - _zone=$_fulldomain - - export _H1="Content-Type: application-json" - export _H2="Authorization: apikey ${ARVAN_API_KEY}" - - _response=$(_get "${ARVAN_CDN_API}/domains") - #_domains_list=( $( echo "${_response}" | grep -Poe '"domain":"[^"]*"' | sed 's/"domain":"//' | sed 's/"//') ) - read -r -a _domains_list < <( echo "${_response}" | grep -Poe '"domain":"[^"]*"' | sed 's/"domain":"//' | sed 's/"//') - - _debug2 "_get_root(): reponse ${_response}" - _debug2 "_get_root(): domains list ${_domains_list[*]}" - - #Fibding a matching Zone - while [[ -n "${_zone}" ]]; do - for tmp in "${_domains_list[@]}"; do - if [ "${tmp}" = "${_zone}" ]; then - break 2 - fi - done - _zone=$(sed 's/^[^.]*\.\?//' <(echo "${_zone}")) - done - if [ -z "${_zone}" ]; then - _debug2 "_get_root(): Zone not found on provider" - exit 1 - fi - - _marked_zone=$(sed "s/^\(.*\)\.\(${_zone}\)$/\1..\2/" <(echo "${_fulldomain}")) - echo "${_marked_zone}" + _fulldomain=$1 + _zone=$_fulldomain + + export _H1="Content-Type: application-json" + export _H2="Authorization: apikey ${ARVAN_API_KEY}" + + _response=$(_get "${ARVAN_CDN_API}/domains") + #_domains_list=( $( echo "${_response}" | grep -Poe '"domain":"[^"]*"' | sed 's/"domain":"//' | sed 's/"//') ) + read -r -a _domains_list < <(echo "${_response}" | grep -Poe '"domain":"[^"]*"' | sed 's/"domain":"//' | sed 's/"//') + + _debug2 "_get_root(): reponse ${_response}" + _debug2 "_get_root(): domains list ${_domains_list[*]}" + + #Fibding a matching Zone + while [[ -n "${_zone}" ]]; do + for tmp in "${_domains_list[@]}"; do + if [ "${tmp}" = "${_zone}" ]; then + break 2 + fi + done + _zone=$(sed 's/^[^.]*\.\?//' <(echo "${_zone}")) + done + if [ -z "${_zone}" ]; then + _debug2 "_get_root(): Zone not found on provider" + exit 1 + fi + + _marked_zone=$(sed "s/^\(.*\)\.\(${_zone}\)$/\1..\2/" <(echo "${_fulldomain}")) + echo "${_marked_zone}" } #Usage: _record_add record_name zone challenge _record_add() { - _record_name=$1 - _zone=$2 - _challenge=$3 + _record_name=$1 + _zone=$2 + _challenge=$3 - export _H1="Content-Type: application-json" - export _H2="Authorization: apikey ${ARVAN_API_KEY}" + export _H1="Content-Type: application-json" + export _H2="Authorization: apikey ${ARVAN_API_KEY}" - _payload="{\"type\":\"txt\",\"name\":\"${_record_name}\",\"cloud\":false,\"value\":{\"text\":\"${_challenge}\"},\"ttl\":120}" - _response=$(_post "${_payload}" "${ARVAN_CDN_API}/domains/${_zone}/dns-records" "" "POST" "application/json" | _base64) + _payload="{\"type\":\"txt\",\"name\":\"${_record_name}\",\"cloud\":false,\"value\":{\"text\":\"${_challenge}\"},\"ttl\":120}" + _response=$(_post "${_payload}" "${ARVAN_CDN_API}/domains/${_zone}/dns-records" "" "POST" "application/json" | _base64) - _debug2 "_record_add(): ${_response}" - _debug2 " Payload: ${_payload}" + _debug2 "_record_add(): ${_response}" + _debug2 " Payload: ${_payload}" } #Usage: _record_get_id zone challenge _record_get_id() { - _zone=$1 - _challenge=$2 - - export _H1="Content-Type: application-json" - export _H2="Authorization: apikey ${ARVAN_API_KEY}" + _zone=$1 + _challenge=$2 - _response=$(_get "${ARVAN_CDN_API}/domains/${_zone}/dns-records/?type=txt\&search=${_challenge}" | _json_decode | _normalizeJson | grep -Eo '"id":.*?,"value":\{"text":".*?"\}' | sed 's/"id":"\([^"]*\)".*/\1/') - _debug2 "_record_get_id(): ${_response}" + export _H1="Content-Type: application-json" + export _H2="Authorization: apikey ${ARVAN_API_KEY}" + _response=$(_get "${ARVAN_CDN_API}/domains/${_zone}/dns-records/?type=txt\&search=${_challenge}" | _json_decode | _normalizeJson | grep -Eo '"id":.*?,"value":\{"text":".*?"\}' | sed 's/"id":"\([^"]*\)".*/\1/') + _debug2 "_record_get_id(): ${_response}" - echo "${_response}" + echo "${_response}" } #Usage: _record_remove zone record_id _record_remove() { - _zone=$1 - _record_id=$2 + _zone=$1 + _record_id=$2 - export _H1="Content-Type: application-json" - export _H2="Authorization: apikey $ARVAN_API_KEY" + export _H1="Content-Type: application-json" + export _H2="Authorization: apikey $ARVAN_API_KEY" - _response=$(_post "" "$ARVAN_CDN_API/domains/$_zone/dns-records/$_record_id" "" "DELETE" "application/json") + _response=$(_post "" "$ARVAN_CDN_API/domains/$_zone/dns-records/$_record_id" "" "DELETE" "application/json") - _debug "_record_remove(): ACME Challenge Removed" - _debug2 " Response: $_response" + _debug "_record_remove(): ACME Challenge Removed" + _debug2 " Response: $_response" }