mirror of
https://github.com/plantroon/acme.sh.git
synced 2024-12-22 13:11:41 +00:00
Merge branch 'dev' into feature/exoscale
This commit is contained in:
commit
3fb17c5de8
@ -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"}}
|
## 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"
|
GURL="https://api.digitalocean.com/v2/domains/$_domain/records"
|
||||||
|
|
||||||
## while we dont have a record ID we keep going
|
## Get all the matching records
|
||||||
while [ -z "$record" ]; do
|
while true; do
|
||||||
## 1) get the URL
|
## 1) get the URL
|
||||||
## the create request - get
|
## the create request - get
|
||||||
## args: URL, [onlyheader, timeout]
|
## args: URL, [onlyheader, timeout]
|
||||||
domain_list="$(_get "$GURL")"
|
domain_list="$(_get "$GURL")"
|
||||||
## 2) find record
|
|
||||||
## check for what we are looing for: "type":"A","name":"$_sub_domain"
|
## check response
|
||||||
record="$(echo "$domain_list" | _egrep_o "\"id\"\s*\:\s*\"*[0-9]+\"*[^}]*\"name\"\s*\:\s*\"$_sub_domain\"[^}]*\"data\"\s*\:\s*\"$txtvalue\"")"
|
if [ "$?" != "0" ]; then
|
||||||
## 3) check record and get next page
|
_err "error in domain_list response: $domain_list"
|
||||||
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"
|
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
_debug2 nextpage "$nextpage"
|
_debug2 domain_list "$domain_list"
|
||||||
GURL="$nextpage"
|
|
||||||
fi
|
|
||||||
## we break out of the loop when we have a record
|
|
||||||
done
|
|
||||||
|
|
||||||
## we found the record
|
## 2) find records
|
||||||
rec_id="$(echo "$record" | _egrep_o "id\"\s*\:\s*\"*[0-9]+" | _egrep_o "[0-9]+")"
|
## check for what we are looking for: "type":"A","name":"$_sub_domain"
|
||||||
_debug rec_id "$rec_id"
|
record="$(echo "$domain_list" | _egrep_o "\"id\"\s*\:\s*\"*[0-9]+\"*[^}]*\"name\"\s*\:\s*\"$_sub_domain\"[^}]*\"data\"\s*\:\s*\"$txtvalue\"")"
|
||||||
|
|
||||||
|
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 the record
|
||||||
## delete URL for removing the one we dont want
|
## delete URL for removing the one we dont want
|
||||||
DURL="https://api.digitalocean.com/v2/domains/$_domain/records/$rec_id"
|
DURL="https://api.digitalocean.com/v2/domains/$_domain/records/$rec_id"
|
||||||
@ -146,6 +144,20 @@ dns_dgon_rm() {
|
|||||||
fi
|
fi
|
||||||
_debug2 response "$response"
|
_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
|
## finished correctly
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
@ -178,10 +190,12 @@ _get_base_domain() {
|
|||||||
export _H2="Authorization: Bearer $DO_API_KEY"
|
export _H2="Authorization: Bearer $DO_API_KEY"
|
||||||
_debug DO_API_KEY "$DO_API_KEY"
|
_debug DO_API_KEY "$DO_API_KEY"
|
||||||
## get URL for the list of domains
|
## 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"
|
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")"
|
domain_list="$(_get "$DOMURL")"
|
||||||
|
|
||||||
## check response
|
## check response
|
||||||
@ -199,9 +213,7 @@ _get_base_domain() {
|
|||||||
_domain=$(printf "%s" "$fulldomain" | cut -d . -f "$i"-"$MAX_DOM")
|
_domain=$(printf "%s" "$fulldomain" | cut -d . -f "$i"-"$MAX_DOM")
|
||||||
## check we got something back from our cut (or are we at the end)
|
## check we got something back from our cut (or are we at the end)
|
||||||
if [ -z "$_domain" ]; then
|
if [ -z "$_domain" ]; then
|
||||||
## we got to the end of the domain - invalid domain
|
break
|
||||||
_err "domain not found in DigitalOcean account"
|
|
||||||
return 1
|
|
||||||
fi
|
fi
|
||||||
## we got part of a domain back - grep it out
|
## we got part of a domain back - grep it out
|
||||||
found="$(echo "$domain_list" | _egrep_o "\"name\"\s*\:\s*\"$_domain\"")"
|
found="$(echo "$domain_list" | _egrep_o "\"name\"\s*\:\s*\"$_domain\"")"
|
||||||
@ -218,6 +230,19 @@ _get_base_domain() {
|
|||||||
i=$(_math $i + 1)
|
i=$(_math $i + 1)
|
||||||
done
|
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
|
## we went through the entire domain zone list and dint find one that matched
|
||||||
## doesnt look like we can add in the record
|
## doesnt look like we can add in the record
|
||||||
_err "domain not found in DigitalOcean account, but we should never get here"
|
_err "domain not found in DigitalOcean account, but we should never get here"
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
Dynu_Token=""
|
Dynu_Token=""
|
||||||
#
|
#
|
||||||
#Endpoint
|
#Endpoint
|
||||||
Dynu_EndPoint="https://api.dynu.com/v1"
|
Dynu_EndPoint="https://api.dynu.com/v2"
|
||||||
#
|
#
|
||||||
#Author: Dynu Systems, Inc.
|
#Author: Dynu Systems, Inc.
|
||||||
#Report Bugs here: https://github.com/shar0119/acme.sh
|
#Report Bugs here: https://github.com/shar0119/acme.sh
|
||||||
@ -51,11 +51,11 @@ dns_dynu_add() {
|
|||||||
_debug _domain_name "$_domain_name"
|
_debug _domain_name "$_domain_name"
|
||||||
|
|
||||||
_info "Creating TXT record."
|
_info "Creating TXT record."
|
||||||
if ! _dynu_rest POST "dns/record/add" "{\"domain_name\":\"$_domain_name\",\"node_name\":\"$_node\",\"record_type\":\"TXT\",\"text_data\":\"$txtvalue\",\"state\":true,\"ttl\":90}"; then
|
if ! _dynu_rest POST "dns/$dnsId/record" "{\"domainId\":\"$dnsId\",\"nodeName\":\"$_node\",\"recordType\":\"TXT\",\"textData\":\"$txtvalue\",\"state\":true,\"ttl\":90}"; then
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! _contains "$response" "text_data"; then
|
if ! _contains "$response" "200"; then
|
||||||
_err "Could not add TXT record."
|
_err "Could not add TXT record."
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
@ -132,11 +132,12 @@ _get_root() {
|
|||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! _dynu_rest GET "dns/get/$h"; then
|
if ! _dynu_rest GET "dns/getroot/$h"; then
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if _contains "$response" "\"name\":\"$h\"" >/dev/null; then
|
if _contains "$response" "\"domainName\":\"$h\"" >/dev/null; then
|
||||||
|
dnsId=$(printf "%s" "$response" | tr -d "{}" | cut -d , -f 2 | cut -d : -f 2)
|
||||||
_domain_name=$h
|
_domain_name=$h
|
||||||
_node=$(printf "%s" "$domain" | cut -d . -f 1-$p)
|
_node=$(printf "%s" "$domain" | cut -d . -f 1-$p)
|
||||||
return 0
|
return 0
|
||||||
@ -152,7 +153,7 @@ _get_recordid() {
|
|||||||
fulldomain=$1
|
fulldomain=$1
|
||||||
txtvalue=$2
|
txtvalue=$2
|
||||||
|
|
||||||
if ! _dynu_rest GET "dns/record/get?hostname=$fulldomain&rrtype=TXT"; then
|
if ! _dynu_rest GET "dns/$dnsId/record"; then
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -161,19 +162,18 @@ _get_recordid() {
|
|||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
_dns_record_id=$(printf "%s" "$response" | _egrep_o "{[^}]*}" | grep "\"text_data\":\"$txtvalue\"" | _egrep_o ",[^,]*," | grep ',"id":' | tr -d ",," | cut -d : -f 2)
|
_dns_record_id=$(printf "%s" "$response" | sed -e 's/[^{]*\({[^}]*}\)[^{]*/\1\n/g' | grep "\"textData\":\"$txtvalue\"" | sed -e 's/.*"id":\([^,]*\).*/\1/')
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
_delete_txt_record() {
|
_delete_txt_record() {
|
||||||
_dns_record_id=$1
|
_dns_record_id=$1
|
||||||
|
|
||||||
if ! _dynu_rest GET "dns/record/delete/$_dns_record_id"; then
|
if ! _dynu_rest DELETE "dns/$dnsId/record/$_dns_record_id"; then
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! _contains "$response" "true"; then
|
if ! _contains "$response" "200"; then
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -189,7 +189,7 @@ _dynu_rest() {
|
|||||||
export _H1="Authorization: Bearer $Dynu_Token"
|
export _H1="Authorization: Bearer $Dynu_Token"
|
||||||
export _H2="Content-Type: application/json"
|
export _H2="Content-Type: application/json"
|
||||||
|
|
||||||
if [ "$data" ]; then
|
if [ "$data" ] || [ "$m" = "DELETE" ]; then
|
||||||
_debug data "$data"
|
_debug data "$data"
|
||||||
response="$(_post "$data" "$Dynu_EndPoint/$ep" "" "$m")"
|
response="$(_post "$data" "$Dynu_EndPoint/$ep" "" "$m")"
|
||||||
else
|
else
|
||||||
@ -216,8 +216,8 @@ _dynu_authentication() {
|
|||||||
_err "Authentication failed."
|
_err "Authentication failed."
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
if _contains "$response" "accessToken"; then
|
if _contains "$response" "access_token"; then
|
||||||
Dynu_Token=$(printf "%s" "$response" | tr -d "[]" | cut -d , -f 2 | cut -d : -f 2 | cut -d '"' -f 2)
|
Dynu_Token=$(printf "%s" "$response" | tr -d "{}" | cut -d , -f 1 | cut -d : -f 2 | cut -d '"' -f 2)
|
||||||
fi
|
fi
|
||||||
if _contains "$Dynu_Token" "null"; then
|
if _contains "$Dynu_Token" "null"; then
|
||||||
Dynu_Token=""
|
Dynu_Token=""
|
||||||
|
60
dnsapi/dns_gandi_livedns.sh
Executable file → Normal file
60
dnsapi/dns_gandi_livedns.sh
Executable file → Normal file
@ -7,6 +7,7 @@
|
|||||||
# Requires GANDI API KEY set in GANDI_LIVEDNS_KEY set as environment variable
|
# Requires GANDI API KEY set in GANDI_LIVEDNS_KEY set as environment variable
|
||||||
#
|
#
|
||||||
#Author: Frédéric Crozat <fcrozat@suse.com>
|
#Author: Frédéric Crozat <fcrozat@suse.com>
|
||||||
|
# Dominik Röttsches <drott@google.com>
|
||||||
#Report Bugs here: https://github.com/fcrozat/acme.sh
|
#Report Bugs here: https://github.com/fcrozat/acme.sh
|
||||||
#
|
#
|
||||||
######## Public functions #####################
|
######## Public functions #####################
|
||||||
@ -36,9 +37,7 @@ dns_gandi_livedns_add() {
|
|||||||
_debug domain "$_domain"
|
_debug domain "$_domain"
|
||||||
_debug sub_domain "$_sub_domain"
|
_debug sub_domain "$_sub_domain"
|
||||||
|
|
||||||
_gandi_livedns_rest PUT "domains/$_domain/records/$_sub_domain/TXT" "{\"rrset_ttl\": 300, \"rrset_values\":[\"$txtvalue\"]}" \
|
_dns_gandi_append_record "$_domain" "$_sub_domain" "$txtvalue"
|
||||||
&& _contains "$response" '{"message": "DNS Record Created"}' \
|
|
||||||
&& _info "Add $(__green "success")"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#Usage: fulldomain txtvalue
|
#Usage: fulldomain txtvalue
|
||||||
@ -56,9 +55,23 @@ dns_gandi_livedns_rm() {
|
|||||||
_debug fulldomain "$fulldomain"
|
_debug fulldomain "$fulldomain"
|
||||||
_debug domain "$_domain"
|
_debug domain "$_domain"
|
||||||
_debug sub_domain "$_sub_domain"
|
_debug sub_domain "$_sub_domain"
|
||||||
|
_debug txtvalue "$txtvalue"
|
||||||
|
|
||||||
_gandi_livedns_rest DELETE "domains/$_domain/records/$_sub_domain/TXT" ""
|
if ! _dns_gandi_existing_rrset_values "$_domain" "$_sub_domain"; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
_new_rrset_values=$(echo "$_rrset_values" | sed "s/...$txtvalue...//g")
|
||||||
|
# Cleanup dangling commata.
|
||||||
|
_new_rrset_values=$(echo "$_new_rrset_values" | sed "s/, ,/ ,/g")
|
||||||
|
_new_rrset_values=$(echo "$_new_rrset_values" | sed "s/, *\]/\]/g")
|
||||||
|
_new_rrset_values=$(echo "$_new_rrset_values" | sed "s/\[ *,/\[/g")
|
||||||
|
_debug "New rrset_values" "$_new_rrset_values"
|
||||||
|
|
||||||
|
_gandi_livedns_rest PUT \
|
||||||
|
"domains/$_domain/records/$_sub_domain/TXT" \
|
||||||
|
"{\"rrset_ttl\": 300, \"rrset_values\": $_new_rrset_values}" \
|
||||||
|
&& _contains "$response" '{"message": "DNS Record Created"}' \
|
||||||
|
&& _info "Removing record $(__green "success")"
|
||||||
}
|
}
|
||||||
|
|
||||||
#################### Private functions below ##################################
|
#################### Private functions below ##################################
|
||||||
@ -98,6 +111,45 @@ _get_root() {
|
|||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_dns_gandi_append_record() {
|
||||||
|
domain=$1
|
||||||
|
sub_domain=$2
|
||||||
|
txtvalue=$3
|
||||||
|
|
||||||
|
if _dns_gandi_existing_rrset_values "$domain" "$sub_domain"; then
|
||||||
|
_debug "Appending new value"
|
||||||
|
_rrset_values=$(echo "$_rrset_values" | sed "s/\"]/\",\"$txtvalue\"]/")
|
||||||
|
else
|
||||||
|
_debug "Creating new record" "$_rrset_values"
|
||||||
|
_rrset_values="[\"$txtvalue\"]"
|
||||||
|
fi
|
||||||
|
_debug new_rrset_values "$_rrset_values"
|
||||||
|
_gandi_livedns_rest PUT "domains/$_domain/records/$sub_domain/TXT" \
|
||||||
|
"{\"rrset_ttl\": 300, \"rrset_values\": $_rrset_values}" \
|
||||||
|
&& _contains "$response" '{"message": "DNS Record Created"}' \
|
||||||
|
&& _info "Adding record $(__green "success")"
|
||||||
|
}
|
||||||
|
|
||||||
|
_dns_gandi_existing_rrset_values() {
|
||||||
|
domain=$1
|
||||||
|
sub_domain=$2
|
||||||
|
if ! _gandi_livedns_rest GET "domains/$domain/records/$sub_domain"; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
if ! _contains "$response" '"rrset_type": "TXT"'; then
|
||||||
|
_debug "Does not have a _acme-challenge TXT record yet."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
if _contains "$response" '"rrset_values": \[\]'; then
|
||||||
|
_debug "Empty rrset_values for TXT record, no previous TXT record."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
_debug "Already has TXT record."
|
||||||
|
_rrset_values=$(echo "$response" | _egrep_o 'rrset_values.*\[.*\]' \
|
||||||
|
| _egrep_o '\[".*\"]')
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
_gandi_livedns_rest() {
|
_gandi_livedns_rest() {
|
||||||
m=$1
|
m=$1
|
||||||
ep="$2"
|
ep="$2"
|
||||||
|
@ -74,8 +74,26 @@ _hostingde_getZoneConfig() {
|
|||||||
return $returnCode
|
return $returnCode
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_hostingde_getZoneStatus() {
|
||||||
|
_debug "Checking Zone status"
|
||||||
|
curData="{\"filter\":{\"field\":\"zoneConfigId\",\"value\":\"${zoneConfigId}\"},\"limit\":1,\"authToken\":\"${HOSTINGDE_APIKEY}\"}"
|
||||||
|
curResult="$(_post "${curData}" "${HOSTINGDE_ENDPOINT}/api/dns/v1/json/zonesFind")"
|
||||||
|
_debug "Calling zonesFind '${curData}' '${HOSTINGDE_ENDPOINT}/api/dns/v1/json/zonesFind'"
|
||||||
|
_debug "Result of zonesFind '$curResult'"
|
||||||
|
zoneStatus=$(echo "${curResult}" | grep -v success | _egrep_o '"status":.*' | cut -d ':' -f 2 | cut -d '"' -f 2)
|
||||||
|
_debug "zoneStatus '${zoneStatus}'"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
_hostingde_addRecord() {
|
_hostingde_addRecord() {
|
||||||
_info "Adding record to zone"
|
_info "Adding record to zone"
|
||||||
|
_hostingde_getZoneStatus
|
||||||
|
_debug "Result of zoneStatus: '${zoneStatus}'"
|
||||||
|
while [ "${zoneStatus}" != "active" ]; do
|
||||||
|
_sleep 5
|
||||||
|
_hostingde_getZoneStatus
|
||||||
|
_debug "Result of zoneStatus: '${zoneStatus}'"
|
||||||
|
done
|
||||||
curData="{\"authToken\":\"${HOSTINGDE_APIKEY}\",\"zoneConfig\":{\"id\":\"${zoneConfigId}\"},\"recordsToAdd\":[{\"name\":\"${fulldomain}\",\"type\":\"TXT\",\"content\":\"\\\"${txtvalue}\\\"\",\"ttl\":3600}]}"
|
curData="{\"authToken\":\"${HOSTINGDE_APIKEY}\",\"zoneConfig\":{\"id\":\"${zoneConfigId}\"},\"recordsToAdd\":[{\"name\":\"${fulldomain}\",\"type\":\"TXT\",\"content\":\"\\\"${txtvalue}\\\"\",\"ttl\":3600}]}"
|
||||||
curResult="$(_post "${curData}" "${HOSTINGDE_ENDPOINT}/api/dns/v1/json/zoneUpdate")"
|
curResult="$(_post "${curData}" "${HOSTINGDE_ENDPOINT}/api/dns/v1/json/zoneUpdate")"
|
||||||
_debug "Calling zoneUpdate: '${curData}' '${HOSTINGDE_ENDPOINT}/api/dns/v1/json/zoneUpdate'"
|
_debug "Calling zoneUpdate: '${curData}' '${HOSTINGDE_ENDPOINT}/api/dns/v1/json/zoneUpdate'"
|
||||||
@ -93,6 +111,13 @@ _hostingde_addRecord() {
|
|||||||
|
|
||||||
_hostingde_removeRecord() {
|
_hostingde_removeRecord() {
|
||||||
_info "Removing record from zone"
|
_info "Removing record from zone"
|
||||||
|
_hostingde_getZoneStatus
|
||||||
|
_debug "Result of zoneStatus: '$zoneStatus'"
|
||||||
|
while [ "$zoneStatus" != "active" ]; do
|
||||||
|
_sleep 5
|
||||||
|
_hostingde_getZoneStatus
|
||||||
|
_debug "Result of zoneStatus: '$zoneStatus'"
|
||||||
|
done
|
||||||
curData="{\"authToken\":\"${HOSTINGDE_APIKEY}\",\"zoneConfig\":{\"id\":\"${zoneConfigId}\"},\"recordsToDelete\":[{\"name\":\"${fulldomain}\",\"type\":\"TXT\",\"content\":\"\\\"${txtvalue}\\\"\"}]}"
|
curData="{\"authToken\":\"${HOSTINGDE_APIKEY}\",\"zoneConfig\":{\"id\":\"${zoneConfigId}\"},\"recordsToDelete\":[{\"name\":\"${fulldomain}\",\"type\":\"TXT\",\"content\":\"\\\"${txtvalue}\\\"\"}]}"
|
||||||
curResult="$(_post "${curData}" "${HOSTINGDE_ENDPOINT}/api/dns/v1/json/zoneUpdate")"
|
curResult="$(_post "${curData}" "${HOSTINGDE_ENDPOINT}/api/dns/v1/json/zoneUpdate")"
|
||||||
_debug "Calling zoneUpdate: '${curData}' '${HOSTINGDE_ENDPOINT}/api/dns/v1/json/zoneUpdate'"
|
_debug "Calling zoneUpdate: '${curData}' '${HOSTINGDE_ENDPOINT}/api/dns/v1/json/zoneUpdate'"
|
||||||
|
@ -38,8 +38,8 @@ dns_loopia_add() {
|
|||||||
|
|
||||||
_info "Adding record"
|
_info "Adding record"
|
||||||
|
|
||||||
_loopia_add_record "$_domain" "$_sub_domain"
|
_loopia_add_sub_domain "$_domain" "$_sub_domain"
|
||||||
_loopia_update_record "$_domain" "$_sub_domain" "$txtvalue"
|
_loopia_add_record "$_domain" "$_sub_domain" "$txtvalue"
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -96,6 +96,37 @@ dns_loopia_rm() {
|
|||||||
|
|
||||||
#################### Private functions below ##################################
|
#################### Private functions below ##################################
|
||||||
|
|
||||||
|
_loopia_get_records() {
|
||||||
|
domain=$1
|
||||||
|
sub_domain=$2
|
||||||
|
|
||||||
|
xml_content=$(printf '<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<methodCall>
|
||||||
|
<methodName>getZoneRecords</methodName>
|
||||||
|
<params>
|
||||||
|
<param>
|
||||||
|
<value><string>%s</string></value>
|
||||||
|
</param>
|
||||||
|
<param>
|
||||||
|
<value><string>%s</string></value>
|
||||||
|
</param>
|
||||||
|
<param>
|
||||||
|
<value><string>%s</string></value>
|
||||||
|
</param>
|
||||||
|
<param>
|
||||||
|
<value><string>%s</string></value>
|
||||||
|
</param>
|
||||||
|
</params>
|
||||||
|
</methodCall>' $LOOPIA_User $LOOPIA_Password "$domain" "$sub_domain")
|
||||||
|
|
||||||
|
response="$(_post "$xml_content" "$LOOPIA_Api" "" "POST")"
|
||||||
|
if ! _contains "$response" "<array>"; then
|
||||||
|
_err "Error"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
_get_root() {
|
_get_root() {
|
||||||
domain=$1
|
domain=$1
|
||||||
_debug "get root"
|
_debug "get root"
|
||||||
@ -137,14 +168,14 @@ _get_root() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_loopia_update_record() {
|
_loopia_add_record() {
|
||||||
domain=$1
|
domain=$1
|
||||||
sub_domain=$2
|
sub_domain=$2
|
||||||
txtval=$3
|
txtval=$3
|
||||||
|
|
||||||
xml_content=$(printf '<?xml version="1.0" encoding="UTF-8"?>
|
xml_content=$(printf '<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<methodCall>
|
<methodCall>
|
||||||
<methodName>updateZoneRecord</methodName>
|
<methodName>addZoneRecord</methodName>
|
||||||
<params>
|
<params>
|
||||||
<param>
|
<param>
|
||||||
<value><string>%s</string></value>
|
<value><string>%s</string></value>
|
||||||
@ -176,10 +207,6 @@ _loopia_update_record() {
|
|||||||
<name>rdata</name>
|
<name>rdata</name>
|
||||||
<value><string>%s</string></value>
|
<value><string>%s</string></value>
|
||||||
</member>
|
</member>
|
||||||
<member>
|
|
||||||
<name>record_id</name>
|
|
||||||
<value><int>0</int></value>
|
|
||||||
</member>
|
|
||||||
</struct>
|
</struct>
|
||||||
</param>
|
</param>
|
||||||
</params>
|
</params>
|
||||||
@ -194,10 +221,42 @@ _loopia_update_record() {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
_loopia_add_record() {
|
_sub_domain_exists() {
|
||||||
domain=$1
|
domain=$1
|
||||||
sub_domain=$2
|
sub_domain=$2
|
||||||
|
|
||||||
|
xml_content=$(printf '<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<methodCall>
|
||||||
|
<methodName>getSubdomains</methodName>
|
||||||
|
<params>
|
||||||
|
<param>
|
||||||
|
<value><string>%s</string></value>
|
||||||
|
</param>
|
||||||
|
<param>
|
||||||
|
<value><string>%s</string></value>
|
||||||
|
</param>
|
||||||
|
<param>
|
||||||
|
<value><string>%s</string></value>
|
||||||
|
</param>
|
||||||
|
</params>
|
||||||
|
</methodCall>' $LOOPIA_User $LOOPIA_Password "$domain")
|
||||||
|
|
||||||
|
response="$(_post "$xml_content" "$LOOPIA_Api" "" "POST")"
|
||||||
|
|
||||||
|
if _contains "$response" "$sub_domain"; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
_loopia_add_sub_domain() {
|
||||||
|
domain=$1
|
||||||
|
sub_domain=$2
|
||||||
|
|
||||||
|
if _sub_domain_exists "$domain" "$sub_domain"; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
xml_content=$(printf '<?xml version="1.0" encoding="UTF-8"?>
|
xml_content=$(printf '<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<methodCall>
|
<methodCall>
|
||||||
<methodName>addSubdomain</methodName>
|
<methodName>addSubdomain</methodName>
|
||||||
|
@ -199,9 +199,12 @@ _namecheap_check_config() {
|
|||||||
_set_namecheap_TXT() {
|
_set_namecheap_TXT() {
|
||||||
subdomain=$2
|
subdomain=$2
|
||||||
txt=$3
|
txt=$3
|
||||||
tld=$(echo "$1" | cut -d '.' -f 2)
|
|
||||||
sld=$(echo "$1" | cut -d '.' -f 1)
|
if ! _namecheap_set_tld_sld "$1"; then
|
||||||
request="namecheap.domains.dns.getHosts&SLD=$sld&TLD=$tld"
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
request="namecheap.domains.dns.getHosts&SLD=${_sld}&TLD=${_tld}"
|
||||||
|
|
||||||
if ! _namecheap_post "$request"; then
|
if ! _namecheap_post "$request"; then
|
||||||
_err "$error"
|
_err "$error"
|
||||||
@ -231,7 +234,7 @@ EOT
|
|||||||
|
|
||||||
_debug hostrequestfinal "$_hostrequest"
|
_debug hostrequestfinal "$_hostrequest"
|
||||||
|
|
||||||
request="namecheap.domains.dns.setHosts&SLD=${sld}&TLD=${tld}${_hostrequest}"
|
request="namecheap.domains.dns.setHosts&SLD=${_sld}&TLD=${_tld}${_hostrequest}"
|
||||||
|
|
||||||
if ! _namecheap_post "$request"; then
|
if ! _namecheap_post "$request"; then
|
||||||
_err "$error"
|
_err "$error"
|
||||||
@ -244,9 +247,12 @@ EOT
|
|||||||
_del_namecheap_TXT() {
|
_del_namecheap_TXT() {
|
||||||
subdomain=$2
|
subdomain=$2
|
||||||
txt=$3
|
txt=$3
|
||||||
tld=$(echo "$1" | cut -d '.' -f 2)
|
|
||||||
sld=$(echo "$1" | cut -d '.' -f 1)
|
if ! _namecheap_set_tld_sld "$1"; then
|
||||||
request="namecheap.domains.dns.getHosts&SLD=$sld&TLD=$tld"
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
request="namecheap.domains.dns.getHosts&SLD=${_sld}&TLD=${_tld}"
|
||||||
|
|
||||||
if ! _namecheap_post "$request"; then
|
if ! _namecheap_post "$request"; then
|
||||||
_err "$error"
|
_err "$error"
|
||||||
@ -286,7 +292,7 @@ EOT
|
|||||||
|
|
||||||
_debug hostrequestfinal "$_hostrequest"
|
_debug hostrequestfinal "$_hostrequest"
|
||||||
|
|
||||||
request="namecheap.domains.dns.setHosts&SLD=${sld}&TLD=${tld}${_hostrequest}"
|
request="namecheap.domains.dns.setHosts&SLD=${_sld}&TLD=${_tld}${_hostrequest}"
|
||||||
|
|
||||||
if ! _namecheap_post "$request"; then
|
if ! _namecheap_post "$request"; then
|
||||||
_err "$error"
|
_err "$error"
|
||||||
@ -306,3 +312,45 @@ _namecheap_add_host() {
|
|||||||
_hostindex=$(_math "$_hostindex" + 1)
|
_hostindex=$(_math "$_hostindex" + 1)
|
||||||
_hostrequest=$(printf '%s&HostName%d=%s&RecordType%d=%s&Address%d=%s&MXPref%d=%d&TTL%d=%d' "$_hostrequest" "$_hostindex" "$1" "$_hostindex" "$2" "$_hostindex" "$3" "$_hostindex" "$4" "$_hostindex" "$5")
|
_hostrequest=$(printf '%s&HostName%d=%s&RecordType%d=%s&Address%d=%s&MXPref%d=%d&TTL%d=%d' "$_hostrequest" "$_hostindex" "$1" "$_hostindex" "$2" "$_hostindex" "$3" "$_hostindex" "$4" "$_hostindex" "$5")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_namecheap_set_tld_sld() {
|
||||||
|
domain=$1
|
||||||
|
_tld=""
|
||||||
|
_sld=""
|
||||||
|
|
||||||
|
i=2
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
|
||||||
|
_tld=$(printf "%s" "$domain" | cut -d . -f $i-100)
|
||||||
|
_debug tld "$_tld"
|
||||||
|
|
||||||
|
if [ -z "$_tld" ]; then
|
||||||
|
_debug "invalid tld"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
j=$(_math "$i" - 1)
|
||||||
|
|
||||||
|
_sld=$(printf "%s" "$domain" | cut -d . -f 1-"$j")
|
||||||
|
_debug sld "$_sld"
|
||||||
|
|
||||||
|
if [ -z "$_sld" ]; then
|
||||||
|
_debug "invalid sld"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
request="namecheap.domains.dns.getHosts&SLD=$_sld&TLD=$_tld"
|
||||||
|
|
||||||
|
if ! _namecheap_post "$request"; then
|
||||||
|
_debug "sld($_sld)/tld($_tld) not found"
|
||||||
|
else
|
||||||
|
_debug "sld($_sld)/tld($_tld) found"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
i=$(_math "$i" + 1)
|
||||||
|
|
||||||
|
done
|
||||||
|
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user