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
# shellcheck disable=SC2034 dns_openprovider_rest_info='OpenProvider (REST) Site: OpenProvider.eu OpenProvider.com Docs: github.com/acmesh-official/acme.sh/wiki/dnsapi2#dns_openprovider_rest Options: OPENPROVIDER_REST_USERNAME Openprovider Account Username OPENPROVIDER_REST_PASSWORD Openprovider Account Password Issues: github.com/acmesh-official/acme.sh/issues/6122 Author: Lambiek12 '
OPENPROVIDER_API_URL="https://api.openprovider.eu/v1beta"
######## Public functions #####################
# Usage: add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs" # Used to add txt record dns_openprovider_rest_add() { fulldomain=$1 txtvalue=$2
_openprovider_prepare_credentials || return 1
_debug "Try fetch OpenProvider DNS zone details" if ! _get_dns_zone "$fulldomain"; then _err "DNS zone not found within configured OpenProvider account." return 1 fi
if [ -n "$_domain_id" ]; then addzonerecordrequestparameters="dns/zones/$_domain_name" addzonerecordrequestbody="{\"id\":$_domain_id,\"name\":\"$_domain_name\",\"records\":{\"add\":[{\"name\":\"$_sub_domain\",\"ttl\":900,\"type\":\"TXT\",\"value\":\"$txtvalue\"}]}}"
if _openprovider_rest PUT "$addzonerecordrequestparameters" "$addzonerecordrequestbody"; then if _contains "$response" "\"success\":true"; then return 0 elif _contains "$response" "\"Duplicate record\""; then _debug "Record already existed" return 0 else _err "Adding TXT record failed due to errors." return 1 fi fi fi
_err "Adding TXT record failed due to errors." return 1 }
# Usage: rm _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs" # Used to remove the txt record after validation dns_openprovider_rest_rm() { fulldomain=$1 txtvalue=$2
_openprovider_prepare_credentials || return 1
_debug "Try fetch OpenProvider DNS zone details" if ! _get_dns_zone "$fulldomain"; then _err "DNS zone not found within configured OpenProvider account." return 1 fi
if [ -n "$_domain_id" ]; then removezonerecordrequestparameters="dns/zones/$_domain_name" removezonerecordrequestbody="{\"id\":$_domain_id,\"name\":\"$_domain_name\",\"records\":{\"remove\":[{\"name\":\"$_sub_domain\",\"ttl\":900,\"type\":\"TXT\",\"value\":\"\\\"$txtvalue\\\"\"}]}}"
if _openprovider_rest PUT "$removezonerecordrequestparameters" "$removezonerecordrequestbody"; then if _contains "$response" "\"success\":true"; then return 0 else _err "Removing TXT record failed due to errors." return 1 fi fi fi
_err "Removing TXT record failed due to errors." return 1 }
#################### OpenProvider API common functions #################### _openprovider_prepare_credentials() { OPENPROVIDER_REST_USERNAME="${OPENPROVIDER_REST_USERNAME:-$(_readaccountconf_mutable OPENPROVIDER_REST_USERNAME)}" OPENPROVIDER_REST_PASSWORD="${OPENPROVIDER_REST_PASSWORD:-$(_readaccountconf_mutable OPENPROVIDER_REST_PASSWORD)}"
if [ -z "$OPENPROVIDER_REST_USERNAME" ] || [ -z "$OPENPROVIDER_REST_PASSWORD" ]; then OPENPROVIDER_REST_USERNAME="" OPENPROVIDER_REST_PASSWORD="" _err "You didn't specify the Openprovider username or password yet." return 1 fi
#save the credentials to the account conf file. _saveaccountconf_mutable OPENPROVIDER_REST_USERNAME "$OPENPROVIDER_REST_USERNAME" _saveaccountconf_mutable OPENPROVIDER_REST_PASSWORD "$OPENPROVIDER_REST_PASSWORD" }
_openprovider_rest() { httpmethod=$1 queryparameters=$2 requestbody=$3
_openprovider_rest_login if [ -z "$openproviderauthtoken" ]; then _err "Unable to fetch authentication token from Openprovider API." return 1 fi
export _H1="Content-Type: application/json" export _H2="Accept: application/json" export _H3="Authorization: Bearer $openproviderauthtoken"
_debug httpmethod "$httpmethod" _debug requestfullurl "$OPENPROVIDER_API_URL/$queryparameters" _debug queryparameters "$queryparameters"
if [ "$httpmethod" != "GET" ]; then _debug requestbody "$requestbody"
response="$(_post "$requestbody" "$OPENPROVIDER_API_URL/$queryparameters" "" "$httpmethod")" else response="$(_get "$OPENPROVIDER_API_URL/$queryparameters")" fi
if [ "$?" != "0" ]; then _err "No valid parameters supplied for Openprovider API: Error $queryparameters" return 1 fi
_debug2 response "$response"
return 0 }
_openprovider_rest_login() { export _H1="Content-Type: application/json" export _H2="Accept: application/json"
loginrequesturl="$OPENPROVIDER_API_URL/auth/login" loginrequestbody="{\"ip\":\"0.0.0.0\",\"password\":\"$OPENPROVIDER_REST_PASSWORD\",\"username\":\"$OPENPROVIDER_REST_USERNAME\"}" loginresponse="$(_post "$loginrequestbody" "$loginrequesturl" "" "POST")"
openproviderauthtoken="$(printf "%s\n" "$loginresponse" | _egrep_o '"token" *: *"[^"]*' | _head_n 1 | sed 's#^"token" *: *"##')" _debug openproviderauthtoken "$openproviderauthtoken"
export openproviderauthtoken }
#################### Private functions ##################################
# Usage: _get_dns_zone _acme-challenge.www.domain.com # Returns: # _domain_id=123456789 # _domain_name=domain.com # _sub_domain=_acme-challenge.www _get_dns_zone() { domain=$1 i=1 p=1
while true; do h=$(printf "%s" "$domain" | cut -d . -f "$i"-100) if [ -z "$h" ]; then # Empty value not allowed return 1 fi
if ! _openprovider_rest GET "dns/zones/$h" ""; then return 1 fi
if _contains "$response" "\"name\":\"$h\""; then _domain_id="$(printf "%s\n" "$response" | _egrep_o '"id" *: *[^,]*' | _head_n 1 | sed 's#^"id" *: *##')" _debug _domain_id "$_domain_id"
_domain_name="$h" _debug _domain_name "$_domain_name"
_sub_domain=$(printf "%s" "$domain" | cut -d . -f 1-"$p") _debug _sub_domain "$_sub_domain" return 0 fi
p=$i i=$(_math "$i" + 1) done
return 1 }
|