Use _post for DELETE and switch to JSON API (Alwaysdata default).

This commit is contained in:
Paul Koppen 2017-01-03 11:41:11 +00:00 committed by GitHub
parent e5079b9dad
commit 331b599a81

View File

@ -5,8 +5,7 @@
#This is the Alwaysdata api wrapper for acme.sh #This is the Alwaysdata api wrapper for acme.sh
AD_HOST="api.alwaysdata.com" AD_API_URL="https://$AD_API_KEY:@api.alwaysdata.com/v1"
AD_URL="https://$AD_API_KEY:@$AD_HOST"
######## Public functions ##################### ######## Public functions #####################
@ -35,7 +34,7 @@ dns_ad_add() {
_ad_tmpl_json="{\"domain\":$_domain_id,\"type\":\"TXT\",\"name\":\"$_sub_domain\",\"value\":\"$txtvalue\"}" _ad_tmpl_json="{\"domain\":$_domain_id,\"type\":\"TXT\",\"name\":\"$_sub_domain\",\"value\":\"$txtvalue\"}"
if ad_rest POST "record/" "" "$_ad_tmpl_json" && [ -z "$response" ]; then if _ad_rest POST "record/" "$_ad_tmpl_json" && [ -z "$response" ]; then
_info "txt record updated success." _info "txt record updated success."
return 0 return 0
fi fi
@ -57,37 +56,51 @@ dns_ad_rm() {
_debug _sub_domain "$_sub_domain" _debug _sub_domain "$_sub_domain"
_debug _domain "$_domain" _debug _domain "$_domain"
if ad_rest DELETE "record/" "domain=$_domain_id&name=$_sub_domain" "" && [ -z "$response" ]; then _debug "Getting txt records"
_info "txt record deleted success." _ad_rest GET "record/?domain=$_domain_id&name=$_sub_domain"
return 0
if [ -n "$response" ]; then
record_id=$(printf "%s\n" "$response" | _egrep_o "\"id\":\s*[0-9]+" | cut -d : -f 2 | tr -d \ | head -n 1)
_debug record_id "$record_id"
if [ -z "$record_id" ]; then
_err "Can not get record id to remove."
return 1
fi
if _ad_rest DELETE "record/$record_id/" && [ -z "$response" ]; then
_info "txt record deleted success."
return 0
fi
_debug response "$response"
return 1
fi fi
_debug response "$response"
return 1 return 1
} }
#################### Private functions below ################################## #################### Private functions below ##################################
#_acme-challenge.www.domain.com
#returns
# _sub_domain=_acme-challenge.www
# _domain=domain.com
# _domain_id=12345
_get_root() { _get_root() {
domain=$1 domain=$1
i=2 i=2
p=1 p=1
if ad_rest GET "domain/"; then if _ad_rest GET "domain/"; then
response="$(echo "$response" | tr -d "\n" | sed 's/{/\n&/g')"
while true; do while true; do
h=$(printf "%s" "$domain" | cut -d . -f $i-100) h=$(printf "%s" "$domain" | cut -d . -f $i-100)
_debug h "$h"
if [ -z "$h" ]; then if [ -z "$h" ]; then
#not valid #not valid
return 1 return 1
fi fi
if _contains "$response" "<name>$h</name>"; then hostedzone="$(echo "$response" | _egrep_o "{.*\"name\":\s*\"$h\".*}")"
hostedzone="$(echo "$response" | tr -d "\n" | sed 's/<object>/\n&/g' | _egrep_o "<object>.*<name>$h<.name>.*<.object>")" if [ "$hostedzone" ]; then
if [ -z "$hostedzone" ]; then _domain_id=$(printf "%s\n" "$hostedzone" | _egrep_o "\"id\":\s*[0-9]+" | head -n 1 | cut -d : -f 2 | tr -d \ )
_err "Error, can not get domain record."
return 1
fi
_domain_id=$(printf "%s\n" "$hostedzone" | _egrep_o "<id>.*<.id>" | head -n 1 | _egrep_o ">.*<" | tr -d "<>")
if [ "$_domain_id" ]; then if [ "$_domain_id" ]; then
_sub_domain=$(printf "%s" "$domain" | cut -d . -f 1-$p) _sub_domain=$(printf "%s" "$domain" | cut -d . -f 1-$p)
_domain=$h _domain=$h
@ -103,37 +116,29 @@ _get_root() {
} }
#method uri qstr data #method uri qstr data
ad_rest() { _ad_rest() {
mtd="$1" mtd="$1"
ep="$2" ep="$2"
qsr="$3" data="$3"
data="$4"
_debug mtd "$mtd" _debug mtd "$mtd"
_debug ep "$ep" _debug ep "$ep"
_debug qsr "$qsr"
_debug data "$data"
_H1="Accept: application/xml" _H1="Accept: application/json"
_H2="Content-Type: application/json"
url="$AD_URL/v1/$ep?$qsr" if [ "$mtd" != "GET" ]; then
# both POST and DELETE.
if [ "$mtd" = "GET" ]; then _debug data "$data"
response="$(_get "$url")" response="$(_post "$data" "$AD_API_URL/$ep" "" "$mtd")"
elif [ "$mtd" = "DELETE" ]; then
response="$(_delete "$url")"
else else
response="$(_post "$data" "$url")" response="$(_get "$AD_API_URL/$ep")"
fi fi
_ret="$?" if [ "$?" != "0" ]; then
if [ "$_ret" = "0" ]; then _err "error $ep"
# Errors usually 404, otherwise just empty response. How to detect 404? return 1
if _contains "$response" "<ErrorResponse"; then
_err "Response error:$response"
return 1
fi
fi fi
_debug2 response "$response"
return "$_ret" return 0
} }