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
Hide 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:
$curD
omain
"
_debug
"Found suitable domain
:
$d
omain
"
record_id
=
$(
pdd
_get_record_id
"
${
fulldomain
}
"
)
_PDD
_get_record_id
s
"
${
domain
}
"
"
${
subdomain
}
"
||
return
1
_debug
"Re
sult
:
$record_id
"
_debug
"Re
cord_ids
:
$record_id
s
"
for
rec_i
in
$record_id
;
do
for
record_id
in
$record_ids
;
do
curUri
=
"https://pddimp.yandex.ru/api2/admin/dns/del"
data
=
"domain=
${
domain
}
&record_id=
${
record_id
}
"
curData
=
"domain=
${
curDomain
}
&record_id=
${
rec_i
}
"
uri
=
"https://pddimp.yandex.ru/api2/admin/dns/del"
curResult
=
"
$(
_post
"
${
curData
}
"
"
${
curUri
}
"
)
"
result
=
"
$(
_post
"
${
data
}
"
"
${
uri
}
"
| _normalizeJson
)
"
_debug
"Result:
$curResult
"
_debug
"Result:
$result
"
if
!
_contains
"
$result
"
'"success":"ok"'
;
then
_info
"Can't remove
$subdomain
from
$domain
."
fi
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
)
"
_debug
"Result:
$result
"
__page
=
$(
_math
$__page
+ 1
)
if
_contains
"
$result
"
'"success":"ok"'
;
then
done
return
0
fi
k
=
2
subdomain_start
=
$(
_math
$subdomain_start
+ 1
)
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
fi
done
k
=
$(
_math
$k
+ 1
)
done
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_ids
()
{
fulldomain
=
"
${
1
}
"
_debug
"Check existing records for
$subdomain
"
uri
=
"https://pddimp.yandex.ru/api2/admin/dns/list?domain=
${
domain
}
"
result
=
"
$(
_get
"
${
uri
}
"
| _normalizeJson
)
"
_debug
"Result:
$result
"
_PDD_get_domain
"
$fulldomain
"
if
!
_contains
"
$result
"
'"success":"ok"'
;
then
_debug
"Found suitable domain in pdd:
$curDomain
"
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