You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#!/usr/bin/env sh
#ANX_Token="xxxx"
ANX_API='https://engine.anexia-it.com/api/clouddns/v1'
######## Public functions #####################
dns_anx_add() { fulldomain=$1 txtvalue=$2
_info "Using ANX CDNS API"
ANX_Token="${ANX_Token:-$(_readaccountconf_mutable ANX_Token)}" _debug fulldomain "$fulldomain" _debug txtvalue "$txtvalue"
if [ "$ANX_Token" ]; then _saveaccountconf_mutable ANX_Token "$ANX_Token" else _err "You didn't specify a ANEXIA Engine API token." return 1 fi
_debug "First detect the root zone" if ! _get_root "$fulldomain"; then _err "invalid domain" return 1 fi
# Always add records, wildcard need two records with the same name _anx_rest POST "zone.json/${_domain}/records" "{\"name\":\"$_sub_domain\",\"type\":\"TXT\",\"rdata\":\"$txtvalue\"}" if _contains "$response" "$txtvalue"; then return 0 else return 1 fi }
dns_anx_rm() { fulldomain=$1 txtvalue=$2
_info "Using ANX CDNS API"
ANX_Token="${ANX_Token:-$(_readaccountconf_mutable ANX_Token)}"
_debug fulldomain "$fulldomain" _debug txtvalue "$txtvalue"
_debug "First detect the root zone" if ! _get_root "$fulldomain"; then _err "invalid domain" return 1 fi
_get_record_id
if _is_uuid "$_record_id"; then if ! _anx_rest DELETE "zone.json/${_domain}/records/$_record_id"; then _err "Delete record" return 1 fi else _info "No record found." fi echo "$response" | tr -d " " | grep \"status\":\"OK\" >/dev/null }
#################### Private functions below ##################################
_is_uuid() { pattern='^\{?[A-Z0-9a-z]{8}-[A-Z0-9a-z]{4}-[A-Z0-9a-z]{4}-[A-Z0-9a-z]{4}-[A-Z0-9a-z]{12}\}?$' if echo "$1" | _egrep_o "$pattern" >/dev/null; then return 0 fi return 1 }
_get_record_id() { _debug subdomain "$_sub_domain" _debug domain "$_domain"
if _anx_rest GET "zone.json/${_domain}/records?name=$_sub_domain&type=TXT"; then _debug response "$response" if _contains "$response" "\"name\":\"$_sub_domain\"" >/dev/null; then _record_id=$(printf "%s\n" "$response" | _egrep_o "\[.\"identifier\":\"[^\"]*\"" | head -n 1 | cut -d : -f 2 | tr -d \") else _record_id='' fi else _err "Search existing record" fi }
_anx_rest() { m=$1 ep="$2" data="$3" _debug "$ep"
export _H1="Content-Type: application/json" export _H2="Authorization: Token $ANX_Token"
if [ "$m" != "GET" ]; then _debug data "$data" response="$(_post "$data" "${ANX_API}/$ep" "" "$m")" else response="$(_get "${ANX_API}/$ep")" fi
# shellcheck disable=SC2181 if [ "$?" != "0" ]; then _err "error $ep" return 1 fi _debug response "$response" return 0 }
#_acme-challenge.www.domain.com #returns # _sub_domain=_acme-challenge.www # _domain=domain.com _get_root() { domain=$1 i=1 p=1
while true; do h=$(printf "%s" "$domain" | cut -d . -f $i-100) _debug h "$h" if [ -z "$h" ]; then #not valid return 1 fi
# Does a zone with that name exist? _anx_rest GET "zone.json/$h" # shellcheck disable=SC2154 if [ "$code" -ne 200 ]; then continue fi
if _contains "$response" "\"name\":\"$h\""; then _sub_domain=$(printf "%s" "$domain" | cut -d . -f 1-$p) _domain=$h return 0 fi
p=$i i=$(_math "$i" + 1) done return 1 }
|