mirror of
https://github.com/acmesh-official/acme.sh.git
synced 2025-06-18 07:12:45 +00:00
Ubiquiti removed keytool (and java) from recent releases of Unifi OS. This moves from keytool to openssl's native pkcs12. Tested on Unifi Dream Machine which runs Unifi OS and a built-in Unifi controller. Also added backup of existing files prior to change in case anything goes wrong, and update system configuration with compatible ciphers.
156 lines
3.7 KiB
Bash
156 lines
3.7 KiB
Bash
#!/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
|
|
}
|