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
# MyDevil.net API (2019-02-03) # # MyDevil.net already supports automatic Let's Encrypt certificates, # except for wildcard domains. # # This script depends on `devil` command that MyDevil.net provides, # which means that it works only on server side. # # Author: Marcin Konicki <https://ahwayakchih.neoni.net> # ######## Public functions #####################
#Usage: dns_mydevil_add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs" dns_mydevil_add() { fulldomain=$1 txtvalue=$2 domain=""
if ! _exists "devil"; then _err "Could not find 'devil' command." return 1 fi
_info "Using mydevil"
domain=$(mydevil_get_domain "$fulldomain") if [ -z "$domain" ]; then _err "Invalid domain name: could not find root domain of $fulldomain." return 1 fi
# No need to check if record name exists, `devil` always adds new record. # In worst case scenario, we end up with multiple identical records.
_info "Adding $fulldomain record for domain $domain" if devil dns add "$domain" "$fulldomain" TXT "$txtvalue"; then _info "Successfully added TXT record, ready for validation." return 0 else _err "Unable to add DNS record." return 1 fi }
#Usage: fulldomain txtvalue #Remove the txt record after validation. dns_mydevil_rm() { fulldomain=$1 txtvalue=$2 domain=""
if ! _exists "devil"; then _err "Could not find 'devil' command." return 1 fi
_info "Using mydevil"
domain=$(mydevil_get_domain "$fulldomain") if [ -z "$domain" ]; then _err "Invalid domain name: could not find root domain of $fulldomain." return 1 fi
# catch one or more numbers num='[0-9][0-9]*' # catch one or more whitespace w=$(printf '[\t ][\t ]*') # catch anything, except newline any='.*' # filter to make sure we do not delete other records validRecords="^${num}${w}${fulldomain}${w}TXT${w}${any}${txtvalue}$" for id in $(devil dns list "$domain" | tail -n+2 | grep "${validRecords}" | cut -w -s -f 1); do _info "Removing record $id from domain $domain" echo "y" | devil dns del "$domain" "$id" || _err "Could not remove DNS record." done }
#################### Private functions below ##################################
# Usage: domain=$(mydevil_get_domain "_acme-challenge.www.domain.com" || _err "Invalid domain name") # echo $domain mydevil_get_domain() { fulldomain=$1 domain=""
for domain in $(devil dns list | cut -w -s -f 1 | tail -n+2); do _debug "Checking domain: $domain" if _endswith "$fulldomain" "$domain"; then _debug "Fulldomain '$fulldomain' matches '$domain'" printf -- "%s" "$domain" return 0 fi done
return 1 }
|