diff --git a/dnsapi/dns_japi.sh b/dnsapi/dns_japi.sh new file mode 100755 index 00000000..50b788de --- /dev/null +++ b/dnsapi/dns_japi.sh @@ -0,0 +1,113 @@ +#!/usr/bin/env sh + +#This is a working API script to add a TXT record to the DNS Exit-managed DNS service. +# dns_myapi_add() +#Which will be called by acme.sh to add the txt record to th DNS Exit DNS service as part +#of the SSL certificate provisioning request. +#returns 0 means success, otherwise error. +# +#Author: John Berlet +#Date: 31/01/2022 +#Report Bugs here: https://github.com/acmesh-official/acme.sh/issues/3925 +# +######## Public functions ##################### + + +dns_japi_add() { + + + fulldomain=$1 + txtvalue=$2 + JAPIendpoint="https://api.dnsexit.com/dns/" + JAPIdomain="${_domain}" + #_debug "Domain being used with custom script is: $domain" + fullchallengedomain="${JAPI_domain:-$(_readaccountconf_mutable JAPI_domain)}" + _debug "Full Challenge Domain is: $fullchallengedomain" + JAPI_apikey="${JAPI_apikey:-$(_readaccountconf_mutable JAPI_apikey)}" + #$passedDomain=$_domain + + #Set H1,H2 headers with DNS Exit API key + export _H1="Content-Type: application/json" + export _H2="apikey: $JAPI_apikey" + + _debug "Defined apikey $JAPI_apikey" + if [ -z "$JAPI_apikey" ] || [ -z "$fullchallengedomain" ]; then + JAPI_apikey="" + _info "You didn't specify the api key or the full zone domain name" + _info "Please define --> 'export xxx' your api key and fully qualified zone and domain name" + _info "Example: 'export JAPI_apikey='" + _info "Cont: 'export JAPI_domain=<_acme-challenge.your domain name>'" + return 1 + fi + #Save DNS Exit account API/domain challenge zone/domain name in account.conf for future renewals + _saveaccountconf_mutable JAPI_apikey "$JAPI_apikey" + _saveaccountconf_mutable JAPI_domain "$JAPI_domain" + + + _debug "First detect the root zone" + _debug "Calling DNS Exit DNS API..." + _info "Using JAPI" + _debug "Passed domain to function: $fulldomain" + _debug "Full Challenge domain: $fullchallengedomain" + _debug txtvalue "$txtvalue" + #_debug _domain_id "$_domain_id" + #_debug _sub_domain "$_sub_domain" + #_debug _domain "$_domain" + #_err "Not implemented!" + + response="$(_post "{\"domain\":\"$JAPIdomain\",\"update\": {\"type\":\"TXT\",\"name\":\"$fullchallengedomain\",\"content\":\"$txtvalue\",\"ttl\":0}}" $JAPIendpoint "" POST "application/json")" + if ! printf "%s" "$response" | grep \"code\":0>/dev/null; then + _err "There was an error updating the TXT record..." + _err "DNS Exit API response: $response" + _err "Please refer to this site for additional information related to this error code - https://dnsexit.com/dns/dns-api/" + return 1 + fi + return 0 +} +#Usage: fulldomain txtvalue +#Remove the txt record after validation. +dns_japi_rm() { + fulldomain=$1 + txtvalue=$2 + JAPIendpoint="https://api.dnsexit.com/dns/" + JAPIdomain="${_domain}" + #_debug "Domain being used with custom script is: $domain" + fullchallengedomain="${JAPI_domain:-$(_readaccountconf_mutable JAPI_domain)}" + _debug "Full Challenge Domain is: $fullchallengedomain" + JAPI_apikey="${JAPI_apikey:-$(_readaccountconf_mutable JAPI_apikey)}" + #Set H1,H2 headers with DNS Exit API key + export _H1="Content-Type: application/json" + export _H2="apikey: $JAPI_apikey" + #domainUpdate=$domain + _debug "Defined apikey $JAPI_apikey" + if [ -z "$JAPI_apikey" ] || [ -z "$fullchallengedomain" ]; then + JAPI_apikey="" + _info "You didn't specify the api key or the full zone domain name for the TXT record removal" + _info "Please define --> 'export xxx' your api key and fully qualified zone and domain name" + _info "Example: 'export JAPI_apikey='" + _info "Cont: 'export JAPI_domain=<_acme-challenge.your domain name>'" + return 1 + fi + _debug "First detect the root zone" + _debug "Calling DNS Exit DNS API..." + _info "Using JAPI" + _debug "Passed domain to function: $fulldomain" + _debug "Full Challenge domain: $fullchallengedomain" + _debug txtvalue "$txtvalue" + #_debug _domain_id "$_domain_id" + #_debug _sub_domain "$_sub_domain" + #_debug _domain "$_domain" + #_err "Not implemented!" + + response="$(_post "{\"domain\":\"$JAPIdomain\",\"delete\": {\"type\":\"TXT\",\"name\":\"$fullchallengedomain\",\"content\":\"$txtvalue\",\"ttl\":0}}" $JAPIendpoint "" POST "application/json")" + if ! printf "%s" "$response" | grep \"code\":0>/dev/null; then + _err "There was an error deleting the TXT record..." + _err "DNS Exit API response: $response" + _err "Please refer to this site for additional information related to this error code - https://dnsexit.com/dns/dns-api/" + return 1 + fi + return 0 + + _debug fulldomain "$fulldomain" + _debug txtvalue "$txtvalue" +}