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
61549b4a
Commit
61549b4a
authored
Jan 06, 2021
by
Mark Challoner
Browse files
Add Peplink deploy hook
parent
44615c6f
Changes
1
Hide whitespace changes
Inline
Side-by-side
deploy/peplink.sh
0 → 100644
View file @
61549b4a
#!/usr/bin/env sh
# Script to deploy cert to Peplink Routers
#
# The following environment variables must be set:
#
# PEPLINK_Hostname - Peplink hostname
# PEPLINK_Username - Peplink username to login
# PEPLINK_Password - Peplink password to login
#
# The following environmental variables may be set if you don't like their
# default values:
#
# PEPLINK_Certtype - Certificate type to target for replacement
# defaults to "webadmin", can be one of:
# * "chub" (ContentHub)
# * "openvpn" (OpenVPN CA)
# * "portal" (Captive Portal SSL)
# * "webadmin" (Web Admin SSL)
# * "webproxy" (Proxy Root CA)
# * "wwan_ca" (Wi-Fi WAN CA)
# * "wwan_client" (Wi-Fi WAN Client)
# PEPLINK_Scheme - defaults to "https"
# PEPLINK_Port - defaults to "443"
#
#returns 0 means success, otherwise error.
######## Public functions #####################
_peplink_get_cookie_data
()
{
grep
-i
"
\W
$1
="
|
grep
-i
"^Set-Cookie:"
| _tail_n 1 | _egrep_o
"
$1
=[^;]*;"
|
tr
-d
';'
}
#domain keyfile certfile cafile fullchain
peplink_deploy
()
{
_cdomain
=
"
$1
"
_ckey
=
"
$2
"
_cfullchain
=
"
$5
"
_debug _cdomain
"
$_cdomain
"
_debug _cfullchain
"
$_cfullchain
"
_debug _ckey
"
$_ckey
"
# Get Hostname, Username and Password, but don't save until we successfully authenticate
_getdeployconf PEPLINK_Hostname
_getdeployconf PEPLINK_Username
_getdeployconf PEPLINK_Password
if
[
-z
"
${
PEPLINK_Hostname
:-}
"
]
||
[
-z
"
${
PEPLINK_Username
:-}
"
]
||
[
-z
"
${
PEPLINK_Password
:-}
"
]
;
then
_err
"PEPLINK_Hostname & PEPLINK_Username & PEPLINK_Password must be set"
return
1
fi
_debug2 PEPLINK_Hostname
"
$PEPLINK_Hostname
"
_debug2 PEPLINK_Username
"
$PEPLINK_Username
"
_secure_debug2 PEPLINK_Password
"
$PEPLINK_Password
"
# Optional certificate type, scheme, and port for Peplink
_getdeployconf PEPLINK_Certtype
_getdeployconf PEPLINK_Scheme
_getdeployconf PEPLINK_Port
# Don't save the certificate type until we verify it exists and is supported
_savedeployconf PEPLINK_Scheme
"
$PEPLINK_Scheme
"
_savedeployconf PEPLINK_Port
"
$PEPLINK_Port
"
# Default vaules for certificate type, scheme, and port
[
-n
"
${
PEPLINK_Certtype
}
"
]
||
PEPLINK_Certtype
=
"webadmin"
[
-n
"
${
PEPLINK_Scheme
}
"
]
||
PEPLINK_Scheme
=
"https"
[
-n
"
${
PEPLINK_Port
}
"
]
||
PEPLINK_Port
=
"443"
_debug2 PEPLINK_Certtype
"
$PEPLINK_Certtype
"
_debug2 PEPLINK_Scheme
"
$PEPLINK_Scheme
"
_debug2 PEPLINK_Port
"
$PEPLINK_Port
"
_base_url
=
"
$PEPLINK_Scheme
://
$PEPLINK_Hostname
:
$PEPLINK_Port
"
_debug _base_url
"
$_base_url
"
# Login, get the auth token from the cookie
_info
"Logging into
$PEPLINK_Hostname
:
$PEPLINK_Port
"
encoded_username
=
"
$(
printf
"%s"
"
$PEPLINK_Username
"
| _url_encode
)
"
encoded_password
=
"
$(
printf
"%s"
"
$PEPLINK_Password
"
| _url_encode
)
"
response
=
$(
_post
"func=login&username=
$encoded_username
&password=
$encoded_password
"
"
$_base_url
/cgi-bin/MANGA/api.cgi"
)
auth_token
=
$(
_peplink_get_cookie_data
"bauth"
<
"
$HTTP_HEADER
"
)
_debug3 response
"
$response
"
_debug auth_token
"
$auth_token
"
if
[
-z
"
$auth_token
"
]
;
then
_err
"Unable to authenticate to
$PEPLINK_Hostname
:
$PEPLINK_Port
using
$PEPLINK_Scheme
."
_err
"Check your username and password."
return
1
fi
_H1
=
"Cookie:
$auth_token
"
export
_H1
_debug2 H1
"
${
_H1
}
"
# Now that we know the hostnameusername and password are good, save them
_savedeployconf PEPLINK_Hostname
"
$PEPLINK_Hostname
"
_savedeployconf PEPLINK_Username
"
$PEPLINK_Username
"
_savedeployconf PEPLINK_Password
"
$PEPLINK_Password
"
_info
"Generate form POST request"
encoded_key
=
"
$(
_url_encode <
"
$_ckey
"
)
"
encoded_fullchain
=
"
$(
_url_encode <
"
$_cfullchain
"
)
"
body
=
"cert_type=
$PEPLINK_Certtype
&cert_uid=§ion=CERT_modify&key_pem=
$encoded_key
&key_pem_passphrase=&key_pem_passphrase_confirm=&cert_pem=
$encoded_fullchain
"
_debug3 body
"
$body
"
_info
"Upload
$PEPLINK_Certtype
certificate to the Peplink"
response
=
$(
_post
"
$body
"
"
$_base_url
/cgi-bin/MANGA/admin.cgi"
)
_debug3 response
"
$response
"
if
echo
"
$response
"
|
grep
'Success'
>
/dev/null
;
then
# We've verified this certificate type is valid, so save it
_savedeployconf PEPLINK_Certtype
"
$PEPLINK_Certtype
"
_info
"Certificate was updated"
return
0
else
_err
"Unable to update certificate, error code
$response
"
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