Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
Acme.Sh
Commits
3fdbbafc
Unverified
Commit
3fdbbafc
authored
Jan 24, 2018
by
martgras
Committed by
GitHub
Jan 24, 2018
Browse files
fix getroot with multiple dns zones
parent
c82cd90e
Changes
1
Hide whitespace changes
Inline
Side-by-side
dnsapi/dns_azure.sh
View file @
3fdbbafc
#!/usr/bin/env sh
#!/usr/bin/env sh
######## Public functions #####################
######## Public functions #####################
# Usage: add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
# Usage: add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
# Used to add txt record
# Used to add txt record
#
#
# Ref: https://docs.microsoft.com/en-us/rest/api/dns/recordsets/createorupdate
# Ref: https://docs.microsoft.com/en-us/rest/api/dns/recordsets/createorupdate
#
#
dns_azure_add
()
dns_azure_add
()
{
{
fulldomain
=
$1
fulldomain
=
$1
txtvalue
=
$2
txtvalue
=
$2
AZUREDNS_SUBSCRIPTIONID
=
"
${
AZUREDNS_SUBSCRIPTIONID
:-
$(
_readaccountconf_mutable AZUREDNS_SUBSCRIPTIONID
)
}
"
AZUREDNS_SUBSCRIPTIONID
=
"
${
AZUREDNS_SUBSCRIPTIONID
:-
$(
_readaccountconf_mutable AZUREDNS_SUBSCRIPTIONID
)
}
"
AZUREDNS_TENANTID
=
"
${
AZUREDNS_TENANTID
:-
$(
_readaccountconf_mutable AZUREDNS_TENANTID
)
}
"
AZUREDNS_TENANTID
=
"
${
AZUREDNS_TENANTID
:-
$(
_readaccountconf_mutable AZUREDNS_TENANTID
)
}
"
AZUREDNS_APPID
=
"
${
AZUREDNS_APPID
:-
$(
_readaccountconf_mutable AZUREDNS_APPID
)
}
"
AZUREDNS_APPID
=
"
${
AZUREDNS_APPID
:-
$(
_readaccountconf_mutable AZUREDNS_APPID
)
}
"
AZUREDNS_CLIENTSECRET
=
"
${
AZUREDNS_CLIENTSECRET
:-
$(
_readaccountconf_mutable AZUREDNS_CLIENTSECRET
)
}
"
AZUREDNS_CLIENTSECRET
=
"
${
AZUREDNS_CLIENTSECRET
:-
$(
_readaccountconf_mutable AZUREDNS_CLIENTSECRET
)
}
"
if
[
-z
"
$AZUREDNS_SUBSCRIPTIONID
"
]
;
then
if
[
-z
"
$AZUREDNS_SUBSCRIPTIONID
"
]
;
then
AZUREDNS_SUBSCRIPTIONID
=
""
AZUREDNS_SUBSCRIPTIONID
=
""
AZUREDNS_TENANTID
=
""
AZUREDNS_TENANTID
=
""
AZUREDNS_APPID
=
""
AZUREDNS_APPID
=
""
AZUREDNS_CLIENTSECRET
=
""
AZUREDNS_CLIENTSECRET
=
""
_err
"You didn't specify the Azure Subscription ID "
_err
"You didn't specify the Azure Subscription ID "
return
1
return
1
fi
fi
if
[
-z
"
$AZUREDNS_TENANTID
"
]
;
then
if
[
-z
"
$AZUREDNS_TENANTID
"
]
;
then
AZUREDNS_SUBSCRIPTIONID
=
""
AZUREDNS_SUBSCRIPTIONID
=
""
AZUREDNS_TENANTID
=
""
AZUREDNS_TENANTID
=
""
AZUREDNS_APPID
=
""
AZUREDNS_APPID
=
""
AZUREDNS_CLIENTSECRET
=
""
AZUREDNS_CLIENTSECRET
=
""
_err
"You didn't specify then Azure Tenant ID "
_err
"You didn't specify then Azure Tenant ID "
return
1
return
1
fi
fi
if
[
-z
"
$AZUREDNS_APPID
"
]
;
then
if
[
-z
"
$AZUREDNS_APPID
"
]
;
then
AZUREDNS_SUBSCRIPTIONID
=
""
AZUREDNS_SUBSCRIPTIONID
=
""
AZUREDNS_TENANTID
=
""
AZUREDNS_TENANTID
=
""
AZUREDNS_APPID
=
""
AZUREDNS_APPID
=
""
AZUREDNS_CLIENTSECRET
=
""
AZUREDNS_CLIENTSECRET
=
""
_err
"You didn't specify the Azure App ID"
_err
"You didn't specify the Azure App ID"
return
1
return
1
fi
fi
if
[
-z
"
$AZUREDNS_CLIENTSECRET
"
]
;
then
if
[
-z
"
$AZUREDNS_CLIENTSECRET
"
]
;
then
AZUREDNS_SUBSCRIPTIONID
=
""
AZUREDNS_SUBSCRIPTIONID
=
""
AZUREDNS_TENANTID
=
""
AZUREDNS_TENANTID
=
""
AZUREDNS_APPID
=
""
AZUREDNS_APPID
=
""
AZUREDNS_CLIENTSECRET
=
""
AZUREDNS_CLIENTSECRET
=
""
_err
"You didn't specify the Azure Client Secret"
_err
"You didn't specify the Azure Client Secret"
return
1
return
1
fi
fi
#save account details to account conf file.
#save account details to account conf file.
...
@@ -61,15 +60,15 @@ dns_azure_add()
...
@@ -61,15 +60,15 @@ dns_azure_add()
accesstoken
=
$(
_azure_getaccess_token
"
$AZUREDNS_TENANTID
"
"
$AZUREDNS_APPID
"
"
$AZUREDNS_CLIENTSECRET
"
)
accesstoken
=
$(
_azure_getaccess_token
"
$AZUREDNS_TENANTID
"
"
$AZUREDNS_APPID
"
"
$AZUREDNS_CLIENTSECRET
"
)
if
!
_get_root
"
$fulldomain
"
"
$AZUREDNS_SUBSCRIPTIONID
"
"
$accesstoken
"
;
then
if
!
_get_root
"
$fulldomain
"
"
$AZUREDNS_SUBSCRIPTIONID
"
"
$accesstoken
"
;
then
_err
"invalid domain"
_err
"invalid domain"
return
1
return
1
fi
fi
_debug _domain_id
"
$_domain_id
"
_debug _domain_id
"
$_domain_id
"
_debug _sub_domain
"
$_sub_domain
"
_debug _sub_domain
"
$_sub_domain
"
_debug _domain
"
$_domain
"
_debug _domain
"
$_domain
"
acmeRecordURI
=
"https://management.azure.com
$(
printf
'%s'
$_domain_id
|sed
's/\\//g'
)
/TXT/
$_sub_domain
?api-version=2017-09-01"
acmeRecordURI
=
"https://management.azure.com
$(
printf
'%s'
$_domain_id
|sed
's/\\//g'
)
/TXT/
$_sub_domain
?api-version=2017-09-01"
_debug
$acmeRecordURI
_debug
$acmeRecordURI
body
=
"{
\"
properties
\"
: {
\"
TTL
\"
: 3600,
\"
TXTRecords
\"
: [{
\"
value
\"
: [
\"
$txtvalue
\"
]}]}}"
body
=
"{
\"
properties
\"
: {
\"
TTL
\"
: 3600,
\"
TXTRecords
\"
: [{
\"
value
\"
: [
\"
$txtvalue
\"
]}]}}"
...
@@ -82,62 +81,62 @@ dns_azure_add()
...
@@ -82,62 +81,62 @@ dns_azure_add()
#
#
# Ref: https://docs.microsoft.com/en-us/rest/api/dns/recordsets/delete
# Ref: https://docs.microsoft.com/en-us/rest/api/dns/recordsets/delete
#
#
dns_azure_rm
()
dns_azure_rm
()
{
{
fulldomain
=
$1
fulldomain
=
$1
txtvalue
=
$2
txtvalue
=
$2
AZUREDNS_SUBSCRIPTIONID
=
"
${
AZUREDNS_SUBSCRIPTIONID
:-
$(
_readaccountconf_mutable AZUREDNS_SUBSCRIPTIONID
)
}
"
AZUREDNS_SUBSCRIPTIONID
=
"
${
AZUREDNS_SUBSCRIPTIONID
:-
$(
_readaccountconf_mutable AZUREDNS_SUBSCRIPTIONID
)
}
"
AZUREDNS_TENANTID
=
"
${
AZUREDNS_TENANTID
:-
$(
_readaccountconf_mutable AZUREDNS_TENANTID
)
}
"
AZUREDNS_TENANTID
=
"
${
AZUREDNS_TENANTID
:-
$(
_readaccountconf_mutable AZUREDNS_TENANTID
)
}
"
AZUREDNS_APPID
=
"
${
AZUREDNS_APPID
:-
$(
_readaccountconf_mutable AZUREDNS_APPID
)
}
"
AZUREDNS_APPID
=
"
${
AZUREDNS_APPID
:-
$(
_readaccountconf_mutable AZUREDNS_APPID
)
}
"
AZUREDNS_CLIENTSECRET
=
"
${
AZUREDNS_CLIENTSECRET
:-
$(
_readaccountconf_mutable AZUREDNS_CLIENTSECRET
)
}
"
AZUREDNS_CLIENTSECRET
=
"
${
AZUREDNS_CLIENTSECRET
:-
$(
_readaccountconf_mutable AZUREDNS_CLIENTSECRET
)
}
"
if
[
-z
"
$AZUREDNS_SUBSCRIPTIONID
"
]
;
then
if
[
-z
"
$AZUREDNS_SUBSCRIPTIONID
"
]
;
then
AZUREDNS_SUBSCRIPTIONID
=
""
AZUREDNS_SUBSCRIPTIONID
=
""
AZUREDNS_TENANTID
=
""
AZUREDNS_TENANTID
=
""
AZUREDNS_APPID
=
""
AZUREDNS_APPID
=
""
AZUREDNS_CLIENTSECRET
=
""
AZUREDNS_CLIENTSECRET
=
""
_err
"You didn't specify the Azure Subscription ID "
_err
"You didn't specify the Azure Subscription ID "
return
1
return
1
fi
fi
if
[
-z
"
$AZUREDNS_TENANTID
"
]
;
then
if
[
-z
"
$AZUREDNS_TENANTID
"
]
;
then
AZUREDNS_SUBSCRIPTIONID
=
""
AZUREDNS_SUBSCRIPTIONID
=
""
AZUREDNS_TENANTID
=
""
AZUREDNS_TENANTID
=
""
AZUREDNS_APPID
=
""
AZUREDNS_APPID
=
""
AZUREDNS_CLIENTSECRET
=
""
AZUREDNS_CLIENTSECRET
=
""
_err
"You didn't specify the Azure Tenant ID "
_err
"You didn't specify the Azure Tenant ID "
return
1
return
1
fi
fi
if
[
-z
"
$AZUREDNS_APPID
"
]
;
then
if
[
-z
"
$AZUREDNS_APPID
"
]
;
then
AZUREDNS_SUBSCRIPTIONID
=
""
AZUREDNS_SUBSCRIPTIONID
=
""
AZUREDNS_TENANTID
=
""
AZUREDNS_TENANTID
=
""
AZUREDNS_APPID
=
""
AZUREDNS_APPID
=
""
AZUREDNS_CLIENTSECRET
=
""
AZUREDNS_CLIENTSECRET
=
""
_err
"You didn't specify the Azure App ID"
_err
"You didn't specify the Azure App ID"
return
1
return
1
fi
fi
if
[
-z
"
$AZUREDNS_CLIENTSECRET
"
]
;
then
if
[
-z
"
$AZUREDNS_CLIENTSECRET
"
]
;
then
AZUREDNS_SUBSCRIPTIONID
=
""
AZUREDNS_SUBSCRIPTIONID
=
""
AZUREDNS_TENANTID
=
""
AZUREDNS_TENANTID
=
""
AZUREDNS_APPID
=
""
AZUREDNS_APPID
=
""
AZUREDNS_CLIENTSECRET
=
""
AZUREDNS_CLIENTSECRET
=
""
_err
"You didn't specify Azure Client Secret"
_err
"You didn't specify Azure Client Secret"
return
1
return
1
fi
fi
accesstoken
=
$(
_azure_getaccess_token
"
$AZUREDNS_TENANTID
"
"
$AZUREDNS_APPID
"
"
$AZUREDNS_CLIENTSECRET
"
)
accesstoken
=
$(
_azure_getaccess_token
"
$AZUREDNS_TENANTID
"
"
$AZUREDNS_APPID
"
"
$AZUREDNS_CLIENTSECRET
"
)
if
!
_get_root
"
$fulldomain
"
"
$AZUREDNS_SUBSCRIPTIONID
"
"
$accesstoken
"
;
then
if
!
_get_root
"
$fulldomain
"
"
$AZUREDNS_SUBSCRIPTIONID
"
"
$accesstoken
"
;
then
_err
"invalid domain"
_err
"invalid domain"
return
1
return
1
fi
fi
_debug _domain_id
"
$_domain_id
"
_debug _domain_id
"
$_domain_id
"
_debug _sub_domain
"
$_sub_domain
"
_debug _sub_domain
"
$_sub_domain
"
_debug _domain
"
$_domain
"
_debug _domain
"
$_domain
"
acmeRecordURI
=
"https://management.azure.com
$(
printf
'%s'
$_domain_id
|sed
's/\\//g'
)
/TXT/
$_sub_domain
?api-version=2017-09-01"
acmeRecordURI
=
"https://management.azure.com
$(
printf
'%s'
$_domain_id
|sed
's/\\//g'
)
/TXT/
$_sub_domain
?api-version=2017-09-01"
_debug
$acmeRecordURI
_debug
$acmeRecordURI
body
=
"{
\"
properties
\"
: {
\"
TTL
\"
: 3600,
\"
TXTRecords
\"
: [{
\"
value
\"
: [
\"
$txtvalue
\"
]}]}}"
body
=
"{
\"
properties
\"
: {
\"
TTL
\"
: 3600,
\"
TXTRecords
\"
: [{
\"
value
\"
: [
\"
$txtvalue
\"
]}]}}"
...
@@ -152,7 +151,7 @@ _azure_rest() {
...
@@ -152,7 +151,7 @@ _azure_rest() {
ep
=
"
$2
"
ep
=
"
$2
"
data
=
"
$3
"
data
=
"
$3
"
accesstoken
=
"
$4
"
accesstoken
=
"
$4
"
_debug
"
$ep
"
_debug
"
$ep
"
export
_H1
=
"authorization: Bearer
$accesstoken
"
export
_H1
=
"authorization: Bearer
$accesstoken
"
...
@@ -181,16 +180,16 @@ _azure_getaccess_token() {
...
@@ -181,16 +180,16 @@ _azure_getaccess_token() {
TENANTID
=
$1
TENANTID
=
$1
clientID
=
$2
clientID
=
$2
clientSecret
=
$3
clientSecret
=
$3
export
_H1
=
"accept: application/json"
export
_H1
=
"accept: application/json"
export
_H2
=
"Content-Type: application/x-www-form-urlencoded"
export
_H2
=
"Content-Type: application/x-www-form-urlencoded"
export
_H3
=
""
export
_H3
=
""
body
=
"resource=
$(
printf
"%s"
'https://management.core.windows.net/'
| _url_encode
)
&client_id=
$(
printf
"%s"
$clientID
| _url_encode
)
&client_secret=
$(
printf
"%s"
$clientSecret
| _url_encode
)
&grant_type=client_credentials"
body
=
"resource=
$(
printf
"%s"
'https://management.core.windows.net/'
| _url_encode
)
&client_id=
$(
printf
"%s"
$clientID
| _url_encode
)
&client_secret=
$(
printf
"%s"
$clientSecret
| _url_encode
)
&grant_type=client_credentials"
_debug data
"
$body
"
_debug data
"
$body
"
response
=
"
$(
_post
"
$body
"
"https://login.windows.net/
$TENANTID
/oauth2/token"
""
"POST"
)
"
response
=
"
$(
_post
"
$body
"
"https://login.windows.net/
$TENANTID
/oauth2/token"
""
"POST"
)
"
accesstoken
=
$(
printf
"%s
\n
"
"
$response
"
| _egrep_o
"
\"
access_token
\"
:
\"
[^
\"
]*
\"
"
|
head
-n
1 |
cut
-d
:
-f
2 |
tr
-d
\"
)
accesstoken
=
$(
printf
"%s
\n
"
"
$response
"
| _egrep_o
"
\"
access_token
\"
:
\"
[^
\"
]*
\"
"
|
head
-n
1 |
cut
-d
:
-f
2 |
tr
-d
\"
)
if
[
"
$?
"
!=
"0"
]
;
then
if
[
"
$?
"
!=
"0"
]
;
then
_err
"error
$response
"
_err
"error
$response
"
return
1
return
1
...
@@ -208,11 +207,11 @@ _get_root() {
...
@@ -208,11 +207,11 @@ _get_root() {
p
=
1
p
=
1
## Ref: https://docs.microsoft.com/en-us/rest/api/dns/zones/list
## Ref: https://docs.microsoft.com/en-us/rest/api/dns/zones/list
## returns up to 100 zones in one response therefore handling more results is not not implemented
## returns up to 100 zones in one response therefore handling more results is not not implemented
## (ZoneListResult with continuation token for the next page of results)
## (ZoneListResult with continuation token for the next page of results)
## Per https://docs.microsoft.com/en-us/azure/azure-subscription-service-limits#dns-limits you are limited to 100 Zone/subscriptions anyways
## Per https://docs.microsoft.com/en-us/azure/azure-subscription-service-limits#dns-limits you are limited to 100 Zone/subscriptions anyways
##
##
_azure_rest GET
"https://management.azure.com/subscriptions/
$subscriptionId
/providers/Microsoft.Network/dnszones?api-version=2017-09-01"
""
$accesstoken
_azure_rest GET
"https://management.azure.com/subscriptions/
$subscriptionId
/providers/Microsoft.Network/dnszones?api-version=2017-09-01"
""
$accesstoken
# Find matching domain name is Json response
# Find matching domain name is Json response
while
true
;
do
while
true
;
do
...
@@ -225,7 +224,7 @@ _get_root() {
...
@@ -225,7 +224,7 @@ _get_root() {
fi
fi
if
_contains
"
$response
"
"
\"
name
\"
:
\"
$h
\"
"
>
/dev/null
;
then
if
_contains
"
$response
"
"
\"
name
\"
:
\"
$h
\"
"
>
/dev/null
;
then
_domain_id
=
$(
printf
"%s
\n
"
"
$response
"
| _egrep_o
"
\
[
.
\"
id
\"
:
\"
[^
\"
]*
\"
"
|
head
-n
1 |
cut
-d
:
-f
2 |
tr
-d
\"
)
_domain_id
=
$(
printf
"%s
\n
"
"
$response
"
| _egrep_o
"
\
{
\"
id
\"
:
\"
[^
\"
]*
$h
\"
"
|
head
-n
1 |
cut
-d
:
-f
2 |
tr
-d
\"
)
if
[
"
$_domain_id
"
]
;
then
if
[
"
$_domain_id
"
]
;
then
_sub_domain
=
$(
printf
"%s"
"
$domain
"
|
cut
-d
.
-f
1-
$p
)
_sub_domain
=
$(
printf
"%s"
"
$domain
"
|
cut
-d
.
-f
1-
$p
)
_domain
=
$h
_domain
=
$h
...
@@ -238,4 +237,3 @@ _get_root() {
...
@@ -238,4 +237,3 @@ _get_root() {
done
done
return
1
return
1
}
}
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