2 # Author: non7top@gmail.com
4 # report bugs at https://github.com/non7top/acme.sh
7 # export PDD_Token="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
9 # Sometimes cloudflare / google doesn't pick new dns records fast enough.
10 # You can add --dnssleep XX to params as workaround.
12 ######## Public functions #####################
14 #Usage: dns_myapi_add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
18 _debug
"Calling: dns_yandex_add() '${fulldomain}' '${txtvalue}'"
20 _PDD_credentials ||
return 1
22 _PDD_get_domain ||
return 1
23 _debug
"Found suitable domain: $domain"
25 _PDD_get_record_ids ||
return 1
26 _debug
"Record_ids: $record_ids"
28 if [ ! -z "$record_ids" ]; then
29 _info
"All existing $subdomain records from $domain will be removed at the very end."
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"
37 if ! _contains
"$result" '"success":"ok"'; then
38 if _contains
"$result" '"success":"error"' && _contains
"$result" '"error":"record_exists"'; then
39 _info
"Record already exists."
41 _err
"Can't add $subdomain to $domain."
47 #Usage: dns_myapi_rm _acme-challenge.www.domain.com
50 _debug
"Calling: dns_yandex_rm() '${fulldomain}'"
52 _PDD_credentials ||
return 1
54 _PDD_get_domain
"$fulldomain" ||
return 1
55 _debug
"Found suitable domain: $domain"
57 _PDD_get_record_ids
"${domain}" "${subdomain}" ||
return 1
58 _debug
"Record_ids: $record_ids"
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"
66 if ! _contains
"$result" '"success":"ok"'; then
67 _info
"Can't remove $subdomain from $domain."
72 #################### Private functions below ##################################
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")
81 _debug
"Checking domain $domain"
82 if [ -z "$domain" ]; then
86 uri
="https://pddimp.yandex.ru/api2/admin/dns/list?domain=$domain"
87 result
="$(_get "${uri}" | _normalizeJson)"
88 _debug
"Result: $result"
90 if _contains
"$result" '"success":"ok"'; then
93 subdomain_start
=$
(_math
$subdomain_start + 1)
98 if [ -z "${PDD_Token}" ]; then
100 _err
"You need to export PDD_Token=xxxxxxxxxxxxxxxxx."
101 _err
"You can get it at https://pddimp.yandex.ru/api2/admin/get_token."
104 _saveaccountconf PDD_Token
"${PDD_Token}"
106 export _H1
="PddToken: $PDD_Token"
109 _PDD_get_record_ids
() {
110 _debug
"Check existing records for $subdomain"
112 uri
="https://pddimp.yandex.ru/api2/admin/dns/list?domain=${domain}"
113 result
="$(_get "${uri}" | _normalizeJson)"
114 _debug
"Result: $result"
116 if ! _contains
"$result" '"success":"ok"'; then
120 record_ids
=$
(echo "$result" | _egrep_o
"{[^{]*\"subdomain\":\"${subdomain}\"[^}]*}" |
sed -n -e 's#.*"record_id": \([0-9]*\).*#\1#p')