3 #Created by Roman Lumetsberger, to use ipv64.net's API to add/remove text records
6 # Pass credentials before "acme.sh --issue --dns dns_ipv64 ..."
8 # export IPv64_Token="aaaaaaaaaaaaaaaaaaaaaaaaaa"
12 IPv64_API
="https://ipv64.net/api"
14 ######## Public functions ######################
16 #Usage: dns_ipv64_add _acme-challenge.domain.ipv64.net "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
21 IPv64_Token
="${IPv64_Token:-$(_readaccountconf_mutable IPv64_Token)}"
22 if [ -z "$IPv64_Token" ]; then
23 _err
"You must export variable: IPv64_Token"
24 _err
"The API Key for your IPv64 account is necessary."
25 _err
"You can look it up in your IPv64 account."
29 # Now save the credentials.
30 _saveaccountconf_mutable IPv64_Token
"$IPv64_Token"
32 if ! _get_root
"$fulldomain"; then
33 _err
"invalid domain" "$fulldomain"
36 _debug _sub_domain
"$_sub_domain"
37 _debug _domain
"$_domain"
39 # convert to lower case
40 _domain
="$(echo "$_domain" | _lower_case)"
41 _sub_domain
="$(echo "$_sub_domain" | _lower_case)"
42 # Now add the TXT record
43 _info
"Trying to add TXT record"
44 if _ipv64_rest
"POST" "add_record=$_domain&praefix=$_sub_domain&type=TXT&content=$txtvalue"; then
45 _info
"TXT record has been successfully added."
48 _err
"Errors happened during adding the TXT record, response=$_response"
54 #Usage: fulldomain txtvalue
55 #Usage: dns_ipv64_rm _acme-challenge.domain.ipv64.net "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
56 #Remove the txt record after validation.
61 IPv64_Token
="${IPv64_Token:-$(_readaccountconf_mutable IPv64_Token)}"
62 if [ -z "$IPv64_Token" ]; then
63 _err
"You must export variable: IPv64_Token"
64 _err
"The API Key for your IPv64 account is necessary."
65 _err
"You can look it up in your IPv64 account."
69 if ! _get_root
"$fulldomain"; then
70 _err
"invalid domain" "$fulldomain"
73 _debug _sub_domain
"$_sub_domain"
74 _debug _domain
"$_domain"
76 # convert to lower case
77 _domain
="$(echo "$_domain" | _lower_case)"
78 _sub_domain
="$(echo "$_sub_domain" | _lower_case)"
79 # Now delete the TXT record
80 _info
"Trying to delete TXT record"
81 if _ipv64_rest
"DELETE" "del_record=$_domain&praefix=$_sub_domain&type=TXT&content=$txtvalue"; then
82 _info
"TXT record has been successfully deleted."
85 _err
"Errors happened during deleting the TXT record, response=$_response"
91 #################### Private functions below ##################################
92 #_acme-challenge.www.domain.com
94 # _sub_domain=_acme-challenge.www
101 _ipv64_get
"get_domains"
102 domain_data
=$_response
105 h
=$
(printf "%s" "$domain" | cut
-d .
-f "$i"-100)
111 #if _contains "$domain_data" "\""$h"\"\:"; then
112 if _contains
"$domain_data" "\"""$h""\"\:"; then
113 _sub_domain
=$
(printf "%s" "$domain" | cut
-d .
-f 1-"$p")
123 #send get request to api
124 # $1 has to set the api-function
127 export _H1
="Authorization: Bearer $IPv64_Token"
129 _response
=$
(_get
"$url")
130 _response
="$(echo "$_response" | _normalizeJson)"
132 if _contains
"$_response" "429 Too Many Requests"; then
133 _info
"API throttled, sleeping to reset the limit"
135 _response
=$
(_get
"$url")
136 _response
="$(echo "$_response" | _normalizeJson)"
142 export _H1
="Authorization: Bearer $IPv64_Token"
143 export _H2
="Content-Type: application/x-www-form-urlencoded"
144 _response
=$
(_post
"$2" "$url" "" "$1")
146 if _contains
"$_response" "429 Too Many Requests"; then
147 _info
"API throttled, sleeping to reset the limit"
149 _response
=$
(_post
"$2" "$url" "" "$1")
152 if ! _contains
"$_response" "\"info\":\"success\""; then
155 _debug2 response
"$_response"