mirror of
https://github.com/acmesh-official/acme.sh.git
synced 2025-04-30 04:02: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.
117 lines
3.0 KiB
Bash
117 lines
3.0 KiB
Bash
#!/usr/bin/env sh
|
|
# shellcheck disable=SC2034
|
|
dns_joker_info='Joker.com
|
|
Site: Joker.com
|
|
Docs: github.com/acmesh-official/acme.sh/wiki/dnsapi2#dns_joker
|
|
Options:
|
|
JOKER_USERNAME Username
|
|
JOKER_PASSWORD Password
|
|
Issues: github.com/acmesh-official/acme.sh/issues/2840
|
|
Author: <https://github.com/aattww/>
|
|
'
|
|
|
|
JOKER_API="https://svc.joker.com/nic/replace"
|
|
|
|
######## Public functions #####################
|
|
|
|
#Usage: dns_joker_add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
|
|
dns_joker_add() {
|
|
fulldomain=$1
|
|
txtvalue=$2
|
|
|
|
JOKER_USERNAME="${JOKER_USERNAME:-$(_readaccountconf_mutable JOKER_USERNAME)}"
|
|
JOKER_PASSWORD="${JOKER_PASSWORD:-$(_readaccountconf_mutable JOKER_PASSWORD)}"
|
|
|
|
if [ -z "$JOKER_USERNAME" ] || [ -z "$JOKER_PASSWORD" ]; then
|
|
_err "No Joker.com username and password specified."
|
|
return 1
|
|
fi
|
|
|
|
_saveaccountconf_mutable JOKER_USERNAME "$JOKER_USERNAME"
|
|
_saveaccountconf_mutable JOKER_PASSWORD "$JOKER_PASSWORD"
|
|
|
|
if ! _get_root "$fulldomain"; then
|
|
_err "Invalid domain"
|
|
return 1
|
|
fi
|
|
|
|
_info "Adding TXT record"
|
|
if _joker_rest "username=$JOKER_USERNAME&password=$JOKER_PASSWORD&zone=$_domain&label=$_sub_domain&type=TXT&value=$txtvalue"; then
|
|
if _startswith "$response" "OK"; then
|
|
_info "Added, OK"
|
|
return 0
|
|
fi
|
|
fi
|
|
_err "Error adding TXT record."
|
|
return 1
|
|
}
|
|
|
|
#fulldomain txtvalue
|
|
dns_joker_rm() {
|
|
fulldomain=$1
|
|
txtvalue=$2
|
|
|
|
JOKER_USERNAME="${JOKER_USERNAME:-$(_readaccountconf_mutable JOKER_USERNAME)}"
|
|
JOKER_PASSWORD="${JOKER_PASSWORD:-$(_readaccountconf_mutable JOKER_PASSWORD)}"
|
|
|
|
if ! _get_root "$fulldomain"; then
|
|
_err "Invalid domain"
|
|
return 1
|
|
fi
|
|
|
|
_info "Removing TXT record"
|
|
# TXT record is removed by setting its value to empty.
|
|
if _joker_rest "username=$JOKER_USERNAME&password=$JOKER_PASSWORD&zone=$_domain&label=$_sub_domain&type=TXT&value="; then
|
|
if _startswith "$response" "OK"; then
|
|
_info "Removed, OK"
|
|
return 0
|
|
fi
|
|
fi
|
|
_err "Error removing TXT record."
|
|
return 1
|
|
}
|
|
|
|
#################### Private functions below ##################################
|
|
#_acme-challenge.www.domain.com
|
|
#returns
|
|
# _sub_domain=_acme-challenge.www
|
|
# _domain=domain.com
|
|
_get_root() {
|
|
fulldomain=$1
|
|
i=1
|
|
while true; do
|
|
h=$(printf "%s" "$fulldomain" | cut -d . -f $i-100)
|
|
_debug h "$h"
|
|
if [ -z "$h" ]; then
|
|
return 1
|
|
fi
|
|
|
|
# Try to remove a test record. With correct root domain, username and password this will return "OK: ..." regardless
|
|
# of record in question existing or not.
|
|
if _joker_rest "username=$JOKER_USERNAME&password=$JOKER_PASSWORD&zone=$h&label=jokerTXTUpdateTest&type=TXT&value="; then
|
|
if _startswith "$response" "OK"; then
|
|
_sub_domain="$(echo "$fulldomain" | sed "s/\\.$h\$//")"
|
|
_domain=$h
|
|
return 0
|
|
fi
|
|
fi
|
|
|
|
i=$(_math "$i" + 1)
|
|
done
|
|
|
|
_debug "Root domain not found"
|
|
return 1
|
|
}
|
|
|
|
_joker_rest() {
|
|
data="$1"
|
|
_debug data "$data"
|
|
|
|
if ! response="$(_post "$data" "$JOKER_API" "" "POST")"; then
|
|
_err "Error POSTing"
|
|
return 1
|
|
fi
|
|
_debug response "$response"
|
|
return 0
|
|
}
|