Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
ruanhaishen
Acme.Sh
Commits
f6172d72
Unverified
Commit
f6172d72
authored
Feb 22, 2020
by
neil
Committed by
GitHub
Feb 22, 2020
Browse files
Merge pull request #2690 from nstepa/dns_yandex
Fix dns records removing after usage.
parents
80ca6de5
4eff3b6a
Changes
1
Show whitespace changes
Inline
Side-by-side
dnsapi/dns_yandex.sh
View file @
f6172d72
...
@@ -6,6 +6,9 @@
...
@@ -6,6 +6,9 @@
# Values to export:
# Values to export:
# export PDD_Token="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
# export PDD_Token="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
# Sometimes cloudflare / google doesn't pick new dns records fast enough.
# You can add --dnssleep XX to params as workaround.
######## Public functions #####################
######## Public functions #####################
#Usage: dns_myapi_add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
#Usage: dns_myapi_add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
...
@@ -13,97 +16,106 @@ dns_yandex_add() {
...
@@ -13,97 +16,106 @@ dns_yandex_add() {
fulldomain
=
"
${
1
}
"
fulldomain
=
"
${
1
}
"
txtvalue
=
"
${
2
}
"
txtvalue
=
"
${
2
}
"
_debug
"Calling: dns_yandex_add() '
${
fulldomain
}
' '
${
txtvalue
}
'"
_debug
"Calling: dns_yandex_add() '
${
fulldomain
}
' '
${
txtvalue
}
'"
_PDD_credentials
||
return
1
_PDD_credentials
||
return
1
export
_H1
=
"PddToken:
$PDD_Token
"
_PDD_get_domain
"
$fulldomain
"
||
return
1
_PDD_get_domain
||
return
1
_debug
"Found suitable domain in pdd:
$curDomain
"
_debug
"Found suitable domain:
$domain
"
curData
=
"domain=
${
curDomain
}
&type=TXT&subdomain=
${
curSubdomain
}
&ttl=360&content=
${
txtvalue
}
"
curUri
=
"https://pddimp.yandex.ru/api2/admin/dns/add"
_PDD_get_record_ids
||
return
1
curResult
=
"
$(
_post
"
${
curData
}
"
"
${
curUri
}
"
)
"
_debug
"Record_ids:
$record_ids
"
_debug
"Result:
$curResult
"
if
[
!
-z
"
$record_ids
"
]
;
then
_info
"All existing
$subdomain
records from
$domain
will be removed at the very end."
fi
data
=
"domain=
${
domain
}
&type=TXT&subdomain=
${
subdomain
}
&ttl=300&content=
${
txtvalue
}
"
uri
=
"https://pddimp.yandex.ru/api2/admin/dns/add"
result
=
"
$(
_post
"
${
data
}
"
"
${
uri
}
"
| _normalizeJson
)
"
_debug
"Result:
$result
"
if
!
_contains
"
$result
"
'"success":"ok"'
;
then
if
_contains
"
$result
"
'"success":"error"'
&&
_contains
"
$result
"
'"error":"record_exists"'
;
then
_info
"Record already exists."
else
_err
"Can't add
$subdomain
to
$domain
."
return
1
fi
fi
}
}
#Usage: dns_myapi_rm _acme-challenge.www.domain.com
#Usage: dns_myapi_rm _acme-challenge.www.domain.com
dns_yandex_rm
()
{
dns_yandex_rm
()
{
fulldomain
=
"
${
1
}
"
fulldomain
=
"
${
1
}
"
_debug
"Calling: dns_yandex_rm() '
${
fulldomain
}
'"
_debug
"Calling: dns_yandex_rm() '
${
fulldomain
}
'"
_PDD_credentials
||
return
1
_PDD_credentials
||
return
1
export
_H1
=
"PddToken:
$PDD_Token
"
_PDD_get_domain
"
$fulldomain
"
||
return
1
_PDD_get_domain
"
$fulldomain
"
||
return
1
_debug
"Found suitable domain in pdd:
$curDomain
"
_debug
"Found suitable domain:
$domain
"
_PDD_get_record_ids
"
${
domain
}
"
"
${
subdomain
}
"
||
return
1
_debug
"Record_ids:
$record_ids
"
record_id
=
$(
pdd_get_record_id
"
${
fulldomain
}
"
)
for
record_id
in
$record_ids
;
do
_debug
"Result:
$record_id
"
data
=
"domain=
${
domain
}
&record_id=
${
record_id
}
"
uri
=
"https://pddimp.yandex.ru/api2/admin/dns/del"
result
=
"
$(
_post
"
${
data
}
"
"
${
uri
}
"
| _normalizeJson
)
"
_debug
"Result:
$result
"
for
rec_i
in
$record_id
;
do
if
!
_contains
"
$result
"
'"success":"ok"'
;
then
curUri
=
"https://pddimp.yandex.ru/api2/admin/dns/del"
_info
"Can't remove
$subdomain
from
$domain
."
curData
=
"domain=
${
curDomain
}
&record_id=
${
rec_i
}
"
fi
curResult
=
"
$(
_post
"
${
curData
}
"
"
${
curUri
}
"
)
"
_debug
"Result:
$curResult
"
done
done
}
}
#################### Private functions below ##################################
#################### Private functions below ##################################
_PDD_get_domain
()
{
_PDD_get_domain
()
{
fulldomain
=
"
${
1
}
"
subdomain_start
=
1
__page
=
1
while
true
;
do
__last
=
0
domain_start
=
$(
_math
$subdomain_start
+ 1
)
while
[
$__last
-eq
0
]
;
do
domain
=
$(
echo
"
$fulldomain
"
|
cut
-d
.
-f
"
$domain_start
"
-
)
uri1
=
"https://pddimp.yandex.ru/api2/admin/domain/domains?page=
${
__page
}
&on_page=20"
subdomain
=
$(
echo
"
$fulldomain
"
|
cut
-d
.
-f
-
"
$subdomain_start
"
)
res1
=
"
$(
_get
"
$uri1
"
| _normalizeJson
)
"
_debug2
"res1"
"
$res1
"
_debug
"Checking domain
$domain
"
__found
=
"
$(
echo
"
$res1
"
|
sed
-n
-e
's#.* "found": \([^,]*\),.*#\1#p'
)
"
if
[
-z
"
$domain
"
]
;
then
_debug
"found:
$__found
results on page"
return
1
if
[
"0
$__found
"
-lt
20
]
;
then
_debug
"last page:
$__page
"
__last
=
1
fi
fi
__all_domains
=
"
$__all_domains
$(
echo
"
$res1
"
|
tr
","
"
\n
"
|
grep
'"name"'
|
cut
-d
:
-f2
|
sed
-e
's@"@@g'
)
"
uri
=
"https://pddimp.yandex.ru/api2/admin/dns/list?domain=
$domain
"
result
=
"
$(
_get
"
${
uri
}
"
| _normalizeJson
)
"
__page
=
$(
_math
$__page
+ 1
)
_debug
"Result:
$result
"
done
k
=
2
if
_contains
"
$result
"
'"success":"ok"'
;
then
while
[
$k
-lt
10
]
;
do
__t
=
$(
echo
"
$fulldomain
"
|
cut
-d
.
-f
$k
-100
)
_debug
"finding zone for domain
$__t
"
for
d
in
$__all_domains
;
do
if
[
"
$d
"
=
"
$__t
"
]
;
then
p
=
$(
_math
$k
- 1
)
curSubdomain
=
"
$(
echo
"
$fulldomain
"
|
cut
-d
.
-f
"1-
$p
"
)
"
curDomain
=
"
$__t
"
return
0
return
0
fi
fi
subdomain_start
=
$(
_math
$subdomain_start
+ 1
)
done
done
k
=
$(
_math
$k
+ 1
)
done
_err
"No suitable domain found in your account"
return
1
}
}
_PDD_credentials
()
{
_PDD_credentials
()
{
if
[
-z
"
${
PDD_Token
}
"
]
;
then
if
[
-z
"
${
PDD_Token
}
"
]
;
then
PDD_Token
=
""
PDD_Token
=
""
_err
"You need to export PDD_Token=xxxxxxxxxxxxxxxxx"
_err
"You need to export PDD_Token=xxxxxxxxxxxxxxxxx
.
"
_err
"You can get it at https://pddimp.yandex.ru/api2/admin/get_token"
_err
"You can get it at https://pddimp.yandex.ru/api2/admin/get_token
.
"
return
1
return
1
else
else
_saveaccountconf PDD_Token
"
${
PDD_Token
}
"
_saveaccountconf PDD_Token
"
${
PDD_Token
}
"
fi
fi
export
_H1
=
"PddToken:
$PDD_Token
"
}
}
pdd
_get_record_id
()
{
_PDD
_get_record_id
s
()
{
fulldomain
=
"
${
1
}
"
_debug
"Check existing records for
$subdomain
"
_PDD_get_domain
"
$fulldomain
"
uri
=
"https://pddimp.yandex.ru/api2/admin/dns/list?domain=
${
domain
}
"
_debug
"Found suitable domain in pdd:
$curDomain
"
result
=
"
$(
_get
"
${
uri
}
"
| _normalizeJson
)
"
_debug
"Result:
$result
"
if
!
_contains
"
$result
"
'"success":"ok"'
;
then
return
1
fi
curUri
=
"https://pddimp.yandex.ru/api2/admin/dns/list?domain=
${
curDomain
}
"
record_ids
=
$(
echo
"
$result
"
| _egrep_o
"{[^{]*
\"
subdomain
\"
:
\"
${
subdomain
}
\"
[^}]*}"
|
sed
-n
-e
's#.*"record_id": \([0-9]*\).*#\1#p'
)
curResult
=
"
$(
_get
"
${
curUri
}
"
| _normalizeJson
)
"
_debug
"Result:
$curResult
"
echo
"
$curResult
"
| _egrep_o
"{[^{]*
\"
content
\"
:[^{]*
\"
subdomain
\"
:
\"
${
curSubdomain
}
\"
"
|
sed
-n
-e
's#.* "record_id": \(.*\),[^,]*#\1#p'
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment