3 Ali_API
="https://alidns.aliyuncs.com/"
5 #Ali_Key="LTqIA87hOKdjevsf5"
6 #Ali_Secret="0p5EYueFNq501xnCPzKNbx6K51qPH2"
8 #Usage: dns_ali_add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
13 if [ -z "$Ali_Key" ] ||
[ -z "$Ali_Secret" ]; then
16 _err
"You don't specify aliyun api key and secret yet."
20 #save the api key and secret to the account conf file.
21 _saveaccountconf Ali_Key
"$Ali_Key"
22 _saveaccountconf Ali_Secret
"$Ali_Secret"
24 _debug
"First detect the root zone"
25 if ! _get_root
"$fulldomain"; then
30 _add_record_query
"$_domain" "$_sub_domain" "$txtvalue" && _ali_rest
"Add record"
38 #################### Private functions bellow ##################################
45 h
=$
(printf "%s" "$domain" | cut
-d .
-f $i-100)
51 _describe_records_query
"$h"
52 if ! _ali_rest
"Get root" "ignore"; then
56 if _contains
"$response" "PageNumber"; then
57 _sub_domain
=$
(printf "%s" "$domain" | cut
-d .
-f 1-$p)
58 _debug _sub_domain
"$_sub_domain"
60 _debug _domain
"$_domain"
70 signature
=$
(printf "%s" "GET&%2F&$(_ali_urlencode "$query")" | _hmac
"sha1" "$(_hex "$Ali_Secret&")" | _base64
)
71 signature
=$
(_ali_urlencode
"$signature")
72 url
="$Ali_API?$query&Signature=$signature"
74 if ! response
="$(_get "$url")"; then
80 message
="$(printf "%s
" "$response" | _egrep_o "\"Message
\":\"[^
\"]*\"" | cut -d : -f 2 | tr -d \")"
81 if [ -n "$message" ]; then
87 _debug2 response
"$response"
95 while [ "$_u_i" -le "$_str_len" ]; do
96 _str_c
="$(printf "%s
" "$_str" | cut -c "$_u_i")"
97 case $_str_c in [a-zA-Z0-9.~_-
])
101 printf "%%%02X" "'$_str_c"
104 _u_i
="$(_math "$_u_i" + 1)"
109 #_head_n 1 </dev/urandom | _digest "sha256" hex | cut -c 1-31
114 _check_exist_query
() {
116 query
=$query'AccessKeyId='$Ali_Key
117 query
=$query'&Action=DescribeDomainRecords'
118 query
=$query'&DomainName='$1
119 query
=$query'&Format=json'
120 query
=$query'&RRKeyWord=_acme-challenge'
121 query
=$query'&SignatureMethod=HMAC-SHA1'
122 query
=$query"&SignatureNonce=$(_ali_nonce)"
123 query
=$query'&SignatureVersion=1.0'
124 query
=$query'&Timestamp='$
(_timestamp
)
125 query
=$query'&TypeKeyWord=TXT'
126 query
=$query'&Version=2015-01-09'
129 _add_record_query
() {
131 query
=$query'AccessKeyId='$Ali_Key
132 query
=$query'&Action=AddDomainRecord'
133 query
=$query'&DomainName='$1
134 query
=$query'&Format=json'
136 query
=$query'&SignatureMethod=HMAC-SHA1'
137 query
=$query"&SignatureNonce=$(_ali_nonce)"
138 query
=$query'&SignatureVersion=1.0'
139 query
=$query'&Timestamp='$
(_timestamp
)
140 query
=$query'&Type=TXT'
141 query
=$query'&Value='$3
142 query
=$query'&Version=2015-01-09'
145 _delete_record_query
() {
147 query
=$query'AccessKeyId='$Ali_Key
148 query
=$query'&Action=DeleteDomainRecord'
149 query
=$query'&Format=json'
150 query
=$query'&RecordId='$1
151 query
=$query'&SignatureMethod=HMAC-SHA1'
152 query
=$query"&SignatureNonce=$(_ali_nonce)"
153 query
=$query'&SignatureVersion=1.0'
154 query
=$query'&Timestamp='$
(_timestamp
)
155 query
=$query'&Version=2015-01-09'
158 _describe_records_query
() {
160 query
=$query'AccessKeyId='$Ali_Key
161 query
=$query'&Action=DescribeDomainRecords'
162 query
=$query'&DomainName='$1
163 query
=$query'&Format=json'
164 query
=$query'&SignatureMethod=HMAC-SHA1'
165 query
=$query"&SignatureNonce=$(_ali_nonce)"
166 query
=$query'&SignatureVersion=1.0'
167 query
=$query'&Timestamp='$
(_timestamp
)
168 query
=$query'&Version=2015-01-09'
172 _check_exist_query
"$_domain"
173 if ! _ali_rest
"Check exist records" "ignore"; then
177 records
="$(echo "$response" -n | _egrep_o "\"RecordId
\":\"[^
\"]*\"" | cut -d : -f 2 | tr -d \")"
178 printf "%s" "$records" \
179 |
while read -r record_id
; do
180 _delete_record_query
"$record_id"
181 _ali_rest
"Delete record $record_id" "ignore"
186 date -u +"%Y-%m-%dT%H%%3A%M%%3A%SZ"