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.
155 lines
3.7 KiB
155 lines
3.7 KiB
#!/usr/bin/env sh |
|
# shellcheck disable=SC2034 |
|
dns_leaseweb_info='Leaseweb.com |
|
Site: Leaseweb.com |
|
Docs: github.com/acmesh-official/acme.sh/wiki/dnsapi2#dns_leaseweb |
|
Options: |
|
LSW_Key API Key |
|
Issues: github.com/acmesh-official/acme.sh/issues/2558 |
|
Author: Rolph Haspers <r.haspers@global.leaseweb.com> |
|
' |
|
|
|
#See https://developer.leaseweb.com for more information. |
|
######## Public functions ##################### |
|
|
|
LSW_API="https://api.leaseweb.com/hosting/v2/domains" |
|
|
|
#Usage: dns_leaseweb_add _acme-challenge.www.domain.com |
|
dns_leaseweb_add() { |
|
fulldomain=$1 |
|
txtvalue=$2 |
|
|
|
LSW_Key="${LSW_Key:-$(_readaccountconf_mutable LSW_Key)}" |
|
if [ -z "$LSW_Key" ]; then |
|
LSW_Key="" |
|
_err "You don't specify Leaseweb api key yet." |
|
_err "Please create your key and try again." |
|
return 1 |
|
fi |
|
|
|
#save the api key to the account conf file. |
|
_saveaccountconf_mutable LSW_Key "$LSW_Key" |
|
|
|
_debug "First detect the root zone" |
|
if ! _get_root "$fulldomain"; then |
|
_err "invalid domain" |
|
return 1 |
|
fi |
|
|
|
_debug _root_domain "$_domain" |
|
_debug _domain "$fulldomain" |
|
|
|
if _lsw_api "POST" "$_domain" "$fulldomain" "$txtvalue"; then |
|
if [ "$_code" = "201" ]; then |
|
_info "Added, OK" |
|
return 0 |
|
else |
|
_err "Add txt record error, invalid code. Code: $_code" |
|
return 1 |
|
fi |
|
fi |
|
_err "Add txt record error." |
|
|
|
return 1 |
|
} |
|
|
|
#Usage: fulldomain txtvalue |
|
#Remove the txt record after validation. |
|
dns_leaseweb_rm() { |
|
fulldomain=$1 |
|
txtvalue=$2 |
|
|
|
LSW_Key="${LSW_Key:-$(_readaccountconf_mutable LSW_Key)}" |
|
|
|
_debug "First detect the root zone" |
|
if ! _get_root "$fulldomain"; then |
|
_err "invalid domain" |
|
return 1 |
|
fi |
|
|
|
_debug _root_domain "$_domain" |
|
_debug _domain "$fulldomain" |
|
|
|
if _lsw_api "DELETE" "$_domain" "$fulldomain" "$txtvalue"; then |
|
if [ "$_code" = "204" ]; then |
|
_info "Deleted, OK" |
|
return 0 |
|
else |
|
_err "Delete txt record error." |
|
return 1 |
|
fi |
|
fi |
|
_err "Delete txt record error." |
|
|
|
return 1 |
|
} |
|
|
|
#################### Private functions below ################################## |
|
# _acme-challenge.www.domain.com |
|
# returns |
|
# _domain=domain.com |
|
_get_root() { |
|
rdomain=$1 |
|
i="$(echo "$rdomain" | tr '.' ' ' | wc -w)" |
|
i=$(_math "$i" - 1) |
|
|
|
while true; do |
|
h=$(printf "%s" "$rdomain" | cut -d . -f "$i"-100) |
|
_debug h "$h" |
|
if [ -z "$h" ]; then |
|
return 1 #not valid domain |
|
fi |
|
|
|
#Check API if domain exists |
|
if _lsw_api "GET" "$h"; then |
|
if [ "$_code" = "200" ]; then |
|
_domain="$h" |
|
return 0 |
|
fi |
|
fi |
|
i=$(_math "$i" - 1) |
|
if [ "$i" -lt 2 ]; then |
|
return 1 #not found, no need to check _acme-challenge.sub.domain in leaseweb api. |
|
fi |
|
done |
|
|
|
return 1 |
|
} |
|
|
|
_lsw_api() { |
|
cmd=$1 |
|
d=$2 |
|
fd=$3 |
|
tvalue=$4 |
|
|
|
# Construct the HTTP Authorization header |
|
export _H2="Content-Type: application/json" |
|
export _H1="X-Lsw-Auth: ${LSW_Key}" |
|
|
|
if [ "$cmd" = "GET" ]; then |
|
response="$(_get "$LSW_API/$d")" |
|
_code="$(grep "^HTTP" "$HTTP_HEADER" | _tail_n 1 | cut -d " " -f 2 | tr -d "\\r\\n")" |
|
_debug "http response code $_code" |
|
_debug response "$response" |
|
return 0 |
|
fi |
|
|
|
if [ "$cmd" = "POST" ]; then |
|
data="{\"name\": \"$fd.\",\"type\": \"TXT\",\"content\": [\"$tvalue\"],\"ttl\": 60}" |
|
response="$(_post "$data" "$LSW_API/$d/resourceRecordSets" "$data" "POST")" |
|
_code="$(grep "^HTTP" "$HTTP_HEADER" | _tail_n 1 | cut -d " " -f 2 | tr -d "\\r\\n")" |
|
_debug "http response code $_code" |
|
_debug response "$response" |
|
return 0 |
|
fi |
|
|
|
if [ "$cmd" = "DELETE" ]; then |
|
response="$(_post "" "$LSW_API/$d/resourceRecordSets/$fd/TXT" "" "DELETE")" |
|
_code="$(grep "^HTTP" "$HTTP_HEADER" | _tail_n 1 | cut -d " " -f 2 | tr -d "\\r\\n")" |
|
_debug "http response code $_code" |
|
_debug response "$response" |
|
return 0 |
|
fi |
|
|
|
return 1 |
|
}
|
|
|