]> git.proxmox.com Git - mirror_acme.sh.git/blob - dnsapi/dns_yandex.sh
Merge pull request #3734 from acmesh-official/dev
[mirror_acme.sh.git] / dnsapi / dns_yandex.sh
1 #!/usr/bin/env sh
2 # Author: non7top@gmail.com
3 # 07 Jul 2017
4 # report bugs at https://github.com/non7top/acme.sh
5
6 # Values to export:
7 # export PDD_Token="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
8
9 # Sometimes cloudflare / google doesn't pick new dns records fast enough.
10 # You can add --dnssleep XX to params as workaround.
11
12 ######## Public functions #####################
13
14 #Usage: dns_myapi_add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
15 dns_yandex_add() {
16 fulldomain="${1}"
17 txtvalue="${2}"
18 _debug "Calling: dns_yandex_add() '${fulldomain}' '${txtvalue}'"
19
20 _PDD_credentials || return 1
21
22 _PDD_get_domain || return 1
23 _debug "Found suitable domain: $domain"
24
25 _PDD_get_record_ids || return 1
26 _debug "Record_ids: $record_ids"
27
28 if [ -n "$record_ids" ]; then
29 _info "All existing $subdomain records from $domain will be removed at the very end."
30 fi
31
32 data="domain=${domain}&type=TXT&subdomain=${subdomain}&ttl=300&content=${txtvalue}"
33 uri="https://pddimp.yandex.ru/api2/admin/dns/add"
34 result="$(_post "${data}" "${uri}" | _normalizeJson)"
35 _debug "Result: $result"
36
37 if ! _contains "$result" '"success":"ok"'; then
38 if _contains "$result" '"success":"error"' && _contains "$result" '"error":"record_exists"'; then
39 _info "Record already exists."
40 else
41 _err "Can't add $subdomain to $domain."
42 return 1
43 fi
44 fi
45 }
46
47 #Usage: dns_myapi_rm _acme-challenge.www.domain.com
48 dns_yandex_rm() {
49 fulldomain="${1}"
50 _debug "Calling: dns_yandex_rm() '${fulldomain}'"
51
52 _PDD_credentials || return 1
53
54 _PDD_get_domain "$fulldomain" || return 1
55 _debug "Found suitable domain: $domain"
56
57 _PDD_get_record_ids "${domain}" "${subdomain}" || return 1
58 _debug "Record_ids: $record_ids"
59
60 for record_id in $record_ids; do
61 data="domain=${domain}&record_id=${record_id}"
62 uri="https://pddimp.yandex.ru/api2/admin/dns/del"
63 result="$(_post "${data}" "${uri}" | _normalizeJson)"
64 _debug "Result: $result"
65
66 if ! _contains "$result" '"success":"ok"'; then
67 _info "Can't remove $subdomain from $domain."
68 fi
69 done
70 }
71
72 #################### Private functions below ##################################
73
74 _PDD_get_domain() {
75 subdomain_start=1
76 while true; do
77 domain_start=$(_math $subdomain_start + 1)
78 domain=$(echo "$fulldomain" | cut -d . -f "$domain_start"-)
79 subdomain=$(echo "$fulldomain" | cut -d . -f -"$subdomain_start")
80
81 _debug "Checking domain $domain"
82 if [ -z "$domain" ]; then
83 return 1
84 fi
85
86 uri="https://pddimp.yandex.ru/api2/admin/dns/list?domain=$domain"
87 result="$(_get "${uri}" | _normalizeJson)"
88 _debug "Result: $result"
89
90 if _contains "$result" '"success":"ok"'; then
91 return 0
92 fi
93 subdomain_start=$(_math $subdomain_start + 1)
94 done
95 }
96
97 _PDD_credentials() {
98 if [ -z "${PDD_Token}" ]; then
99 PDD_Token=""
100 _err "You need to export PDD_Token=xxxxxxxxxxxxxxxxx."
101 _err "You can get it at https://pddimp.yandex.ru/api2/admin/get_token."
102 return 1
103 else
104 _saveaccountconf PDD_Token "${PDD_Token}"
105 fi
106 export _H1="PddToken: $PDD_Token"
107 }
108
109 _PDD_get_record_ids() {
110 _debug "Check existing records for $subdomain"
111
112 uri="https://pddimp.yandex.ru/api2/admin/dns/list?domain=${domain}"
113 result="$(_get "${uri}" | _normalizeJson)"
114 _debug "Result: $result"
115
116 if ! _contains "$result" '"success":"ok"'; then
117 return 1
118 fi
119
120 record_ids=$(echo "$result" | _egrep_o "{[^{]*\"subdomain\":\"${subdomain}\"[^}]*}" | sed -n -e 's#.*"record_id": \([0-9]*\).*#\1#p')
121 }