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 @@
########
dns_cyon_add
()
{
_load_credentials
\
&&
_load_parameters
"
$@
"
\
&&
_
info
_header
"add"
\
&&
_login
\
&&
_domain_env
\
&&
_add_txt
\
&&
_logout
_cyon
_load_credentials
\
&&
_cyon
_load_parameters
"
$@
"
\
&&
_
cyon_print
_header
"add"
\
&&
_cyon
_login
\
&&
_cyon_change
_domain_env
\
&&
_cyon
_add_txt
\
&&
_cyon
_logout
}
dns_cyon_rm
()
{
_load_credentials
\
&&
_load_parameters
"
$@
"
\
&&
_
info
_header
"delete"
\
&&
_login
\
&&
_domain_env
\
&&
_delete_txt
\
&&
_logout
_cyon
_load_credentials
\
&&
_cyon
_load_parameters
"
$@
"
\
&&
_
cyon_print
_header
"delete"
\
&&
_cyon
_login
\
&&
_cyon_change
_domain_env
\
&&
_cyon
_delete_txt
\
&&
_cyon
_logout
}
#########################
### PRIVATE FUNCTIONS ###
#########################
_load_credentials
()
{
_cyon
_load_credentials
()
{
# Convert loaded password to/from base64 as needed.
if
[
"
${
cyon_password_b64
}
"
]
;
then
cyon_password
=
"
$(
printf
"%s"
"
${
cyon_password_b64
}
"
| _dbase64
"multiline"
)
"
...
...
@@ -88,25 +88,25 @@ _load_credentials() {
fi
}
_is_idn
_cyon
()
{
_cyon
_is_idn
()
{
_idn_temp
=
"
$(
printf
"%s"
"
${
1
}
"
|
tr
-d
"[0-9a-zA-Z.,-_]"
)
"
_idn_temp2
=
"
$(
printf
"%s"
"
${
1
}
"
|
grep
-o
"xn--"
)
"
[
"
$_idn_temp
"
]
||
[
"
$_idn_temp2
"
]
}
# comment on https://stackoverflow.com/a/10797966
_urlencode
_cyon
()
{
curl
-Gso
/dev/null
-w
%
{
url_effective
}
--data-urlencode
@-
""
|
cut
-c
3-
_cyon
_urlencode
()
{
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.
fulldomain
=
"
$(
printf
"%s"
"
${
1
}
"
|
tr
'[:upper:]'
'[:lower:]'
)
"
fulldomain_idn
=
"
${
fulldomain
}
"
# Special case for IDNs, as cyon needs a domain environment change,
# 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
_err
"Please install idn to process IDN names."
_err
""
...
...
@@ -127,7 +127,7 @@ _load_parameters() {
_H1
=
"X-Requested-With: XMLHttpRequest"
}
_
info
_header
()
{
_
cyon_print
_header
()
{
if
[
"
${
1
}
"
=
"add"
]
;
then
_info
""
_info
"+---------------------------------------------+"
...
...
@@ -148,15 +148,15 @@ _info_header() {
fi
}
_get_cookie_header
()
{
_cyon
_get_cookie_header
()
{
printf
"%s"
"
$(
sed
-n
's/Set-\(Cookie:.*cyon=[^;]*\).*/\1/p'
"
$HTTP_HEADER
"
| _tail_n 1
)
"
}
_login
()
{
_cyon
_login
()
{
_info
" - Logging in..."
username_encoded
=
"
$(
printf
"%s"
"
${
cyon_username
}
"
| _urlencode
_cyon
)
"
password_encoded
=
"
$(
printf
"%s"
"
${
cyon_password
}
"
| _urlencode
_cyon
)
"
username_encoded
=
"
$(
printf
"%s"
"
${
cyon_username
}
"
|
_cyon
_urlencode
)
"
password_encoded
=
"
$(
printf
"%s"
"
${
cyon_password
}
"
|
_cyon
_urlencode
)
"
login_url
=
"https://my.cyon.ch/auth/index/dologin-async"
login_data
=
"
$(
printf
"%s"
"username=
${
username_encoded
}
&password=
${
password_encoded
}
&pathname=%2F"
)
"
...
...
@@ -165,8 +165,8 @@ _login() {
_debug login_response
"
${
login_response
}
"
# Bail if login fails.
if
[
"
$(
printf
"%s"
"
${
login_response
}
"
| _get_response_success
)
"
!=
"success"
]
;
then
_err
"
$(
printf
"%s"
"
${
login_response
}
"
| _get_response_message
)
"
if
[
"
$(
printf
"%s"
"
${
login_response
}
"
|
_cyon
_get_response_success
)
"
!=
"success"
]
;
then
_err
"
$(
printf
"%s"
"
${
login_response
}
"
|
_cyon
_get_response_message
)
"
_err
""
return
1
fi
...
...
@@ -174,8 +174,8 @@ _login() {
_info
" success"
# NECESSARY!! Load the main page after login, to get the new cookie.
_H2
=
"
$(
_get_cookie_header
)
"
_get
"https://my.cyon.ch/"
>
/dev/null
_H2
=
"
$(
_
cyon_
get_cookie_header
)
"
_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.
...
...
@@ -199,8 +199,8 @@ _login() {
_debug login_otp_response
"
${
login_otp_response
}
"
# Bail if OTP authentication fails.
if
[
"
$(
printf
"%s"
"
${
login_otp_response
}
"
| _get_response_success
)
"
!=
"success"
]
;
then
_err
"
$(
printf
"%s"
"
${
login_otp_response
}
"
| _get_response_message
)
"
if
[
"
$(
printf
"%s"
"
${
login_otp_response
}
"
|
_cyon
_get_response_success
)
"
!=
"success"
]
;
then
_err
"
$(
printf
"%s"
"
${
login_otp_response
}
"
|
_cyon
_get_response_message
)
"
_err
""
return
1
fi
...
...
@@ -211,16 +211,16 @@ _login() {
_info
""
}
_logout
()
{
_cyon
_logout
()
{
_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
""
}
_domain_env
()
{
_cyon_change
_domain_env
()
{
_info
" - Changing domain environment..."
# Get the "example.com" part of the full domain name.
...
...
@@ -232,13 +232,13 @@ _domain_env() {
domain_env_response
=
"
$(
_get
"
${
domain_env_url
}
"
)
"
_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
)
"
# Bail if domain environment change fails.
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
""
return
1
fi
...
...
@@ -247,7 +247,7 @@ _domain_env() {
_info
""
}
_add_txt
()
{
_cyon
_add_txt
()
{
_info
" - Adding DNS TXT entry..."
add_txt_url
=
"https://my.cyon.ch/domain/dnseditor/add-record-async"
...
...
@@ -256,10 +256,10 @@ _add_txt() {
add_txt_response
=
"
$(
_post
"
$add_txt_data
"
"
$add_txt_url
"
)
"
_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_status
=
"
$(
printf
"%s"
"
${
add_txt_response
}
"
| _get_response_status
)
"
add_txt_message
=
"
$(
printf
"%s"
"
${
add_txt_response
}
"
|
_cyon
_get_response_message
)
"
add_txt_status
=
"
$(
printf
"%s"
"
${
add_txt_response
}
"
|
_cyon
_get_response_status
)
"
# Bail if adding TXT entry fails.
if
[
"
${
add_txt_status
}
"
!=
"true"
]
;
then
...
...
@@ -272,7 +272,7 @@ _add_txt() {
_info
""
}
_delete_txt
()
{
_cyon
_delete_txt
()
{
_info
" - Deleting DNS TXT entry..."
list_txt_url
=
"https://my.cyon.ch/domain/dnseditor/list-async"
...
...
@@ -280,7 +280,7 @@ _delete_txt() {
list_txt_response
=
"
$(
_get
"
${
list_txt_url
}
"
|
sed
-e
's/data-hash/\\ndata-hash/g'
)
"
_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.
_dns_entries
=
"
$(
printf
"%b
\n
"
"
${
list_txt_response
}
"
|
sed
-n
's/data-hash=\\"\([^"]*\)\\" data-identifier=\\"\([^"]*\)\\".*/\1 \2/p'
)
"
...
...
@@ -293,8 +293,8 @@ _delete_txt() {
continue
fi
hash_encoded
=
"
$(
printf
"%s"
"
${
_hash
}
"
| _urlencode
_cyon
)
"
identifier_encoded
=
"
$(
printf
"%s"
"
${
_identifier
}
"
| _urlencode
_cyon
)
"
hash_encoded
=
"
$(
printf
"%s"
"
${
_hash
}
"
|
_cyon
_urlencode
)
"
identifier_encoded
=
"
$(
printf
"%s"
"
${
_identifier
}
"
|
_cyon
_urlencode
)
"
delete_txt_url
=
"https://my.cyon.ch/domain/dnseditor/delete-record-async"
delete_txt_data
=
"
$(
printf
"%s"
"hash=
${
hash_encoded
}
&identifier=
${
identifier_encoded
}
"
)
"
...
...
@@ -302,10 +302,10 @@ _delete_txt() {
delete_txt_response
=
"
$(
_post
"
$delete_txt_data
"
"
$delete_txt_url
"
)
"
_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_status
=
"
$(
printf
"%s"
"
${
delete_txt_response
}
"
| _get_response_status
)
"
delete_txt_message
=
"
$(
printf
"%s"
"
${
delete_txt_response
}
"
|
_cyon
_get_response_message
)
"
delete_txt_status
=
"
$(
printf
"%s"
"
${
delete_txt_response
}
"
|
_cyon
_get_response_status
)
"
# Skip if deleting TXT entry fails.
if
[
"
${
delete_txt_status
}
"
!=
"true"
]
;
then
...
...
@@ -319,23 +319,23 @@ _delete_txt() {
_info
""
}
_get_response_message
()
{
_cyon
_get_response_message
()
{
_egrep_o
'"message":"[^"]*"'
|
cut
-d
:
-f
2 |
tr
-d
'"'
}
_get_response_status
()
{
_cyon
_get_response_status
()
{
_egrep_o
'"status":\w*'
|
cut
-d
:
-f
2
}
_get_response_success
()
{
_cyon
_get_response_success
()
{
_egrep_o
'"onSuccess":"[^"]*"'
|
cut
-d
:
-f
2 |
tr
-d
'"'
}
_check_if_2fa_missed
()
{
_cyon
_check_if_2fa_missed
()
{
# Did we miss the 2FA?
if
test
"
${
1
#*multi_factor_form
}
"
!=
"
${
1
}
"
;
then
_err
" Missed OTP authentication!"
_err
""
return
1
_err
""
return
1
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