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
a0b5305e
Commit
a0b5305e
authored
Sep 11, 2020
by
Ed Lynes
Browse files
Merge branch 'dev' into edgedns
parents
e91538a5
e7a6c172
Changes
8
Hide whitespace changes
Inline
Side-by-side
.github/workflows/DNS.yml
0 → 100644
View file @
a0b5305e
name
:
DNS
on
:
push
:
branches
:
-
'
dev'
paths
:
-
'
dnsapi/*.sh'
-
'
.github/workflows/DNS.yml'
pull_request
:
branches
:
-
'
dev'
paths
:
-
'
dnsapi/*.sh'
-
'
.github/workflows/DNS.yml'
jobs
:
CheckToken
:
runs-on
:
ubuntu-latest
outputs
:
hasToken
:
${{ steps.step_one.outputs.hasToken }}
env
:
_ACME_CHECK_TOKEN_${{ secrets.TokenName1 }}
:
${{ secrets.TokenValue1 }}
steps
:
-
name
:
Set the value
id
:
step_one
run
:
|
if [ "$_ACME_CHECK_TOKEN_${{ secrets.TokenName1}}" ] ; then
echo "::set-output name=hasToken::true"
else
echo "::set-output name=hasToken::false"
fi
-
name
:
Check the value
run
:
echo ${{ steps.step_one.outputs.hasToken }}
Fail
:
runs-on
:
ubuntu-latest
needs
:
CheckToken
if
:
"
contains(needs.CheckToken.outputs.hasToken,
'false')"
steps
:
-
name
:
"
Read
this:
https://github.com/acmesh-official/acme.sh/wiki/DNS-API-Test"
run
:
|
echo "Plese see this page to fix the error: https://github.com/acmesh-official/acme.sh/wiki/DNS-API-Test"
-
name
:
Fail
if
:
"
github.actor
!=
'Neilpang'"
run
:
false
Docker
:
runs-on
:
ubuntu-latest
needs
:
CheckToken
if
:
"
contains(needs.CheckToken.outputs.hasToken,
'true')"
env
:
${{ secrets.TokenName1 }}
:
${{ secrets.TokenValue1 }}
${{ secrets.TokenName2 }}
:
${{ secrets.TokenValue2 }}
TEST_DNS
:
${{ secrets.TEST_DNS }}
TestingDomain
:
${{ secrets.TestingDomain }}
TEST_DNS_NO_WILDCARD
:
${{ secrets.TEST_DNS_NO_WILDCARD }}
TEST_DNS_SLEEP
:
${{ secrets.TEST_DNS_SLEEP }}
CASE
:
le_test_dnsapi
TEST_LOCAL
:
1
DEBUG
:
1
steps
:
-
uses
:
actions/checkout@v2
-
name
:
Clone acmetest
run
:
cd .. && git clone https://github.com/acmesh-official/acmetest.git && cp -r acme.sh acmetest/
-
name
:
Set env file
run
:
cd ../acmetest && echo "${{ secrets.TokenName1 }}" >> env.list && echo "${{ secrets.TokenName2 }}" >> env.list && echo "TEST_DNS_NO_WILDCARD" >> env.list && echo "TEST_DNS_SLEEP" >> env.list
-
name
:
Run acmetest
run
:
cd ../acmetest && ./rundocker.sh _cron
MacOS
:
runs-on
:
macos-latest
needs
:
Docker
env
:
${{ secrets.TokenName1 }}
:
${{ secrets.TokenValue1 }}
${{ secrets.TokenName2 }}
:
${{ secrets.TokenValue2 }}
TEST_DNS
:
${{ secrets.TEST_DNS }}
TestingDomain
:
${{ secrets.TestingDomain }}
TEST_DNS_NO_WILDCARD
:
${{ secrets.TEST_DNS_NO_WILDCARD }}
TEST_DNS_SLEEP
:
${{ secrets.TEST_DNS_SLEEP }}
CASE
:
le_test_dnsapi
TEST_LOCAL
:
1
DEBUG
:
1
steps
:
-
uses
:
actions/checkout@v2
-
name
:
Install tools
run
:
brew update && brew install socat;
-
name
:
Clone acmetest
run
:
cd .. && git clone https://github.com/acmesh-official/acmetest.git && cp -r acme.sh acmetest/
-
name
:
Run acmetest
run
:
cd ../acmetest && ./letest.sh
Windows
:
runs-on
:
windows-latest
needs
:
MacOS
env
:
${{ secrets.TokenName1 }}
:
${{ secrets.TokenValue1 }}
${{ secrets.TokenName2 }}
:
${{ secrets.TokenValue2 }}
TEST_DNS
:
${{ secrets.TEST_DNS }}
TestingDomain
:
${{ secrets.TestingDomain }}
TEST_DNS_NO_WILDCARD
:
${{ secrets.TEST_DNS_NO_WILDCARD }}
TEST_DNS_SLEEP
:
${{ secrets.TEST_DNS_SLEEP }}
CASE
:
le_test_dnsapi
TEST_LOCAL
:
1
DEBUG
:
1
steps
:
-
name
:
Set git to use LF
run
:
|
git config --global core.autocrlf false
-
uses
:
actions/checkout@v2
-
name
:
Install cygwin base packages with chocolatey
run
:
|
choco config get cacheLocation
choco install --no-progress cygwin
shell
:
cmd
-
name
:
Install cygwin additional packages
run
:
|
C:\tools\cygwin\cygwinsetup.exe -qgnNdO -R C:/tools/cygwin -s http://mirrors.kernel.org/sourceware/cygwin/ -P socat,curl,cron,unzip,git
shell
:
cmd
-
name
:
Set ENV
run
:
|
echo '::set-env name=PATH::C:\tools\cygwin\bin;C:\tools\cygwin\usr\bin'
-
name
:
Clone acmetest
run
:
cd .. && git clone https://github.com/acmesh-official/acmetest.git && cp -r acme.sh acmetest/
-
name
:
Run acmetest
shell
:
cmd
run
:
cd ../acmetest && bash.exe -c ./letest.sh
.github/workflows/LetsEncrypt.yml
View file @
a0b5305e
...
@@ -11,6 +11,7 @@ on:
...
@@ -11,6 +11,7 @@ on:
-
dev
-
dev
paths
:
paths
:
-
'
**.sh'
-
'
**.sh'
-
'
**.yml'
jobs
:
jobs
:
...
@@ -72,6 +73,9 @@ jobs:
...
@@ -72,6 +73,9 @@ jobs:
#The 80 port is used by Windows server, we have to use a custom port, ngrok will also use this port.
#The 80 port is used by Windows server, we have to use a custom port, ngrok will also use this port.
Le_HTTPPort
:
8888
Le_HTTPPort
:
8888
steps
:
steps
:
-
name
:
Set git to use LF
run
:
|
git config --global core.autocrlf false
-
uses
:
actions/checkout@v2
-
uses
:
actions/checkout@v2
-
name
:
Install cygwin base packages with chocolatey
-
name
:
Install cygwin base packages with chocolatey
run
:
|
run
:
|
...
@@ -87,7 +91,7 @@ jobs:
...
@@ -87,7 +91,7 @@ jobs:
echo '::set-env name=PATH::C:\tools\cygwin\bin;C:\tools\cygwin\usr\bin'
echo '::set-env name=PATH::C:\tools\cygwin\bin;C:\tools\cygwin\usr\bin'
-
name
:
Clone acmetest
-
name
:
Clone acmetest
shell
:
cmd
shell
:
cmd
run
:
cd .. && git clone https://github.com/acmesh-official/acmetest.git && cp -r acme.sh acmetest/
&& sed -i 's/\r//g' acmetest/acme.sh/acme.sh
run
:
cd .. && git clone https://github.com/acmesh-official/acmetest.git && cp -r acme.sh acmetest/
-
name
:
Run acmetest
-
name
:
Run acmetest
shell
:
cmd
shell
:
cmd
run
:
cd ../acmetest && bash.exe -c ./letest.sh
run
:
cd ../acmetest && bash.exe -c ./letest.sh
...
...
.github/workflows/PebbleStrict.yml
View file @
a0b5305e
...
@@ -5,11 +5,13 @@ on:
...
@@ -5,11 +5,13 @@ on:
-
'
*'
-
'
*'
paths
:
paths
:
-
'
**.sh'
-
'
**.sh'
-
'
**.yml'
pull_request
:
pull_request
:
branches
:
branches
:
-
dev
-
dev
paths
:
paths
:
-
'
**.sh'
-
'
**.sh'
-
'
**.yml'
jobs
:
jobs
:
PebbleStrict
:
PebbleStrict
:
...
...
.github/workflows/dockerhub.yml
View file @
a0b5305e
...
@@ -8,8 +8,28 @@ on:
...
@@ -8,8 +8,28 @@ on:
-
'
*'
-
'
*'
jobs
:
jobs
:
CheckToken
:
runs-on
:
ubuntu-latest
outputs
:
hasToken
:
${{ steps.step_one.outputs.hasToken }}
env
:
DOCKER_PASSWORD
:
${{ secrets.DOCKER_PASSWORD }}
steps
:
-
name
:
Set the value
id
:
step_one
run
:
|
if [ "$DOCKER_PASSWORD" ] ; then
echo "::set-output name=hasToken::true"
else
echo "::set-output name=hasToken::false"
fi
-
name
:
Check the value
run
:
echo ${{ steps.step_one.outputs.hasToken }}
build
:
build
:
runs-on
:
ubuntu-latest
runs-on
:
ubuntu-latest
needs
:
CheckToken
if
:
"
contains(needs.CheckToken.outputs.hasToken,
'true')"
steps
:
steps
:
-
name
:
checkout code
-
name
:
checkout code
uses
:
actions/checkout@v2
uses
:
actions/checkout@v2
...
...
.github/workflows/shellcheck.yml
View file @
a0b5305e
...
@@ -5,14 +5,16 @@ on:
...
@@ -5,14 +5,16 @@ on:
-
'
*'
-
'
*'
paths
:
paths
:
-
'
**.sh'
-
'
**.sh'
-
'
**.yml'
pull_request
:
pull_request
:
branches
:
branches
:
-
dev
-
dev
paths
:
paths
:
-
'
**.sh'
-
'
**.sh'
-
'
**.yml'
jobs
:
jobs
:
format
Check
:
Shell
Check
:
runs-on
:
ubuntu-latest
runs-on
:
ubuntu-latest
steps
:
steps
:
-
uses
:
actions/checkout@v2
-
uses
:
actions/checkout@v2
...
@@ -20,6 +22,11 @@ jobs:
...
@@ -20,6 +22,11 @@ jobs:
run
:
sudo apt-get install -y shellcheck
run
:
sudo apt-get install -y shellcheck
-
name
:
DoShellcheck
-
name
:
DoShellcheck
run
:
shellcheck -V && shellcheck -e SC2181 **/*.sh && echo "shellcheck OK"
run
:
shellcheck -V && shellcheck -e SC2181 **/*.sh && echo "shellcheck OK"
shfmt
:
runs-on
:
ubuntu-latest
steps
:
-
uses
:
actions/checkout@v2
-
name
:
Install shfmt
-
name
:
Install shfmt
run
:
curl -sSL https://github.com/mvdan/sh/releases/download/v3.1.2/shfmt_v3.1.2_linux_amd64 -o ~/shfmt && chmod +x ~/shfmt
run
:
curl -sSL https://github.com/mvdan/sh/releases/download/v3.1.2/shfmt_v3.1.2_linux_amd64 -o ~/shfmt && chmod +x ~/shfmt
-
name
:
shfmt
-
name
:
shfmt
...
...
acme.sh
View file @
a0b5305e
...
@@ -956,9 +956,9 @@ _dbase64() {
...
@@ -956,9 +956,9 @@ _dbase64() {
_checkcert
()
{
_checkcert
()
{
_cf
=
"
$1
"
_cf
=
"
$1
"
if
[
"
$DEBUG
"
]
;
then
if
[
"
$DEBUG
"
]
;
then
openssl x509
-noout
-text
-in
"
$_cf
"
${
ACME_OPENSSL_BIN
:-
openssl
}
x509
-noout
-text
-in
"
$_cf
"
else
else
openssl x509
-noout
-text
-in
"
$_cf
"
>
/dev/null 2>&1
${
ACME_OPENSSL_BIN
:-
openssl
}
x509
-noout
-text
-in
"
$_cf
"
>
/dev/null 2>&1
fi
fi
}
}
...
@@ -3994,7 +3994,7 @@ _check_dns_entries() {
...
@@ -3994,7 +3994,7 @@ _check_dns_entries() {
_get_cert_issuers
()
{
_get_cert_issuers
()
{
_cfile
=
"
$1
"
_cfile
=
"
$1
"
if
_contains
"
$(
${
ACME_OPENSSL_BIN
:-
openssl
}
help
crl2pkcs7 2>&1
)
"
"Usage: crl2pkcs7"
;
then
if
_contains
"
$(
${
ACME_OPENSSL_BIN
:-
openssl
}
help
crl2pkcs7 2>&1
)
"
"Usage: crl2pkcs7"
;
then
${
ACME_OPENSSL_BIN
:-
openssl
}
crl2pkcs7
-nocrl
-certfile
$_cfile
| openssl pkcs7
-print_certs
-text
-noout
|
grep
'Issuer:'
| _egrep_o
"CN *=[^,]*"
|
cut
-d
=
-f
2
${
ACME_OPENSSL_BIN
:-
openssl
}
crl2pkcs7
-nocrl
-certfile
$_cfile
|
${
ACME_OPENSSL_BIN
:-
openssl
}
pkcs7
-print_certs
-text
-noout
|
grep
'Issuer:'
| _egrep_o
"CN *=[^,]*"
|
cut
-d
=
-f
2
else
else
${
ACME_OPENSSL_BIN
:-
openssl
}
x509
-in
$_cfile
-text
-noout
|
grep
'Issuer:'
| _egrep_o
"CN *=[^,]*"
|
cut
-d
=
-f
2
${
ACME_OPENSSL_BIN
:-
openssl
}
x509
-in
$_cfile
-text
-noout
|
grep
'Issuer:'
| _egrep_o
"CN *=[^,]*"
|
cut
-d
=
-f
2
fi
fi
...
@@ -4714,7 +4714,7 @@ $_authorizations_map"
...
@@ -4714,7 +4714,7 @@ $_authorizations_map"
return
1
return
1
fi
fi
if
[
-z
"
$Le_LinkOrder
"
]
;
then
if
[
-z
"
$Le_LinkOrder
"
]
;
then
Le_LinkOrder
=
"
$(
echo
"
$responseHeaders
"
|
grep
-i
'^Location.*$'
| _tail_n 1 |
tr
-d
"
\r\n
"
|
cut
-d
":"
-f
2-
)
"
Le_LinkOrder
=
"
$(
echo
"
$responseHeaders
"
|
grep
-i
'^Location.*$'
| _tail_n 1 |
tr
-d
"
\r\n
\t
"
|
cut
-d
":"
-f
2-
)
"
fi
fi
_savedomainconf
"Le_LinkOrder"
"
$Le_LinkOrder
"
_savedomainconf
"Le_LinkOrder"
"
$Le_LinkOrder
"
...
@@ -4978,7 +4978,7 @@ $_authorizations_map"
...
@@ -4978,7 +4978,7 @@ $_authorizations_map"
fi
fi
}
}
#in_out_cert out_fullchain
out
out_ca
#in_out_cert out_fullchain
out_ca
_split_cert_chain
()
{
_split_cert_chain
()
{
_certf
=
"
$1
"
_certf
=
"
$1
"
_fullchainf
=
"
$2
"
_fullchainf
=
"
$2
"
...
...
dnsapi/dns_dynv6.sh
View file @
a0b5305e
#!/usr/bin/env sh
#!/usr/bin/env sh
#Author StefanAbl
#Author StefanAbl
#Usage specify a private keyfile to use with dynv6 'export KEY="path/to/keyfile"'
#Usage specify a private keyfile to use with dynv6 'export KEY="path/to/keyfile"'
#or use the HTTP REST API by by specifying a token 'export DYNV6_TOKEN="value"
#if no keyfile is specified, you will be asked if you want to create one in /home/$USER/.ssh/dynv6 and /home/$USER/.ssh/dynv6.pub
#if no keyfile is specified, you will be asked if you want to create one in /home/$USER/.ssh/dynv6 and /home/$USER/.ssh/dynv6.pub
dynv6_api
=
"https://dynv6.com/api/v2"
######## Public functions #####################
######## Public functions #####################
# Please Read this guide first: https://github.com/Neilpang/acme.sh/wiki/DNS-API-Dev-Guide
# Please Read this guide first: https://github.com/Neilpang/acme.sh/wiki/DNS-API-Dev-Guide
#Usage: dns_
myapi
_add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
#Usage: dns_
dynv6
_add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
dns_dynv6_add
()
{
dns_dynv6_add
()
{
fulldomain
=
$1
fulldomain
=
$1
txtvalue
=
$2
txtvalue
=
$2
_info
"Using dynv6 api"
_info
"Using dynv6 api"
_debug fulldomain
"
$fulldomain
"
_debug fulldomain
"
$fulldomain
"
_debug txtvalue
"
$txtvalue
"
_debug txtvalue
"
$txtvalue
"
_get_keyfile
_get_authentication
_info
"using keyfile
$dynv6_keyfile
"
if
[
"
$dynv6_token
"
]
;
then
_get_domain
"
$fulldomain
"
_dns_dynv6_add_http
_your_hosts
=
"
$(
ssh
-i
"
$dynv6_keyfile
"
api@dynv6.com hosts
)
"
return
$?
if
!
_contains
"
$_your_hosts
"
"
$_host
"
;
then
_debug
"The host is
$_host
and the record
$_record
"
_debug
"Dynv6 returned
$_your_hosts
"
_err
"The host
$_host
does not exist on your dynv6 account"
return
1
fi
_debug
"found host on your account"
returnval
=
"
$(
ssh
-i
"
$dynv6_keyfile
"
api@dynv6.com hosts
\"
"
$_host
"
\"
records
set
\"
"
$_record
"
\"
txt data
\"
"
$txtvalue
"
\"
)
"
_debug
"Dynv6 returend this after record was added:
$returnval
"
if
_contains
"
$returnval
"
"created"
;
then
return
0
elif
_contains
"
$returnval
"
"updated"
;
then
return
0
else
else
_err
"Something went wrong! it does not seem like the record was added succesfully"
_info
"using key file
$dynv6_keyfile
"
_your_hosts
=
"
$(
ssh
-i
"
$dynv6_keyfile
"
api@dynv6.com hosts
)
"
if
!
_get_domain
"
$fulldomain
"
"
$_your_hosts
"
;
then
_err
"Host not found on your account"
return
1
fi
_debug
"found host on your account"
returnval
=
"
$(
ssh
-i
"
$dynv6_keyfile
"
api@dynv6.com hosts
\"
"
$_host
"
\"
records
set
\"
"
$_record
"
\"
txt data
\"
"
$txtvalue
"
\"
)
"
_debug
"Dynv6 returned this after record was added:
$returnval
"
if
_contains
"
$returnval
"
"created"
;
then
return
0
elif
_contains
"
$returnval
"
"updated"
;
then
return
0
else
_err
"Something went wrong! it does not seem like the record was added successfully"
return
1
fi
return
1
return
1
fi
fi
return
1
return
1
...
@@ -39,28 +45,29 @@ dns_dynv6_add() {
...
@@ -39,28 +45,29 @@ dns_dynv6_add() {
dns_dynv6_rm
()
{
dns_dynv6_rm
()
{
fulldomain
=
$1
fulldomain
=
$1
txtvalue
=
$2
txtvalue
=
$2
_info
"Using dynv6
api
"
_info
"Using dynv6
API
"
_debug fulldomain
"
$fulldomain
"
_debug fulldomain
"
$fulldomain
"
_debug txtvalue
"
$txtvalue
"
_debug txtvalue
"
$txtvalue
"
_get_keyfile
_get_authentication
_info
"using keyfile
$dynv6_keyfile
"
if
[
"
$dynv6_token
"
]
;
then
_get_domain
"
$fulldomain
"
_dns_dynv6_rm_http
_your_hosts
=
"
$(
ssh
-i
"
$dynv6_keyfile
"
api@dynv6.com hosts
)
"
return
$?
if
!
_contains
"
$_your_hosts
"
"
$_host
"
;
then
else
_debug
"The host is
$_host
and the record
$_record
"
_info
"using key file
$dynv6_keyfile
"
_debug
"Dynv6 returned
$_your_hosts
"
_your_hosts
=
"
$(
ssh
-i
"
$dynv6_keyfile
"
api@dynv6.com hosts
)
"
_err
"The host
$_host
does not exist on your dynv6 account"
if
!
_get_domain
"
$fulldomain
"
"
$_your_hosts
"
;
then
return
1
_err
"Host not found on your account"
return
1
fi
_debug
"found host on your account"
_info
"
$(
ssh
-i
"
$dynv6_keyfile
"
api@dynv6.com hosts
"
\"
$_host
\"
"
records del
"
\"
$_record
\"
"
txt
)
"
return
0
fi
fi
_debug
"found host on your account"
_info
"
$(
ssh
-i
"
$dynv6_keyfile
"
api@dynv6.com hosts
"
\"
$_host
\"
"
records del
"
\"
$_record
\"
"
txt
)
"
return
0
}
}
#################### Private functions below ##################################
#################### Private functions below ##################################
#Usage: No Input required
#Usage: No Input required
#returns
#returns
#dynv6_keyfile the path to the new keyfile that has been generated
#dynv6_keyfile the path to the new key
file that has been generated
_generate_new_key
()
{
_generate_new_key
()
{
dynv6_keyfile
=
"
$(
eval echo
~
"
$USER
"
)
/.ssh/dynv6"
dynv6_keyfile
=
"
$(
eval echo
~
"
$USER
"
)
/.ssh/dynv6"
_info
"Path to key file used:
$dynv6_keyfile
"
_info
"Path to key file used:
$dynv6_keyfile
"
...
@@ -72,50 +79,207 @@ _generate_new_key() {
...
@@ -72,50 +79,207 @@ _generate_new_key() {
return
1
return
1
fi
fi
}
}
#Usage: _acme-challenge.www.example.dynv6.net
#Usage: _acme-challenge.www.example.dynv6.net "$_your_hosts"
#where _your_hosts is the output of ssh -i ~/.ssh/dynv6.pub api@dynv6.com hosts
#returns
#returns
#_host= example.dynv6.net
#_host= example.dynv6.net
#_record=_acme-challenge.www
#_record=_acme-challenge.www
#aborts if not a valid domain
#aborts if not a valid domain
_get_domain
()
{
_get_domain
()
{
#_your_hosts="$(ssh -i ~/.ssh/dynv6.pub api@dynv6.com hosts)"
_full_domain
=
"
$1
"
_full_domain
=
"
$1
"
_debug
"getting domain for
$_full_domain
"
_your_hosts
=
"
$2
"
if
!
_contains
"
$_full_domain
"
'dynv6.net'
&&
!
_contains
"
$_full_domain
"
'dns.army'
&&
!
_contains
"
$_full_domain
"
'dns.navy'
&&
!
_contains
"
$_full_domain
"
'v6.rocks'
;
then
_err
"The hosts does not seem to be a dynv6 host"
return
1
fi
_record
=
"
${
_full_domain
%.*
}
"
_record
=
"
${
_record
%.*
}
"
_record
=
"
${
_record
%.*
}
"
_debug
"The record we are ging to use is
$_record
"
_host
=
"
$_full_domain
"
while
[
"
$(
echo
"
$_host
"
|
grep
-o
'\.'
|
wc
-l
)
"
!=
"2"
]
;
do
_host
=
"
${
_host
#*.
}
"
done
_debug
"And the host is
$_host
"
return
0
_your_hosts
=
"
$(
echo
"
$_your_hosts
"
|
awk
'/\./ {print $1}'
)
"
for
l
in
$_your_hosts
;
do
#echo "host: $l"
if
test
"
${
_full_domain
#*
$l
}
"
!=
"
$_full_domain
"
;
then
_record
=
"
${
_full_domain
%.
$l
}
"
_host
=
$l
_debug
"The host is
$_host
and the record
$_record
"
return
0
fi
done
_err
"Either their is no such host on your dnyv6 account or it cannot be accessed with this key"
return
1
}
}
# Usage: No input required
# Usage: No input required
#returns
#returns
#dynv6_keyfile path to the key that will be used
#dynv6_keyfile path to the key that will be used
_get_keyfile
()
{
_get_authentication
()
{
_debug
"get keyfile method called"
dynv6_token
=
"
${
DYNV6_TOKEN
:-
$(
_readaccountconf_mutable dynv6_token
)
}
"
dynv6_keyfile
=
"
${
dynv6_keyfile
:-
$(
_readaccountconf_mutable dynv6_keyfile
)
}
"
if
[
"
$dynv6_token
"
]
;
then
_debug Your key is
"
$dynv6_keyfile
"
_debug
"Found HTTP Token. Going to use the HTTP API and not the SSH API"
if
[
-z
"
$dynv6_keyfile
"
]
;
then
if
[
"
$DYNV6_TOKEN
"
]
;
then
if
[
-z
"
$KEY
"
]
;
then
_saveaccountconf_mutable dynv6_token
"
$dynv6_token
"
_err
"You did not specify a key to use with dynv6"
fi
_info
"Creating new dynv6 api key to add to dynv6.com"
else
_generate_new_key
_debug
"no HTTP token found. Looking for an SSH key"
_info
"Please add this key to dynv6.com
$(
cat
"
$dynv6_keyfile
.pub"
)
"
dynv6_keyfile
=
"
${
dynv6_keyfile
:-
$(
_readaccountconf_mutable dynv6_keyfile
)
}
"
_info
"Hit Enter to contiue"
_debug
"Your key is
$dynv6_keyfile
"
read
-r
_
if
[
-z
"
$dynv6_keyfile
"
]
;
then
#save the credentials to the account conf file.
if
[
-z
"
$KEY
"
]
;
then
else
_err
"You did not specify a key to use with dynv6"
dynv6_keyfile
=
"
$KEY
"
_info
"Creating new dynv6 API key to add to dynv6.com"
_generate_new_key
_info
"Please add this key to dynv6.com
$(
cat
"
$dynv6_keyfile
.pub"
)
"
_info
"Hit Enter to continue"
read
-r
_
#save the credentials to the account conf file.
else
dynv6_keyfile
=
"
$KEY
"
fi
_saveaccountconf_mutable dynv6_keyfile
"
$dynv6_keyfile
"
fi
fi
}
_dns_dynv6_add_http
()
{
_debug
"Got HTTP token form _get_authentication method. Going to use the HTTP API"
if
!
_get_zone_id
"
$fulldomain
"
;
then
_err
"Could not find a matching zone for
$fulldomain
. Maybe your HTTP Token is not authorized to access the zone"
return
1
fi
_get_zone_name
"
$_zone_id
"
record
=
"
${
fulldomain
%%.
$_zone_name
}
"
_set_record TXT
"
$record
"
"
$txtvalue
"
if
_contains
"
$response
"
"
$txtvalue
"
;
then
_info
"Successfully added record"
return
0
else
_err
"Something went wrong while adding the record"
return
1
fi
}
_dns_dynv6_rm_http
()
{
_debug
"Got HTTP token form _get_authentication method. Going to use the HTTP API"
if
!
_get_zone_id
"
$fulldomain
"
;
then
_err
"Could not find a matching zone for
$fulldomain
. Maybe your HTTP Token is not authorized to access the zone"
return
1
fi
_get_zone_name
"
$_zone_id
"
record
=
"
${
fulldomain
%%.
$_zone_name
}
"
_get_record_id
"
$_zone_id
"
"
$record
"
"
$txtvalue
"
_del_record
"
$_zone_id
"
"
$_record_id
"
if
[
-z
"
$response
"
]
;
then
_info
"Successfully deleted record"
return
0
else
_err
"Something went wrong while deleting the record"
return
1
fi
}
#get the zoneid for a specifc record or zone
#usage: _get_zone_id §record
#where $record is the record to get the id for
#returns _zone_id the id of the zone
_get_zone_id
()
{
record
=
"
$1
"
_debug
"getting zone id for
$record
"
_dynv6_rest GET zones
zones
=
"
$(
echo
"
$response
"
|
tr
'}'
'\n'
|
tr
','
'\n'
|
grep
name |
sed
's/\[//g'
|
tr
-d
'{'
|
tr
-d
'"'
)
"
#echo $zones
selected
=
""
for
z
in
$zones
;
do
z
=
"
${
z
#name
:
}
"
_debug zone:
"
$z
"
if
_contains
"
$record
"
"
$z
"
;
then
_debug
"
$z
found in
$record
"
selected
=
"
$z
"
fi
fi
_saveaccountconf_mutable dynv6_keyfile
"
$dynv6_keyfile
"
done
if
[
-z
"
$selected
"
]
;
then
_err
"no zone found"
return
1
fi
zone_id
=
"
$(
echo
"
$response
"
|
tr
'}'
'\n'
|
grep
"
$selected
"
|
tr
','
'\n'
|
grep id
|
tr
-d
'"'
)
"
_zone_id
=
"
${
zone_id
#id
:
}
"
_debug
"zone id:
$_zone_id
"
}
_get_zone_name
()
{
_zone_id
=
"
$1
"
_dynv6_rest GET zones/
"
$_zone_id
"
_zone_name
=
"
$(
echo
"
$response
"
|
tr
','
'\n'
|
tr
-d
'{'
|
grep
name |
tr
-d
'"'
)
"
_zone_name
=
"
${
_zone_name
#name
:
}
"
}
#usaage _get_record_id $zone_id $record
# where zone_id is thevalue returned by _get_zone_id
# and record ist in the form _acme.www for an fqdn of _acme.www.example.com
# returns _record_id
_get_record_id
()
{
_zone_id
=
"
$1
"
record
=
"
$2
"
value
=
"
$3
"
_dynv6_rest GET
"zones/
$_zone_id
/records"
if
!
_get_record_id_from_response
"
$response
"
;
then
_err
"no such record
$record
found in zone
$_zone_id
"
return
1
fi
fi
}
}
_get_record_id_from_response
()
{
response
=
"
$1
"
_record_id
=
"
$(
echo
"
$response
"
|
tr
'}'
'\n'
|
grep
"
\"
name
\"
:
\"
$record
\"
"
|
grep
"
\"
data
\"
:
\"
$value
\"
"
|
tr
','
'\n'
|
grep id
|
tr
-d
'"'
|
tr
-d
'id:'
)
"
#_record_id="${_record_id#id:}"
if
[
-z
"
$_record_id
"
]
;
then
_err
"no such record:
$record
found in zone
$_zone_id
"
return
1
fi
_debug
"record id:
$_record_id
"
return
0
}
#usage: _set_record TXT _acme_challenge.www longvalue 12345678
#zone id is optional can also be set as vairable bevor calling this method
_set_record
()
{
type
=
"
$1
"
record
=
"
$2
"
value
=
"
$3
"
if
[
"
$4
"
]
;
then
_zone_id
=
"
$4
"
fi
data
=
"{
\"
name
\"
:
\"
$record
\"
,
\"
data
\"
:
\"
$value
\"
,
\"
type
\"
:
\"
$type
\"
}"
#data='{ "name": "acme.test.thorn.dynv6.net", "type": "A", "data": "192.168.0.1"}'
echo
"
$data
"
#"{\"type\":\"TXT\",\"name\":\"$fulldomain\",\"content\":\"$txtvalue\",\"ttl\":120}"
_dynv6_rest POST
"zones/
$_zone_id
/records"
"
$data
"
}
_del_record
()
{
_zone_id
=
$1
_record_id
=
$2
_dynv6_rest DELETE zones/
"
$_zone_id
"
/records/
"
$_record_id
"
}
_dynv6_rest
()
{
m
=
$1
#method GET,POST,DELETE or PUT
ep
=
"
$2
"
#the endpoint
data
=
"
$3
"
_debug
"
$ep
"
token_trimmed
=
$(
echo
"
$dynv6_token
"
|
tr
-d
'"'
)
export
_H1
=
"Authorization: Bearer
$token_trimmed
"
export
_H2
=
"Content-Type: application/json"
if
[
"
$m
"
!=
"GET"
]
;
then
_debug data
"
$data
"
response
=
"
$(
_post
"
$data
"
"
$dynv6_api
/
$ep
"
""
"
$m
"
)
"
else
response
=
"
$(
_get
"
$dynv6_api
/
$ep
"
)
"
fi
if
[
"
$?
"
!=
"0"
]
;
then
_err
"error
$ep
"
return
1
fi
_debug2 response
"
$response
"
return
0
}
dnsapi/dns_misaka.sh
View file @
a0b5305e
...
@@ -47,7 +47,7 @@ dns_misaka_add() {
...
@@ -47,7 +47,7 @@ dns_misaka_add() {
if
[
"
$count
"
=
"0"
]
;
then
if
[
"
$count
"
=
"0"
]
;
then
_info
"Adding record"
_info
"Adding record"
if
_misaka_rest P
U
T
"zones/
${
_domain
}
/recordsets/
${
_sub_domain
}
/TXT"
"{
\"
records
\"
:[{
\"
value
\"
:
\"\\\"
$txtvalue
\\\"\"
}],
\"
filters
\"
:[],
\"
ttl
\"
:1}"
;
then
if
_misaka_rest P
OS
T
"zones/
${
_domain
}
/recordsets/
${
_sub_domain
}
/TXT"
"{
\"
records
\"
:[{
\"
value
\"
:
\"\\\"
$txtvalue
\\\"\"
}],
\"
filters
\"
:[],
\"
ttl
\"
:1}"
;
then
_debug response
"
$response
"
_debug response
"
$response
"
if
_contains
"
$response
"
"
$_sub_domain
"
;
then
if
_contains
"
$response
"
"
$_sub_domain
"
;
then
_info
"Added"
_info
"Added"
...
@@ -61,7 +61,7 @@ dns_misaka_add() {
...
@@ -61,7 +61,7 @@ dns_misaka_add() {
else
else
_info
"Updating record"
_info
"Updating record"
_misaka_rest P
OS
T
"zones/
${
_domain
}
/recordsets/
${
_sub_domain
}
/TXT?append=true"
"{
\"
records
\"
: [{
\"
value
\"
:
\"\\\"
$txtvalue
\\\"\"
}],
\"
ttl
\"
:1}"
_misaka_rest P
U
T
"zones/
${
_domain
}
/recordsets/
${
_sub_domain
}
/TXT?append=true"
"{
\"
records
\"
: [{
\"
value
\"
:
\"\\\"
$txtvalue
\\\"\"
}],
\"
ttl
\"
:1}"
if
[
"
$?
"
=
"0"
]
&&
_contains
"
$response
"
"
$_sub_domain
"
;
then
if
[
"
$?
"
=
"0"
]
&&
_contains
"
$response
"
"
$_sub_domain
"
;
then
_info
"Updated!"
_info
"Updated!"
#todo: check if the record takes effect
#todo: check if the record takes effect
...
...
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