|
|
@ -7,8 +7,8 @@ Docs: https://github.com/acmesh-official/acme.sh/wiki/dnsapi2#dns_yandex360 |
|
|
|
Options: |
|
|
|
YANDEX360_CLIENT_ID OAuth 2.0 ClientID |
|
|
|
YANDEX360_CLIENT_SECRET OAuth 2.0 Client secret |
|
|
|
YANDEX360_ORG_ID Organization ID |
|
|
|
OptionsAlt: |
|
|
|
YANDEX360_ORG_ID Organization ID. Optional. |
|
|
|
YANDEX360_ACCESS_TOKEN OAuth 2.0 Access token. Optional. |
|
|
|
Issues: https://github.com/acmesh-official/acme.sh/issues/5213 |
|
|
|
Author: <Als@admin.ru.net> |
|
|
@ -108,18 +108,6 @@ _check_variables() { |
|
|
|
YANDEX360_ACCESS_TOKEN="${YANDEX360_ACCESS_TOKEN:-$(_readaccountconf_mutable YANDEX360_ACCESS_TOKEN)}" |
|
|
|
YANDEX360_REFRESH_TOKEN="${YANDEX360_REFRESH_TOKEN:-$(_readaccountconf_mutable YANDEX360_REFRESH_TOKEN)}" |
|
|
|
|
|
|
|
if [ -z "$YANDEX360_ORG_ID" ]; then |
|
|
|
_err '=========================================' |
|
|
|
_err ' ERROR' |
|
|
|
_err '=========================================' |
|
|
|
_err "A required environment variable YANDEX360_ORG_ID is not set" |
|
|
|
_err 'For more details, please visit: https://github.com/acmesh-official/acme.sh/wiki/dnsapi2#dns_yandex360' |
|
|
|
_err '=========================================' |
|
|
|
return 1 |
|
|
|
fi |
|
|
|
|
|
|
|
_saveaccountconf_mutable YANDEX360_ORG_ID "$YANDEX360_ORG_ID" |
|
|
|
|
|
|
|
if [ -n "$YANDEX360_ACCESS_TOKEN" ]; then |
|
|
|
_info '=========================================' |
|
|
|
_info ' ATTENTION' |
|
|
@ -145,20 +133,43 @@ _check_variables() { |
|
|
|
return 1 |
|
|
|
|
|
|
|
else |
|
|
|
_saveaccountconf_mutable YANDEX360_CLIENT_ID "$YANDEX360_CLIENT_ID" |
|
|
|
_saveaccountconf_mutable YANDEX360_CLIENT_SECRET "$YANDEX360_CLIENT_SECRET" |
|
|
|
_saveaccountconf_mutable YANDEX360_CLIENT_ID "$YANDEX360_CLIENT_ID" |
|
|
|
_saveaccountconf_mutable YANDEX360_CLIENT_SECRET "$YANDEX360_CLIENT_SECRET" |
|
|
|
|
|
|
|
if [ -n "$YANDEX360_REFRESH_TOKEN" ]; then |
|
|
|
_debug 'Refresh token found. Attempting to refresh access token.' |
|
|
|
if [ -n "$YANDEX360_REFRESH_TOKEN" ]; then |
|
|
|
_debug 'Refresh token found. Attempting to refresh access token.' |
|
|
|
if ! _refresh_token; then |
|
|
|
if ! _get_token; then |
|
|
|
return 1 |
|
|
|
fi |
|
|
|
fi |
|
|
|
else |
|
|
|
if ! _get_token; then |
|
|
|
return 1 |
|
|
|
fi |
|
|
|
fi |
|
|
|
fi |
|
|
|
|
|
|
|
if [ -z "$YANDEX360_ORG_ID" ]; then |
|
|
|
org_response="$(_get "${YANDEX360_API_BASE}/org" '' '')" |
|
|
|
org_response="$(echo "$org_response" | _normalizeJson)" |
|
|
|
|
|
|
|
if _contains "$org_response" '"organizations":'; then |
|
|
|
YANDEX360_ORG_ID=$( |
|
|
|
echo "$org_response" | |
|
|
|
_egrep_o '"id":[[:space:]]*[0-9]+' | |
|
|
|
cut -d: -f2 |
|
|
|
) |
|
|
|
_debug 'Automatically retrieved YANDEX360_ORG_ID' "$YANDEX360_ORG_ID" |
|
|
|
else |
|
|
|
if ! _get_token; then |
|
|
|
return 1 |
|
|
|
fi |
|
|
|
_err '=========================================' |
|
|
|
_err ' ERROR' |
|
|
|
_err '=========================================' |
|
|
|
_err "Failed to retrieve YANDEX360_ORG_ID automatically." |
|
|
|
_err 'For more details, please visit: https://github.com/acmesh-official/acme.sh/wiki/dnsapi2#dns_yandex360' |
|
|
|
_err '=========================================' |
|
|
|
_debug 'Response' "$org_response" |
|
|
|
return 1 |
|
|
|
fi |
|
|
|
fi |
|
|
|
|
|
|
@ -308,28 +319,48 @@ _refresh_token() { |
|
|
|
|
|
|
|
_get_root() { |
|
|
|
domain="$1" |
|
|
|
i=1 |
|
|
|
while true; do |
|
|
|
h=$(echo "$domain" | cut -d . -f "$i"-) |
|
|
|
_debug "Checking domain: $h" |
|
|
|
|
|
|
|
if [ -z "$h" ]; then |
|
|
|
_err "Could not determine root domain" |
|
|
|
return 1 |
|
|
|
for org_id in $YANDEX360_ORG_ID; do |
|
|
|
_debug 'Checking organization ID' "$org_id" |
|
|
|
domains_api_url="${YANDEX360_API_BASE}/org/${org_id}/domains" |
|
|
|
|
|
|
|
domains_response="$(_get "$domains_api_url" '' '')" |
|
|
|
domains_response="$(echo "$domains_response" | _normalizeJson)" |
|
|
|
|
|
|
|
if ! _contains "$domains_response" '"domains":'; then |
|
|
|
_debug 'No domains found for organization' "$org_id" |
|
|
|
_debug 'Response' "$domains_response" |
|
|
|
continue |
|
|
|
fi |
|
|
|
|
|
|
|
dns_api_url="${YANDEX360_API_BASE}/org/${YANDEX360_ORG_ID}/domains/${h}/dns" |
|
|
|
domain_names=$( |
|
|
|
echo "$domains_response" | |
|
|
|
_egrep_o '"name":"[^"]*"' | |
|
|
|
cut -d'"' -f4 |
|
|
|
) |
|
|
|
|
|
|
|
response="$(_get "$dns_api_url" '' '')" |
|
|
|
response="$(echo "$response" | _normalizeJson)" |
|
|
|
_debug 'Response' "$response" |
|
|
|
for d in $domain_names; do |
|
|
|
d="$(_idn "$d")" |
|
|
|
_debug 'Checking domain' "$d" |
|
|
|
|
|
|
|
if _endswith "$domain" "$d"; then |
|
|
|
root_domain="$d" |
|
|
|
break |
|
|
|
fi |
|
|
|
done |
|
|
|
|
|
|
|
if [ -n "$root_domain" ]; then |
|
|
|
_debug "Root domain found: $root_domain in organization $org_id" |
|
|
|
|
|
|
|
YANDEX360_ORG_ID="$org_id" |
|
|
|
_saveaccountconf_mutable YANDEX360_ORG_ID "$YANDEX360_ORG_ID" |
|
|
|
|
|
|
|
if _contains "$response" '"total":'; then |
|
|
|
root_domain="$h" |
|
|
|
_debug 'Root domain found' "$root_domain" |
|
|
|
return 0 |
|
|
|
fi |
|
|
|
|
|
|
|
i=$(_math "$i" + 1) |
|
|
|
done |
|
|
|
|
|
|
|
if [ -z "$root_domain" ]; then |
|
|
|
_err "Could not find a matching root domain for $domain in any organization" |
|
|
|
return 1 |
|
|
|
fi |
|
|
|
} |