123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- #!/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
- }
|