123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- #!/usr/bin/env sh
- # shellcheck disable=SC2034
- dns_rage4_info='rage4.com
- Site: rage4.com
- Docs: github.com/acmesh-official/acme.sh/wiki/dnsapi#dns_rage4
- Options:
- RAGE4_TOKEN API Key
- RAGE4_USERNAME Username
- Issues: github.com/acmesh-official/acme.sh/issues/4306
- '
- RAGE4_Api="https://rage4.com/rapi/"
- ######## Public functions #####################
- #Usage: add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
- dns_rage4_add() {
- fulldomain=$1
- txtvalue=$2
- unquotedtxtvalue=$(echo "$txtvalue" | tr -d \")
- RAGE4_USERNAME="${RAGE4_USERNAME:-$(_readaccountconf_mutable RAGE4_USERNAME)}"
- RAGE4_TOKEN="${RAGE4_TOKEN:-$(_readaccountconf_mutable RAGE4_TOKEN)}"
- if [ -z "$RAGE4_USERNAME" ] || [ -z "$RAGE4_TOKEN" ]; then
- RAGE4_USERNAME=""
- RAGE4_TOKEN=""
- _err "You didn't specify a Rage4 api token and username yet."
- return 1
- fi
- #save the api key and email to the account conf file.
- _saveaccountconf_mutable RAGE4_USERNAME "$RAGE4_USERNAME"
- _saveaccountconf_mutable RAGE4_TOKEN "$RAGE4_TOKEN"
- _debug "First detect the root zone"
- if ! _get_root "$fulldomain"; then
- _err "invalid domain"
- return 1
- fi
- _debug _domain_id "$_domain_id"
- _rage4_rest "createrecord/?id=$_domain_id&name=$fulldomain&content=$unquotedtxtvalue&type=TXT&active=true&ttl=1"
- # Response after adding a TXT record should be something like this:
- # {"status":true,"id":28160443,"error":null}
- if ! _contains "$response" '"error":null' >/dev/null; then
- _err "Error while adding TXT record: '$response'"
- return 1
- fi
- return 0
- }
- #fulldomain txtvalue
- dns_rage4_rm() {
- fulldomain=$1
- txtvalue=$2
- RAGE4_USERNAME="${RAGE4_USERNAME:-$(_readaccountconf_mutable RAGE4_USERNAME)}"
- RAGE4_TOKEN="${RAGE4_TOKEN:-$(_readaccountconf_mutable RAGE4_TOKEN)}"
- _debug "First detect the root zone"
- if ! _get_root "$fulldomain"; then
- _err "invalid domain"
- return 1
- fi
- _debug _domain_id "$_domain_id"
- _debug "Getting txt records"
- _rage4_rest "getrecords/?id=${_domain_id}"
- _record_id=$(echo "$response" | tr '{' '\n' | grep '"TXT"' | grep "\"$txtvalue" | sed -rn 's/.*"id":([[:digit:]]+),.*/\1/p')
- if [ -z "$_record_id" ]; then
- _err "error retrieving the record_id of the new TXT record in order to delete it, got: '$_record_id'."
- return 1
- fi
- _rage4_rest "deleterecord/?id=${_record_id}"
- return 0
- }
- #################### Private functions below ##################################
- #_acme-challenge.www.domain.com
- #returns
- # _domain=domain.com
- # _domain_id=sdjkglgdfewsdfg
- _get_root() {
- domain=$1
- if ! _rage4_rest "getdomains"; then
- return 1
- fi
- _debug _get_root_domain "$domain"
- for line in $(echo "$response" | tr '}' '\n'); do
- __domain=$(echo "$line" | sed -rn 's/.*"name":"([^"]*)",.*/\1/p')
- __domain_id=$(echo "$line" | sed -rn 's/.*"id":([^,]*),.*/\1/p')
- if [ "$domain" != "${domain%"$__domain"*}" ]; then
- _domain_id="$__domain_id"
- break
- fi
- done
- if [ -z "$_domain_id" ]; then
- return 1
- fi
- return 0
- }
- _rage4_rest() {
- ep="$1"
- _debug "$ep"
- username_trimmed=$(echo "$RAGE4_USERNAME" | tr -d '"')
- token_trimmed=$(echo "$RAGE4_TOKEN" | tr -d '"')
- auth=$(printf '%s:%s' "$username_trimmed" "$token_trimmed" | _base64)
- export _H1="Authorization: Basic $auth"
- response="$(_get "$RAGE4_Api$ep")"
- if [ "$?" != "0" ]; then
- _err "error $ep"
- return 1
- fi
- _debug2 response "$response"
- return 0
- }
|