3 #Original Author: Philipp Grosswiler <philipp.grosswiler@swiss-design.net>
4 #v4 Update Author: Aaron W. Swenson <aaron@grandmasfridge.org>
6 LINODE_V4_API_URL
="https://api.linode.com/v4/domains"
8 ######## Public functions #####################
10 #Usage: dns_linode_add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
15 if ! _Linode_API
; then
20 _debug
"Calling: dns_linode_add() '${fulldomain}' '${txtvalue}'"
22 _debug
"First detect the root zone"
23 if ! _get_root
"$fulldomain"; then
24 _err
"Domain does not exist."
27 _debug _domain_id
"$_domain_id"
28 _debug _sub_domain
"$_sub_domain"
29 _debug _domain
"$_domain"
33 \"name\": \"$_sub_domain\",
34 \"target\": \"$txtvalue\",
38 if _rest POST
"/$_domain_id/records" "$_payload" && [ -n "$response" ]; then
39 _resource_id
=$
(printf "%s\n" "$response" | _egrep_o
"\"id\":\s*[0-9]+" | cut
-d : -f 2 |
tr -d " " | _head_n
1)
40 _debug _resource_id
"$_resource_id"
42 if [ -z "$_resource_id" ]; then
43 _err
"Error adding the domain resource."
47 _info
"Domain resource successfully added."
54 #Usage: dns_linode_rm _acme-challenge.www.domain.com
58 if ! _Linode_API
; then
63 _debug
"Calling: dns_linode_rm() '${fulldomain}'"
65 _debug
"First detect the root zone"
66 if ! _get_root
"$fulldomain"; then
67 _err
"Domain does not exist."
70 _debug _domain_id
"$_domain_id"
71 _debug _sub_domain
"$_sub_domain"
72 _debug _domain
"$_domain"
74 if _rest GET
"/$_domain_id/records" && [ -n "$response" ]; then
75 response
="$(echo "$response" | tr -d "\n" | tr '{' "|
" | sed 's/|/&{/g' | tr "|
" "\n")"
77 resource
="$(echo "$response" | _egrep_o "{.
*\"name
\":\s
*\"$_sub_domain\".
*}")"
78 if [ "$resource" ]; then
79 _resource_id
=$
(printf "%s\n" "$resource" | _egrep_o
"\"id\":\s*[0-9]+" | _head_n
1 | cut
-d : -f 2 |
tr -d \
)
80 if [ "$_resource_id" ]; then
81 _debug _resource_id
"$_resource_id"
83 if _rest DELETE
"/$_domain_id/records/$_resource_id" && [ -n "$response" ]; then
84 # On 200/OK, empty set is returned. Check for error, if any.
85 _error_response
=$
(printf "%s\n" "$response" | _egrep_o
"\"errors\"" | cut
-d : -f 2 |
tr -d " " | _head_n
1)
87 if [ -n "$_error_response" ]; then
88 _err
"Error deleting the domain resource: $_error_response"
92 _info
"Domain resource successfully deleted."
106 #################### Private functions below ##################################
109 if [ -z "$LINODE_V4_API_KEY" ]; then
112 _err
"You didn't specify the Linode v4 API key yet."
113 _err
"Please create your key and try again."
118 _saveaccountconf LINODE_V4_API_KEY
"$LINODE_V4_API_KEY"
121 #################### Private functions below ##################################
122 #_acme-challenge.www.domain.com
124 # _sub_domain=_acme-challenge.www
133 response
="$(echo "$response" | tr -d "\n" | tr '{' "|
" | sed 's/|/&{/g' | tr "|
" "\n")"
135 h
=$
(printf "%s" "$domain" | cut
-d .
-f $i-100)
142 hostedzone
="$(echo "$response" | _egrep_o "{.
*\"domain
\":\s
*\"$h\".
*}")"
143 if [ "$hostedzone" ]; then
144 _domain_id
=$
(printf "%s\n" "$hostedzone" | _egrep_o
"\"id\":\s*[0-9]+" | _head_n
1 | cut
-d : -f 2 |
tr -d \
)
145 if [ "$_domain_id" ]; then
146 _sub_domain
=$
(printf "%s" "$domain" | cut
-d .
-f 1-$p)
159 #method method action data
168 export _H1
="Accept: application/json"
169 export _H2
="Content-Type: application/json"
170 export _H3
="Authorization: Bearer $LINODE_V4_API_KEY"
172 if [ "$mtd" != "GET" ]; then
173 # both POST and DELETE.
175 response
="$(_post "$data" "$LINODE_V4_API_URL$ep" "" "$mtd")"
177 response
="$(_get "$LINODE_V4_API_URL$ep$data")"
180 if [ "$?" != "0" ]; then
184 _debug2 response
"$response"