M.A.Sarbanha
2 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 161 additions and 134 deletions
@ -1,134 +0,0 @@ |
|||||
#!/usr/bin/env #!/bin/sh |
|
||||
|
|
||||
# Author: Mohammad Ali Sarbanha <sarbanha at yahoo dot com> |
|
||||
# Repository: https://github.com/sarbanha/acme.sh-dnsapi-dns_arvancdn |
|
||||
|
|
||||
# export ARVAN_API_KEY="-----------" |
|
||||
|
|
||||
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 |
|
||||
zone=${fulldomain:16} |
|
||||
|
|
||||
_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" |
|
||||
|
|
||||
_debug "dns_arvan_add(): Check domain root zone availability for $zone" |
|
||||
if ! _get_root $zone; then |
|
||||
_err "dns_arvan_add(): Invalid domain $zone" |
|
||||
return 1 |
|
||||
fi |
|
||||
|
|
||||
_debug "dns_arvan_add(): fulldomain $fulldomain" |
|
||||
_debug "dns_arvan_add(): textvalue $challenge" |
|
||||
_debug "dns_arvan_add(): domain $zone" |
|
||||
|
|
||||
_record_add $zone $challenge |
|
||||
|
|
||||
} |
|
||||
|
|
||||
#Usage: dns_arvancdn_rm fulldomain txtvalue |
|
||||
dns_arvancdn_rm(){ |
|
||||
|
|
||||
fulldomain=$1 |
|
||||
challenge=$2 |
|
||||
zone=${fulldomain:16} |
|
||||
|
|
||||
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 |
|
||||
|
|
||||
record_id=$(_record_get_id $zone $challenge) |
|
||||
|
|
||||
_record_remove $zone $record_id |
|
||||
|
|
||||
} |
|
||||
|
|
||||
#################### |
|
||||
# Private functions |
|
||||
#################### |
|
||||
|
|
||||
#Usage: _get_root zone |
|
||||
_get_root(){ |
|
||||
_zone=$1 |
|
||||
|
|
||||
export _H1="Content-Type: application-json" |
|
||||
export _H2="Authorization: apikey $ARVAN_API_KEY" |
|
||||
|
|
||||
_response=$(_get $ARVAN_CDN_API/domains/$_zone) |
|
||||
_debug2 "_get_root()" $_response |
|
||||
_debug2 "_get_root()" $_zone |
|
||||
if _contains "$_response" "$_zone"; then |
|
||||
# is valid |
|
||||
_valid=0 |
|
||||
else |
|
||||
# is not valid |
|
||||
_valid=1 |
|
||||
fi |
|
||||
|
|
||||
return $_valid |
|
||||
} |
|
||||
|
|
||||
#Usage: _record_add zone challenge |
|
||||
_record_add(){ |
|
||||
zone=$1 |
|
||||
challenge=$2 |
|
||||
|
|
||||
export _H1="Content-Type: application-json" |
|
||||
export _H2="Authorization: apikey $ARVAN_API_KEY" |
|
||||
|
|
||||
payload="{\"type\":\"txt\",\"name\":\"_acme-challenge\",\"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 |
|
||||
} |
|
||||
|
|
||||
#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" |
|
||||
|
|
||||
_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" |
|
||||
|
|
||||
} |
|
||||
|
|
||||
#Usage: _record_remove zone record_id |
|
||||
_record_remove(){ |
|
||||
|
|
||||
zone=$1 |
|
||||
record_id=$2 |
|
||||
|
|
||||
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") |
|
||||
|
|
||||
_debug "_record_remove(): ACME Challenge Removed" |
|
||||
_debug2 " Response: " $_response |
|
||||
|
|
||||
} |
|
@ -0,0 +1,161 @@ |
|||||
|
#!/usr/bin/env #!/bin/sh |
||||
|
|
||||
|
# Author: Mohammad Ali Sarbanha <sarbanha at yahoo dot com> |
||||
|
# Repository: https://github.com/sarbanha/acme.sh-dnsapi-dns_arvancdn |
||||
|
|
||||
|
# export ARVAN_API_KEY="-----------" |
||||
|
|
||||
|
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 |
||||
|
|
||||
|
_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" |
||||
|
|
||||
|
_debug "dns_arvan_add(): Check domain root zone availability for $_fulldomain" |
||||
|
_zone=$(_get_root $_fulldomain) |
||||
|
if [ $? -ne 0 ]; then |
||||
|
_err "dns_arvan_add(): Root zone for $_fulldomain not found!" |
||||
|
return 1 |
||||
|
fi |
||||
|
|
||||
|
_record_name=$(echo $_zone | sed "s/\.\..*//") |
||||
|
_zone=$(echo $_zone | sed "s/.*\.\.//") |
||||
|
|
||||
|
_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 |
||||
|
|
||||
|
} |
||||
|
|
||||
|
#Usage: dns_arvancdn_rm fulldomain txtvalue |
||||
|
dns_arvancdn_rm(){ |
||||
|
|
||||
|
_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 |
||||
|
|
||||
|
_zone=$(_get_root $_fulldomain) |
||||
|
if [ $? -ne 0 ]; then |
||||
|
_err "dns_arvan_rm(): Root zone for $_fulldomain not found!" |
||||
|
return 1 |
||||
|
fi |
||||
|
|
||||
|
_record_name=$(echo $_zone | sed "s/\.\..*//") |
||||
|
_zone=$(echo $_zone | sed "s/.*\.\.//") |
||||
|
|
||||
|
|
||||
|
_record_id=$(_record_get_id $_zone $_challenge) |
||||
|
|
||||
|
_record_remove $_zone $_record_id |
||||
|
|
||||
|
} |
||||
|
|
||||
|
#################### |
||||
|
# Private functions |
||||
|
#################### |
||||
|
|
||||
|
#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/"//') ) |
||||
|
|
||||
|
_debug2 "_get_root(): $_response" |
||||
|
_debug2 "_get_root(): $_domains_list" |
||||
|
|
||||
|
#Fibding a matching Zone |
||||
|
while [[ ! -z $_zone ]]; do |
||||
|
for tmp in ${_domains_list[@]}; do |
||||
|
if [ $tmp = $_zone ]; then |
||||
|
break 2 |
||||
|
fi |
||||
|
done |
||||
|
_zone=$(echo $_zone | sed 's/^[^.]*\.\?//') |
||||
|
done |
||||
|
if [ -z $_zone ]; then |
||||
|
_debug2 "_get_root(): Zone not found on provider" |
||||
|
exit 1 |
||||
|
fi |
||||
|
|
||||
|
_marked_zone=$(echo $_fulldomain | sed "s/^\(.*\)\.\(${_zone}\)$/\1..\2/") |
||||
|
echo $_marked_zone |
||||
|
|
||||
|
} |
||||
|
|
||||
|
#Usage: _record_add record_name zone challenge |
||||
|
_record_add(){ |
||||
|
|
||||
|
_record_name=$1 |
||||
|
_zone=$2 |
||||
|
_challenge=$3 |
||||
|
|
||||
|
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) |
||||
|
|
||||
|
_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" |
||||
|
|
||||
|
_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" |
||||
|
|
||||
|
} |
||||
|
|
||||
|
#Usage: _record_remove zone record_id |
||||
|
_record_remove(){ |
||||
|
|
||||
|
_zone=$1 |
||||
|
_record_id=$2 |
||||
|
|
||||
|
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") |
||||
|
|
||||
|
_debug "_record_remove(): ACME Challenge Removed" |
||||
|
_debug2 " Response: " $_response |
||||
|
|
||||
|
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue