@ -104,33 +104,31 @@ dns_dgon_rm() {
## may get: "links":{"pages":{"last":".../v2/domains/DOM/records?page=2","next":".../v2/domains/DOM/records?page=2"}}
GURL = " https://api.digitalocean.com/v2/domains/ $_domain /records "
## while we dont have a record ID we keep going
while [ -z " $record " ] ; do
## Get all the matching records
while true ; do
## 1) get the URL
## the create request - get
## args: URL, [onlyheader, timeout]
domain_list = " $( _get " $GURL " ) "
## 2) find record
## check for what we are looing for: "type":"A","name":"$_sub_domain"
record = " $( echo " $domain_list " | _egrep_o " \"id\"\s*\:\s*\"*[0-9]+\"*[^}]*\"name\"\s*\:\s*\" $_sub_domain \"[^}]*\"data\"\s*\:\s*\" $txtvalue \" " ) "
## 3) check record and get next page
if [ -z " $record " ] ; then
## find the next page if we dont have a match
nextpage = " $( echo " $domain_list " | _egrep_o "\"links\".*" | _egrep_o "\"next\".*" | _egrep_o "http.*page\=[0-9]+" ) "
if [ -z " $nextpage " ] ; then
_err "no record and no nextpage in digital ocean DNS removal"
## check response
if [ " $? " != "0" ] ; then
_err " error in domain_list response: $domain_list "
return 1
fi
_debug2 nextpage " $nextpage "
GURL = " $nextpage "
fi
## we break out of the loop when we have a record
done
_debug2 domain_list " $domain_list "
## 2) find records
## check for what we are looking for: "type":"A","name":"$_sub_domain"
record = " $( echo " $ domai n_list " | _ egrep_o " \"id\"\s*\:\s*\"*[0-9]+\"*[^}]*\"name\"\s*\:\s*\" $_sub_domain \"[^}]*\"data\"\s*\:\s*\" $txtvalue \" " ) "
## we found the record
rec_id = " $( echo " $record " | _egrep_o "id\"\s*\:\s*\"*[0-9]+" | _egrep_o "[0-9]+" ) "
_debug rec_id " $rec_id "
if [ ! -z " $record " ] ; then
## we found records
rec_ids = " $( echo " $record " | _egrep_o "id\"\s*\:\s*\"*[0-9]+" | _egrep_o "[0-9]+" ) "
_debug rec_ids " $rec_ids "
if [ ! -z " $rec_ids " ] ; then
echo " $rec_ids " | while IFS = read -r rec_id; do
## delete the record
## delete URL for removing the one we dont want
DURL = " https://api.digitalocean.com/v2/domains/ $_domain /records/ $rec_id "
@ -146,6 +144,20 @@ dns_dgon_rm() {
fi
_debug2 response " $response "
done
fi
fi
## 3) find the next page
nextpage = " $( echo " $domain_list " | _egrep_o "\"links\".*" | _egrep_o "\"next\".*" | _egrep_o "http.*page\=[0-9]+" ) "
if [ -z " $nextpage " ] ; then
break
fi
_debug2 nextpage " $nextpage "
GURL = " $nextpage "
done
## finished correctly
return 0
}
@ -178,10 +190,12 @@ _get_base_domain() {
export _H2 = " Authorization: Bearer $DO_API_KEY "
_debug DO_API_KEY " $DO_API_KEY "
## get URL for the list of domains
## havent seen this request paginated, tested with 18 domains (more requires manual requests with DO)
## may get: "links":{"pages":{"last":".../v2/domains/DOM/records?page=2","next":".../v2/domains/DOM/records?page=2"}}
DOMURL = "https://api.digitalocean.com/v2/domains"
## get the domain list (DO gives basically a full XFER!)
## while we dont have a matching domain we keep going
while [ -z " $found " ] ; do
## get the domain list (current page)
domain_list = " $( _get " $DOMURL " ) "
## check response
@ -199,9 +213,7 @@ _get_base_domain() {
_domain = $( printf "%s" " $fulldomain " | cut -d . -f " $i " -" $MAX_DOM " )
## check we got something back from our cut (or are we at the end)
if [ -z " $_domain " ] ; then
## we got to the end of the domain - invalid domain
_err "domain not found in DigitalOcean account"
return 1
break
fi
## we got part of a domain back - grep it out
found = " $( echo " $domain_list " | _egrep_o " \"name\"\s*\:\s*\" $_domain \" " ) "
@ -218,6 +230,19 @@ _get_base_domain() {
i = $( _math $i + 1)
done
if [ -z " $found " ] ; then
## find the next page if we dont have a match
nextpage = " $( echo " $domain_list " | _egrep_o "\"links\".*" | _egrep_o "\"next\".*" | _egrep_o "http.*page\=[0-9]+" ) "
if [ -z " $nextpage " ] ; then
_err "no record and no nextpage in digital ocean DNS removal"
return 1
fi
_debug2 nextpage " $nextpage "
DOMURL = " $nextpage "
fi
done
## we went through the entire domain zone list and dint find one that matched
## doesnt look like we can add in the record
_err "domain not found in DigitalOcean account, but we should never get here"