12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- #!/usr/bin/env sh
- # shellcheck disable=SC2034
- dns_acmeproxy_info='AcmeProxy Server API
- AcmeProxy can be used to as a single host in your network to request certificates through a DNS API.
- Clients can connect with the one AcmeProxy host so you do not need to store DNS API credentials on every single host.
- Site: github.com/mdbraber/acmeproxy
- Docs: github.com/acmesh-official/acme.sh/wiki/dnsapi2#dns_acmeproxy
- Options:
- ACMEPROXY_ENDPOINT API Endpoint
- ACMEPROXY_USERNAME Username
- ACMEPROXY_PASSWORD Password
- Issues: github.com/acmesh-official/acme.sh/issues/2251
- Author: Maarten den Braber
- '
- dns_acmeproxy_add() {
- fulldomain="${1}"
- txtvalue="${2}"
- action="present"
- _debug "Calling: _acmeproxy_request() '${fulldomain}' '${txtvalue}' '${action}'"
- _acmeproxy_request "$fulldomain" "$txtvalue" "$action"
- }
- dns_acmeproxy_rm() {
- fulldomain="${1}"
- txtvalue="${2}"
- action="cleanup"
- _debug "Calling: _acmeproxy_request() '${fulldomain}' '${txtvalue}' '${action}'"
- _acmeproxy_request "$fulldomain" "$txtvalue" "$action"
- }
- _acmeproxy_request() {
- ## Nothing to see here, just some housekeeping
- fulldomain=$1
- txtvalue=$2
- action=$3
- _info "Using acmeproxy"
- _debug fulldomain "$fulldomain"
- _debug txtvalue "$txtvalue"
- ACMEPROXY_ENDPOINT="${ACMEPROXY_ENDPOINT:-$(_readaccountconf_mutable ACMEPROXY_ENDPOINT)}"
- ACMEPROXY_USERNAME="${ACMEPROXY_USERNAME:-$(_readaccountconf_mutable ACMEPROXY_USERNAME)}"
- ACMEPROXY_PASSWORD="${ACMEPROXY_PASSWORD:-$(_readaccountconf_mutable ACMEPROXY_PASSWORD)}"
- ## Check for the endpoint
- if [ -z "$ACMEPROXY_ENDPOINT" ]; then
- ACMEPROXY_ENDPOINT=""
- _err "You didn't specify the endpoint"
- _err "Please set them via 'export ACMEPROXY_ENDPOINT=https://ip:port' and try again."
- return 1
- fi
- ## Save the credentials to the account file
- _saveaccountconf_mutable ACMEPROXY_ENDPOINT "$ACMEPROXY_ENDPOINT"
- _saveaccountconf_mutable ACMEPROXY_USERNAME "$ACMEPROXY_USERNAME"
- _saveaccountconf_mutable ACMEPROXY_PASSWORD "$ACMEPROXY_PASSWORD"
- if [ -z "$ACMEPROXY_USERNAME" ] || [ -z "$ACMEPROXY_PASSWORD" ]; then
- _info "ACMEPROXY_USERNAME and/or ACMEPROXY_PASSWORD not set - using without client authentication! Make sure you're using server authentication (e.g. IP-based)"
- export _H1="Accept: application/json"
- export _H2="Content-Type: application/json"
- else
- ## Base64 encode the credentials
- credentials=$(printf "%b" "$ACMEPROXY_USERNAME:$ACMEPROXY_PASSWORD" | _base64)
- ## Construct the HTTP Authorization header
- export _H1="Authorization: Basic $credentials"
- export _H2="Accept: application/json"
- export _H3="Content-Type: application/json"
- fi
- ## Add the challenge record to the acmeproxy grid member
- response="$(_post "{\"fqdn\": \"$fulldomain.\", \"value\": \"$txtvalue\"}" "$ACMEPROXY_ENDPOINT/$action" "" "POST")"
- ## Let's see if we get something intelligible back from the unit
- if echo "$response" | grep "\"$txtvalue\"" >/dev/null; then
- _info "Successfully updated the txt record"
- return 0
- else
- _err "Error encountered during record addition"
- _err "$response"
- return 1
- fi
- }
- #################### Private functions below ##################################
|