mirror of
https://github.com/acmesh-official/acme.sh.git
synced 2025-05-05 17:14:55 +00:00
Add DNS API plugin for Technitium DNS Server
Signed-off-by: Avi Miller <me@dje.li>
This commit is contained in:
parent
f7f1168aad
commit
43867bb5d6
117
dnsapi/dns_technitium.sh
Normal file
117
dnsapi/dns_technitium.sh
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
#
|
||||||
|
# acme.sh DNS API plugin for Technitium DNS Server <https://technitium.com/dns/>
|
||||||
|
#
|
||||||
|
# Requires the following environment variables to be configured:
|
||||||
|
#
|
||||||
|
# DNS_WEB_URL:
|
||||||
|
# - URL for the Technitium DNS web console which must including the scheme
|
||||||
|
# and port, e.g. https://dns-server.example.com:53443
|
||||||
|
#
|
||||||
|
# DNS_API_TOKEN:
|
||||||
|
# - Provide an API token with permission to create and remove records in the
|
||||||
|
# target DNS zone. Review the documentation for the process to create a token:
|
||||||
|
# https://github.com/TechnitiumSoftware/DnsServer/blob/master/APIDOCS.md#create-api-token
|
||||||
|
#
|
||||||
|
|
||||||
|
dns_technitium_add() {
|
||||||
|
_fqdn="$1"
|
||||||
|
_text="$2"
|
||||||
|
|
||||||
|
if ! _check_dns_web_url_and_api_token; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! _get_zone "$_fqdn"; then
|
||||||
|
_err "Error: could not find zone for $_fqdn in Technitium DNS"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
_add_record_url="${DNS_WEB_URL}/api/zones/records/add?token=${DNS_API_TOKEN}&domain=${_fqdn}&zone=${_zone}&type=TXT&ttl=300&text=${_text}"
|
||||||
|
_response=$(_get "$_add_record_url" | _normalizeJson)
|
||||||
|
|
||||||
|
if _contains "$_response" "\"status\":\"ok\""; then
|
||||||
|
_info "Success: added DNS TXT record for ${_fqdn}"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
_err "Error: failed to add DNS TXT record for ${_fqdn}"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
dns_technitium_rm() {
|
||||||
|
_fqdn="$1"
|
||||||
|
_text="$2"
|
||||||
|
|
||||||
|
if ! _check_dns_web_url_and_api_token; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! _get_zone "$_fqdn"; then
|
||||||
|
_err "Error: could not find zone for $_fqdn in Techitium DNS"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
_remove_record_url="${DNS_WEB_URL}/api/zones/records/delete?token=${DNS_API_TOKEN}&domain=${_fqdn}&zone=${_zone}&type=TXT&text=${_text}"
|
||||||
|
_response=$(_get "$_remove_record_url" | _normalizeJson)
|
||||||
|
|
||||||
|
if _contains "$_response" "\"status\":\"ok\""; then
|
||||||
|
_info "Success: removed DNS TXT record for ${_fqdn}"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
_err "Error: failed to remove DNS TXT record for ${_fqdn}"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
_get_zone() {
|
||||||
|
domain=$1
|
||||||
|
i=1
|
||||||
|
|
||||||
|
_list_zones_url="${DNS_WEB_URL}/api/zones/list?token=${DNS_API_TOKEN}"
|
||||||
|
_all_zones=$(_get "$_list_zones_url" | _normalizeJson)
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
|
||||||
|
h=$(printf "%s" "$domain" | cut -d . -f "$i-100")
|
||||||
|
_debug h "$h"
|
||||||
|
if [ -z "$h" ]; then
|
||||||
|
# not valid
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if _contains "$_all_zones" "\"name\":\"$h\""; then
|
||||||
|
_zone=$h
|
||||||
|
_debug _zone "$_zone"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
i=$(_math "$i" + 1)
|
||||||
|
|
||||||
|
done
|
||||||
|
return 1
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
_check_dns_web_url_and_api_token() {
|
||||||
|
|
||||||
|
DNS_WEB_URL="${DNS_WEB_URL:-$(_readaccountconf_mutable DNS_WEB_URL)}"
|
||||||
|
DNS_API_TOKEN="${DNS_API_TOKEN:-$(_readaccountconf_mutable DNS_API_TOKEN)}"
|
||||||
|
|
||||||
|
if [ -z "$DNS_WEB_URL" ]; then
|
||||||
|
_err "Error: DNS API web interface URL not provided"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$DNS_API_TOKEN" ]; then
|
||||||
|
_err "Error: DNS API token not provided"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# store the DNS Server web console URL and API token to the account conf file.
|
||||||
|
_saveaccountconf_mutable DNS_WEB_URL "$DNS_WEB_URL"
|
||||||
|
_saveaccountconf_mutable DNS_API_TOKEN "$DNS_API_TOKEN"
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user