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
98b3dcbf
Unverified
Commit
98b3dcbf
authored
Dec 16, 2016
by
Armando Lüscher
Browse files
Prefix all private functions with `_cyon`.
Satisfy shellcheck.
parent
2698ef6c
Changes
1
Hide whitespace changes
Inline
Side-by-side
dnsapi/dns_cyon.sh
View file @
98b3dcbf
...
@@ -33,30 +33,30 @@
...
@@ -33,30 +33,30 @@
########
########
dns_cyon_add
()
{
dns_cyon_add
()
{
_load_credentials
\
_cyon
_load_credentials
\
&&
_load_parameters
"
$@
"
\
&&
_cyon
_load_parameters
"
$@
"
\
&&
_
info
_header
"add"
\
&&
_
cyon_print
_header
"add"
\
&&
_login
\
&&
_cyon
_login
\
&&
_domain_env
\
&&
_cyon_change
_domain_env
\
&&
_add_txt
\
&&
_cyon
_add_txt
\
&&
_logout
&&
_cyon
_logout
}
}
dns_cyon_rm
()
{
dns_cyon_rm
()
{
_load_credentials
\
_cyon
_load_credentials
\
&&
_load_parameters
"
$@
"
\
&&
_cyon
_load_parameters
"
$@
"
\
&&
_
info
_header
"delete"
\
&&
_
cyon_print
_header
"delete"
\
&&
_login
\
&&
_cyon
_login
\
&&
_domain_env
\
&&
_cyon_change
_domain_env
\
&&
_delete_txt
\
&&
_cyon
_delete_txt
\
&&
_logout
&&
_cyon
_logout
}
}
#########################
#########################
### PRIVATE FUNCTIONS ###
### PRIVATE FUNCTIONS ###
#########################
#########################
_load_credentials
()
{
_cyon
_load_credentials
()
{
# Convert loaded password to/from base64 as needed.
# Convert loaded password to/from base64 as needed.
if
[
"
${
cyon_password_b64
}
"
]
;
then
if
[
"
${
cyon_password_b64
}
"
]
;
then
cyon_password
=
"
$(
printf
"%s"
"
${
cyon_password_b64
}
"
| _dbase64
"multiline"
)
"
cyon_password
=
"
$(
printf
"%s"
"
${
cyon_password_b64
}
"
| _dbase64
"multiline"
)
"
...
@@ -88,25 +88,25 @@ _load_credentials() {
...
@@ -88,25 +88,25 @@ _load_credentials() {
fi
fi
}
}
_is_idn
_cyon
()
{
_cyon
_is_idn
()
{
_idn_temp
=
"
$(
printf
"%s"
"
${
1
}
"
|
tr
-d
"[0-9a-zA-Z.,-_]"
)
"
_idn_temp
=
"
$(
printf
"%s"
"
${
1
}
"
|
tr
-d
"[0-9a-zA-Z.,-_]"
)
"
_idn_temp2
=
"
$(
printf
"%s"
"
${
1
}
"
|
grep
-o
"xn--"
)
"
_idn_temp2
=
"
$(
printf
"%s"
"
${
1
}
"
|
grep
-o
"xn--"
)
"
[
"
$_idn_temp
"
]
||
[
"
$_idn_temp2
"
]
[
"
$_idn_temp
"
]
||
[
"
$_idn_temp2
"
]
}
}
# comment on https://stackoverflow.com/a/10797966
# comment on https://stackoverflow.com/a/10797966
_urlencode
_cyon
()
{
_cyon
_urlencode
()
{
curl
-Gso
/dev/null
-w
%
{
url_effective
}
--data-urlencode
@-
""
|
cut
-c
3-
curl
-Gso
/dev/null
-w
"
%{url_effective}
"
--data-urlencode
@-
""
|
cut
-c
3-
}
}
_load_parameters
()
{
_cyon
_load_parameters
()
{
# Read the required parameters to add the TXT entry.
# Read the required parameters to add the TXT entry.
fulldomain
=
"
$(
printf
"%s"
"
${
1
}
"
|
tr
'[:upper:]'
'[:lower:]'
)
"
fulldomain
=
"
$(
printf
"%s"
"
${
1
}
"
|
tr
'[:upper:]'
'[:lower:]'
)
"
fulldomain_idn
=
"
${
fulldomain
}
"
fulldomain_idn
=
"
${
fulldomain
}
"
# Special case for IDNs, as cyon needs a domain environment change,
# Special case for IDNs, as cyon needs a domain environment change,
# which uses the "pretty" instead of the punycode version.
# which uses the "pretty" instead of the punycode version.
if
_is_id
n_cyo
n
"
${
fulldomain
}
"
;
then
if
_
cyon_
is_idn
"
${
fulldomain
}
"
;
then
if
!
_exists idn
;
then
if
!
_exists idn
;
then
_err
"Please install idn to process IDN names."
_err
"Please install idn to process IDN names."
_err
""
_err
""
...
@@ -127,7 +127,7 @@ _load_parameters() {
...
@@ -127,7 +127,7 @@ _load_parameters() {
_H1
=
"X-Requested-With: XMLHttpRequest"
_H1
=
"X-Requested-With: XMLHttpRequest"
}
}
_
info
_header
()
{
_
cyon_print
_header
()
{
if
[
"
${
1
}
"
=
"add"
]
;
then
if
[
"
${
1
}
"
=
"add"
]
;
then
_info
""
_info
""
_info
"+---------------------------------------------+"
_info
"+---------------------------------------------+"
...
@@ -148,15 +148,15 @@ _info_header() {
...
@@ -148,15 +148,15 @@ _info_header() {
fi
fi
}
}
_get_cookie_header
()
{
_cyon
_get_cookie_header
()
{
printf
"%s"
"
$(
sed
-n
's/Set-\(Cookie:.*cyon=[^;]*\).*/\1/p'
"
$HTTP_HEADER
"
| _tail_n 1
)
"
printf
"%s"
"
$(
sed
-n
's/Set-\(Cookie:.*cyon=[^;]*\).*/\1/p'
"
$HTTP_HEADER
"
| _tail_n 1
)
"
}
}
_login
()
{
_cyon
_login
()
{
_info
" - Logging in..."
_info
" - Logging in..."
username_encoded
=
"
$(
printf
"%s"
"
${
cyon_username
}
"
| _urlencode
_cyon
)
"
username_encoded
=
"
$(
printf
"%s"
"
${
cyon_username
}
"
|
_cyon
_urlencode
)
"
password_encoded
=
"
$(
printf
"%s"
"
${
cyon_password
}
"
| _urlencode
_cyon
)
"
password_encoded
=
"
$(
printf
"%s"
"
${
cyon_password
}
"
|
_cyon
_urlencode
)
"
login_url
=
"https://my.cyon.ch/auth/index/dologin-async"
login_url
=
"https://my.cyon.ch/auth/index/dologin-async"
login_data
=
"
$(
printf
"%s"
"username=
${
username_encoded
}
&password=
${
password_encoded
}
&pathname=%2F"
)
"
login_data
=
"
$(
printf
"%s"
"username=
${
username_encoded
}
&password=
${
password_encoded
}
&pathname=%2F"
)
"
...
@@ -165,8 +165,8 @@ _login() {
...
@@ -165,8 +165,8 @@ _login() {
_debug login_response
"
${
login_response
}
"
_debug login_response
"
${
login_response
}
"
# Bail if login fails.
# Bail if login fails.
if
[
"
$(
printf
"%s"
"
${
login_response
}
"
| _get_response_success
)
"
!=
"success"
]
;
then
if
[
"
$(
printf
"%s"
"
${
login_response
}
"
|
_cyon
_get_response_success
)
"
!=
"success"
]
;
then
_err
"
$(
printf
"%s"
"
${
login_response
}
"
| _get_response_message
)
"
_err
"
$(
printf
"%s"
"
${
login_response
}
"
|
_cyon
_get_response_message
)
"
_err
""
_err
""
return
1
return
1
fi
fi
...
@@ -174,8 +174,8 @@ _login() {
...
@@ -174,8 +174,8 @@ _login() {
_info
" success"
_info
" success"
# NECESSARY!! Load the main page after login, to get the new cookie.
# NECESSARY!! Load the main page after login, to get the new cookie.
_H2
=
"
$(
_get_cookie_header
)
"
_H2
=
"
$(
_
cyon_
get_cookie_header
)
"
_get
"https://my.cyon.ch/"
>
/dev/null
_get
"https://my.cyon.ch/"
>
/dev/null
# todo: instead of just checking if the env variable is defined, check if we actually need to do a 2FA auth request.
# todo: instead of just checking if the env variable is defined, check if we actually need to do a 2FA auth request.
...
@@ -199,8 +199,8 @@ _login() {
...
@@ -199,8 +199,8 @@ _login() {
_debug login_otp_response
"
${
login_otp_response
}
"
_debug login_otp_response
"
${
login_otp_response
}
"
# Bail if OTP authentication fails.
# Bail if OTP authentication fails.
if
[
"
$(
printf
"%s"
"
${
login_otp_response
}
"
| _get_response_success
)
"
!=
"success"
]
;
then
if
[
"
$(
printf
"%s"
"
${
login_otp_response
}
"
|
_cyon
_get_response_success
)
"
!=
"success"
]
;
then
_err
"
$(
printf
"%s"
"
${
login_otp_response
}
"
| _get_response_message
)
"
_err
"
$(
printf
"%s"
"
${
login_otp_response
}
"
|
_cyon
_get_response_message
)
"
_err
""
_err
""
return
1
return
1
fi
fi
...
@@ -211,16 +211,16 @@ _login() {
...
@@ -211,16 +211,16 @@ _login() {
_info
""
_info
""
}
}
_logout
()
{
_cyon
_logout
()
{
_info
" - Logging out..."
_info
" - Logging out..."
_get
"https://my.cyon.ch/auth/index/dologout"
>
/dev/null
_get
"https://my.cyon.ch/auth/index/dologout"
>
/dev/null
_info
" success"
_info
" success"
_info
""
_info
""
}
}
_domain_env
()
{
_cyon_change
_domain_env
()
{
_info
" - Changing domain environment..."
_info
" - Changing domain environment..."
# Get the "example.com" part of the full domain name.
# Get the "example.com" part of the full domain name.
...
@@ -232,13 +232,13 @@ _domain_env() {
...
@@ -232,13 +232,13 @@ _domain_env() {
domain_env_response
=
"
$(
_get
"
${
domain_env_url
}
"
)
"
domain_env_response
=
"
$(
_get
"
${
domain_env_url
}
"
)
"
_debug domain_env_response
"
${
domain_env_response
}
"
_debug domain_env_response
"
${
domain_env_response
}
"
if
!
_check_if_2fa_missed
"
${
domain_env_response
}
"
;
then return
1
;
fi
if
!
_cyon
_check_if_2fa_missed
"
${
domain_env_response
}
"
;
then return
1
;
fi
domain_env_success
=
"
$(
printf
"%s"
"
${
domain_env_response
}
"
| _egrep_o
'"authenticated":\w*'
|
cut
-d
:
-f
2
)
"
domain_env_success
=
"
$(
printf
"%s"
"
${
domain_env_response
}
"
| _egrep_o
'"authenticated":\w*'
|
cut
-d
:
-f
2
)
"
# Bail if domain environment change fails.
# Bail if domain environment change fails.
if
[
"
${
domain_env_success
}
"
!=
"true"
]
;
then
if
[
"
${
domain_env_success
}
"
!=
"true"
]
;
then
_err
"
$(
printf
"%s"
"
${
domain_env_response
}
"
| _get_response_message
)
"
_err
"
$(
printf
"%s"
"
${
domain_env_response
}
"
|
_cyon
_get_response_message
)
"
_err
""
_err
""
return
1
return
1
fi
fi
...
@@ -247,7 +247,7 @@ _domain_env() {
...
@@ -247,7 +247,7 @@ _domain_env() {
_info
""
_info
""
}
}
_add_txt
()
{
_cyon
_add_txt
()
{
_info
" - Adding DNS TXT entry..."
_info
" - Adding DNS TXT entry..."
add_txt_url
=
"https://my.cyon.ch/domain/dnseditor/add-record-async"
add_txt_url
=
"https://my.cyon.ch/domain/dnseditor/add-record-async"
...
@@ -256,10 +256,10 @@ _add_txt() {
...
@@ -256,10 +256,10 @@ _add_txt() {
add_txt_response
=
"
$(
_post
"
$add_txt_data
"
"
$add_txt_url
"
)
"
add_txt_response
=
"
$(
_post
"
$add_txt_data
"
"
$add_txt_url
"
)
"
_debug add_txt_response
"
${
add_txt_response
}
"
_debug add_txt_response
"
${
add_txt_response
}
"
if
!
_check_if_2fa_missed
"
${
add_txt_response
}
"
;
then return
1
;
fi
if
!
_cyon
_check_if_2fa_missed
"
${
add_txt_response
}
"
;
then return
1
;
fi
add_txt_message
=
"
$(
printf
"%s"
"
${
add_txt_response
}
"
| _get_response_message
)
"
add_txt_message
=
"
$(
printf
"%s"
"
${
add_txt_response
}
"
|
_cyon
_get_response_message
)
"
add_txt_status
=
"
$(
printf
"%s"
"
${
add_txt_response
}
"
| _get_response_status
)
"
add_txt_status
=
"
$(
printf
"%s"
"
${
add_txt_response
}
"
|
_cyon
_get_response_status
)
"
# Bail if adding TXT entry fails.
# Bail if adding TXT entry fails.
if
[
"
${
add_txt_status
}
"
!=
"true"
]
;
then
if
[
"
${
add_txt_status
}
"
!=
"true"
]
;
then
...
@@ -272,7 +272,7 @@ _add_txt() {
...
@@ -272,7 +272,7 @@ _add_txt() {
_info
""
_info
""
}
}
_delete_txt
()
{
_cyon
_delete_txt
()
{
_info
" - Deleting DNS TXT entry..."
_info
" - Deleting DNS TXT entry..."
list_txt_url
=
"https://my.cyon.ch/domain/dnseditor/list-async"
list_txt_url
=
"https://my.cyon.ch/domain/dnseditor/list-async"
...
@@ -280,7 +280,7 @@ _delete_txt() {
...
@@ -280,7 +280,7 @@ _delete_txt() {
list_txt_response
=
"
$(
_get
"
${
list_txt_url
}
"
|
sed
-e
's/data-hash/\\ndata-hash/g'
)
"
list_txt_response
=
"
$(
_get
"
${
list_txt_url
}
"
|
sed
-e
's/data-hash/\\ndata-hash/g'
)
"
_debug list_txt_response
"
${
list_txt_response
}
"
_debug list_txt_response
"
${
list_txt_response
}
"
if
!
_check_if_2fa_missed
"
${
list_txt_response
}
"
;
then return
1
;
fi
if
!
_cyon
_check_if_2fa_missed
"
${
list_txt_response
}
"
;
then return
1
;
fi
# Find and delete all acme challenge entries for the $fulldomain.
# Find and delete all acme challenge entries for the $fulldomain.
_dns_entries
=
"
$(
printf
"%b
\n
"
"
${
list_txt_response
}
"
|
sed
-n
's/data-hash=\\"\([^"]*\)\\" data-identifier=\\"\([^"]*\)\\".*/\1 \2/p'
)
"
_dns_entries
=
"
$(
printf
"%b
\n
"
"
${
list_txt_response
}
"
|
sed
-n
's/data-hash=\\"\([^"]*\)\\" data-identifier=\\"\([^"]*\)\\".*/\1 \2/p'
)
"
...
@@ -293,8 +293,8 @@ _delete_txt() {
...
@@ -293,8 +293,8 @@ _delete_txt() {
continue
continue
fi
fi
hash_encoded
=
"
$(
printf
"%s"
"
${
_hash
}
"
| _urlencode
_cyon
)
"
hash_encoded
=
"
$(
printf
"%s"
"
${
_hash
}
"
|
_cyon
_urlencode
)
"
identifier_encoded
=
"
$(
printf
"%s"
"
${
_identifier
}
"
| _urlencode
_cyon
)
"
identifier_encoded
=
"
$(
printf
"%s"
"
${
_identifier
}
"
|
_cyon
_urlencode
)
"
delete_txt_url
=
"https://my.cyon.ch/domain/dnseditor/delete-record-async"
delete_txt_url
=
"https://my.cyon.ch/domain/dnseditor/delete-record-async"
delete_txt_data
=
"
$(
printf
"%s"
"hash=
${
hash_encoded
}
&identifier=
${
identifier_encoded
}
"
)
"
delete_txt_data
=
"
$(
printf
"%s"
"hash=
${
hash_encoded
}
&identifier=
${
identifier_encoded
}
"
)
"
...
@@ -302,10 +302,10 @@ _delete_txt() {
...
@@ -302,10 +302,10 @@ _delete_txt() {
delete_txt_response
=
"
$(
_post
"
$delete_txt_data
"
"
$delete_txt_url
"
)
"
delete_txt_response
=
"
$(
_post
"
$delete_txt_data
"
"
$delete_txt_url
"
)
"
_debug delete_txt_response
"
${
delete_txt_response
}
"
_debug delete_txt_response
"
${
delete_txt_response
}
"
if
!
_check_if_2fa_missed
"
${
delete_txt_response
}
"
;
then return
1
;
fi
if
!
_cyon
_check_if_2fa_missed
"
${
delete_txt_response
}
"
;
then return
1
;
fi
delete_txt_message
=
"
$(
printf
"%s"
"
${
delete_txt_response
}
"
| _get_response_message
)
"
delete_txt_message
=
"
$(
printf
"%s"
"
${
delete_txt_response
}
"
|
_cyon
_get_response_message
)
"
delete_txt_status
=
"
$(
printf
"%s"
"
${
delete_txt_response
}
"
| _get_response_status
)
"
delete_txt_status
=
"
$(
printf
"%s"
"
${
delete_txt_response
}
"
|
_cyon
_get_response_status
)
"
# Skip if deleting TXT entry fails.
# Skip if deleting TXT entry fails.
if
[
"
${
delete_txt_status
}
"
!=
"true"
]
;
then
if
[
"
${
delete_txt_status
}
"
!=
"true"
]
;
then
...
@@ -319,23 +319,23 @@ _delete_txt() {
...
@@ -319,23 +319,23 @@ _delete_txt() {
_info
""
_info
""
}
}
_get_response_message
()
{
_cyon
_get_response_message
()
{
_egrep_o
'"message":"[^"]*"'
|
cut
-d
:
-f
2 |
tr
-d
'"'
_egrep_o
'"message":"[^"]*"'
|
cut
-d
:
-f
2 |
tr
-d
'"'
}
}
_get_response_status
()
{
_cyon
_get_response_status
()
{
_egrep_o
'"status":\w*'
|
cut
-d
:
-f
2
_egrep_o
'"status":\w*'
|
cut
-d
:
-f
2
}
}
_get_response_success
()
{
_cyon
_get_response_success
()
{
_egrep_o
'"onSuccess":"[^"]*"'
|
cut
-d
:
-f
2 |
tr
-d
'"'
_egrep_o
'"onSuccess":"[^"]*"'
|
cut
-d
:
-f
2 |
tr
-d
'"'
}
}
_check_if_2fa_missed
()
{
_cyon
_check_if_2fa_missed
()
{
# Did we miss the 2FA?
# Did we miss the 2FA?
if
test
"
${
1
#*multi_factor_form
}
"
!=
"
${
1
}
"
;
then
if
test
"
${
1
#*multi_factor_form
}
"
!=
"
${
1
}
"
;
then
_err
" Missed OTP authentication!"
_err
" Missed OTP authentication!"
_err
""
_err
""
return
1
return
1
fi
fi
}
}
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