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.
|
|
#!/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 }
|