These are the pros and cons of dns_he_dyntxt, compared to dns_he: Pros: - No need to store a dns.he.net account password on your server - Uses a very simple write-only API Cons: - You must manually create placeholder _acme-challenge TXT records, and generate/copy the same DDNS key across all records. - This script WILL FAIL to issue both a domain and its wildcard, because '-d example.com -d *.example.com' requires multiple TXT records. Switch to 'dns_he' if you need this feature.pull/4318/head
parent
ef01de6149
commit
019291fcdc
@ -0,0 +1,86 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
# Hurricane Electric hook script for acme.sh (dynamic TXT API)
|
||||||
|
#
|
||||||
|
# These are the pros and cons of dns_he_dyntxt, compared to dns_he:
|
||||||
|
# Pros:
|
||||||
|
# - No need to store a dns.he.net account password on your server
|
||||||
|
# - Uses a very simple write-only API
|
||||||
|
# Cons:
|
||||||
|
# - You must manually create placeholder _acme-challenge TXT records,
|
||||||
|
# and generate/copy the same DDNS key across all records.
|
||||||
|
# - This script WILL FAIL to issue both a domain and its wildcard, because
|
||||||
|
# '-d example.com -d *.example.com' requires multiple TXT records.
|
||||||
|
# Switch to 'dns_he' if you need this feature.
|
||||||
|
#
|
||||||
|
# Environment variable:
|
||||||
|
# HE_DynTXT_Key - DDNS key for all _acme-challenge TXT records
|
||||||
|
########################################################################
|
||||||
|
|
||||||
|
# Cheat sheet for passing the DNS.yml API test:
|
||||||
|
# - Set TEST_DNS_NO_WILDCARD=1
|
||||||
|
# - Create placeholder TXT records for the following domain names:
|
||||||
|
# - _acme-challenge.$TestingDomain
|
||||||
|
# - acmetestXyzRandomName.$TestingDomain
|
||||||
|
|
||||||
|
HE_DynTXT_Api="https://dyn.dns.he.net/nic/update"
|
||||||
|
|
||||||
|
######## Public functions #####################
|
||||||
|
|
||||||
|
#Usage: add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
|
||||||
|
dns_he_dyntxt_add() {
|
||||||
|
fulldomain=$1
|
||||||
|
txtvalue=$2
|
||||||
|
|
||||||
|
HE_DynTXT_Key="${HE_DynTXT_Key:-$(_readaccountconf_mutable HE_DynTXT_Key)}"
|
||||||
|
|
||||||
|
if [ -z "$HE_DynTXT_Key" ]; then
|
||||||
|
HE_DynTXT_Key=""
|
||||||
|
_err "Missing HE_DynTXT_Key. See dnsapi/dns_he_dyntxt.sh for instructions."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
#save the DDNS key to the account conf file.
|
||||||
|
_saveaccountconf_mutable HE_DynTXT_Key "$HE_DynTXT_Key"
|
||||||
|
|
||||||
|
_info "Updating record $fulldomain"
|
||||||
|
_he_dyntxt_post "$fulldomain" "$txtvalue"
|
||||||
|
return "$?"
|
||||||
|
}
|
||||||
|
|
||||||
|
dns_he_dyntxt_rm() {
|
||||||
|
fulldomain=$1
|
||||||
|
txtvalue='""' # The record is just cleared, not removed.
|
||||||
|
|
||||||
|
HE_DynTXT_Key="${HE_DynTXT_Key:-$(_readaccountconf_mutable HE_DynTXT_Key)}"
|
||||||
|
|
||||||
|
_info "Clearing record $fulldomain"
|
||||||
|
_he_dyntxt_post "$fulldomain" "$txtvalue"
|
||||||
|
return "$?"
|
||||||
|
}
|
||||||
|
|
||||||
|
##################### Private functions below ##################################
|
||||||
|
|
||||||
|
_he_dyntxt_post() {
|
||||||
|
hostname=$1
|
||||||
|
txt=$2
|
||||||
|
response="$(_post "hostname=$hostname&password=$HE_DynTXT_Key&txt=$txt" "$HE_DynTXT_Api")"
|
||||||
|
|
||||||
|
if [ "$?" != "0" ]; then
|
||||||
|
_err "POST failed"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
_debug2 response "$response"
|
||||||
|
|
||||||
|
if _contains "$response" "good" || _contains "$response" "nochg"; then
|
||||||
|
_info "Updated, OK"
|
||||||
|
return 0
|
||||||
|
elif _contains "$response" "badauth"; then
|
||||||
|
_err "'$hostname' missing placeholder TXT record, or DDNS key incorrect"
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
_err "Unknown POST response: $response"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
Loading…
Reference in new issue