mirror of
https://github.com/plantroon/acme.sh.git
synced 2024-12-23 21:51:41 +00:00
support '--pre-hook', '--post-hook' and '--renew-hook'
This commit is contained in:
parent
08ee072f11
commit
b0070f03af
115
acme.sh
115
acme.sh
@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env sh
|
||||
|
||||
VER=2.4.5
|
||||
VER=2.5.0
|
||||
|
||||
PROJECT_NAME="acme.sh"
|
||||
|
||||
@ -1573,6 +1573,58 @@ _clearupwebbroot() {
|
||||
|
||||
}
|
||||
|
||||
_on_before_issue() {
|
||||
#run pre hook
|
||||
if [ "$Le_PreHook" ] ; then
|
||||
_info "Run pre hook:'$Le_PreHook'"
|
||||
if ! (
|
||||
cd "$DOMAIN_PATH" && eval "$Le_PreHook"
|
||||
) ; then
|
||||
_err "Error when run pre hook."
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
_on_issue_err() {
|
||||
#run the post hook
|
||||
if [ "$Le_PostHook" ] ; then
|
||||
_info "Run post hook:'$Le_PostHook'"
|
||||
if ! (
|
||||
cd "$DOMAIN_PATH" && eval "$Le_PostHook"
|
||||
) ; then
|
||||
_err "Error when run post hook."
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
_on_issue_success() {
|
||||
#run the post hook
|
||||
if [ "$Le_PostHook" ] ; then
|
||||
_info "Run post hook:'$Le_PostHook'"
|
||||
if ! (
|
||||
cd "$DOMAIN_PATH" && eval "$Le_PostHook"
|
||||
) ; then
|
||||
_err "Error when run post hook."
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
#run renew hook
|
||||
if [ "$IS_RENEW" ] && [ "$Le_RenewHook" ] ; then
|
||||
_info "Run renew hook:'$Le_RenewHook'"
|
||||
if ! (
|
||||
cd "$DOMAIN_PATH" && eval "$Le_RenewHook"
|
||||
) ; then
|
||||
_err "Error when run renew hook."
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
|
||||
#webroot, domain domainlist keylength
|
||||
issue() {
|
||||
if [ -z "$2" ] ; then
|
||||
@ -1588,6 +1640,9 @@ issue() {
|
||||
Le_RealCACertPath="$7"
|
||||
Le_ReloadCmd="$8"
|
||||
Le_RealFullChainPath="$9"
|
||||
Le_PreHook="${10}"
|
||||
Le_PostHook="${11}"
|
||||
Le_RenewHook="${12}"
|
||||
|
||||
#remove these later.
|
||||
if [ "$Le_Webroot" = "dns-cf" ] ; then
|
||||
@ -1619,6 +1674,14 @@ issue() {
|
||||
_savedomainconf "Le_Alt" "$Le_Alt"
|
||||
_savedomainconf "Le_Webroot" "$Le_Webroot"
|
||||
|
||||
_savedomainconf "Le_PreHook" "$Le_PreHook"
|
||||
_savedomainconf "Le_PostHook" "$Le_PostHook"
|
||||
_savedomainconf "Le_RenewHook" "$Le_RenewHook"
|
||||
|
||||
if ! _on_before_issue ; then
|
||||
_err "_on_before_issue."
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [ "$Le_Alt" = "no" ] ; then
|
||||
Le_Alt=""
|
||||
@ -1628,6 +1691,7 @@ issue() {
|
||||
_info "Standalone mode."
|
||||
if ! _exists "nc" ; then
|
||||
_err "Please install netcat(nc) tools first."
|
||||
_on_issue_err
|
||||
return 1
|
||||
fi
|
||||
|
||||
@ -1642,6 +1706,7 @@ issue() {
|
||||
_err "$netprc"
|
||||
_err "tcp port $Le_HTTPPort is already used by $(echo "$netprc" | cut -d : -f 4)"
|
||||
_err "Please stop it first"
|
||||
_on_issue_err
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
@ -1660,6 +1725,7 @@ issue() {
|
||||
_err "$netprc"
|
||||
_err "tcp port $Le_TLSPort is already used by $(echo "$netprc" | cut -d : -f 4)"
|
||||
_err "Please stop it first"
|
||||
_on_issue_err
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
@ -1667,6 +1733,7 @@ issue() {
|
||||
if _hasfield "$Le_Webroot" "apache" ; then
|
||||
if ! _setApache ; then
|
||||
_err "set up apache error. Report error to me."
|
||||
_on_issue_err
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
@ -1683,6 +1750,7 @@ issue() {
|
||||
if [ "$usingApache" ] ; then
|
||||
_restoreApache
|
||||
fi
|
||||
_on_issue_err
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
@ -1691,6 +1759,7 @@ issue() {
|
||||
if [ "$usingApache" ] ; then
|
||||
_restoreApache
|
||||
fi
|
||||
_on_issue_err
|
||||
return 1
|
||||
fi
|
||||
|
||||
@ -1715,6 +1784,7 @@ issue() {
|
||||
else
|
||||
_err "Register account Error: $response"
|
||||
_clearup
|
||||
_on_issue_err
|
||||
return 1
|
||||
fi
|
||||
ACCOUNT_KEY_HASH="$accountkeyhash"
|
||||
@ -1737,6 +1807,7 @@ issue() {
|
||||
if ! createDomainKey $Le_Domain $Le_Keylength ; then
|
||||
_err "Create domain key error."
|
||||
_clearup
|
||||
_on_issue_err
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
@ -1744,6 +1815,7 @@ issue() {
|
||||
if ! _createcsr "$Le_Domain" "$Le_Alt" "$CERT_KEY_PATH" "$CSR_PATH" "$DOMAIN_SSL_CONF" ; then
|
||||
_err "Create CSR error."
|
||||
_clearup
|
||||
_on_issue_err
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
@ -1783,12 +1855,14 @@ issue() {
|
||||
if ! _send_signed_request "$API/acme/new-authz" "{\"resource\": \"new-authz\", \"identifier\": {\"type\": \"dns\", \"value\": \"$d\"}}" ; then
|
||||
_err "Can not get domain token."
|
||||
_clearup
|
||||
_on_issue_err
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [ ! -z "$code" ] && [ ! "$code" = '201' ] ; then
|
||||
_err "new-authz error: $response"
|
||||
_clearup
|
||||
_on_issue_err
|
||||
return 1
|
||||
fi
|
||||
|
||||
@ -1797,6 +1871,7 @@ issue() {
|
||||
if [ -z "$entry" ] ; then
|
||||
_err "Error, can not get domain token $d"
|
||||
_clearup
|
||||
_on_issue_err
|
||||
return 1
|
||||
fi
|
||||
token="$(printf "%s\n" "$entry" | _egrep_o '"token":"[^"]*' | cut -d : -f 2 | tr -d '"')"
|
||||
@ -1876,23 +1951,27 @@ issue() {
|
||||
(
|
||||
if ! . $d_api ; then
|
||||
_err "Load file $d_api error. Please check your api file and try again."
|
||||
_on_issue_err
|
||||
return 1
|
||||
fi
|
||||
|
||||
addcommand="${_currentRoot}_add"
|
||||
if ! _exists $addcommand ; then
|
||||
_err "It seems that your api file is not correct, it must have a function named: $addcommand"
|
||||
_on_issue_err
|
||||
return 1
|
||||
fi
|
||||
|
||||
if ! $addcommand $txtdomain $txt ; then
|
||||
_err "Error add txt for domain:$txtdomain"
|
||||
_on_issue_err
|
||||
return 1
|
||||
fi
|
||||
)
|
||||
|
||||
if [ "$?" != "0" ] ; then
|
||||
_clearup
|
||||
_on_issue_err
|
||||
return 1
|
||||
fi
|
||||
dnsadded='1'
|
||||
@ -1904,6 +1983,7 @@ issue() {
|
||||
_debug "Dns record not added yet, so, save to $DOMAIN_CONF and exit."
|
||||
_err "Please add the TXT records to the domains, and retry again."
|
||||
_clearup
|
||||
_on_issue_err
|
||||
return 1
|
||||
fi
|
||||
|
||||
@ -1952,6 +2032,7 @@ issue() {
|
||||
_startserver "$keyauthorization" &
|
||||
if [ "$?" != "0" ] ; then
|
||||
_clearup
|
||||
_on_issue_err
|
||||
return 1
|
||||
fi
|
||||
serverproc="$!"
|
||||
@ -2017,6 +2098,7 @@ issue() {
|
||||
_err "Start tls server error."
|
||||
_clearupwebbroot "$_currentRoot" "$removelevel" "$token"
|
||||
_clearup
|
||||
_on_issue_err
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
@ -2025,6 +2107,7 @@ issue() {
|
||||
_err "$d:Can not get challenge: $response"
|
||||
_clearupwebbroot "$_currentRoot" "$removelevel" "$token"
|
||||
_clearup
|
||||
_on_issue_err
|
||||
return 1
|
||||
fi
|
||||
|
||||
@ -2032,6 +2115,7 @@ issue() {
|
||||
_err "$d:Challenge error: $response"
|
||||
_clearupwebbroot "$_currentRoot" "$removelevel" "$token"
|
||||
_clearup
|
||||
_on_issue_err
|
||||
return 1
|
||||
fi
|
||||
|
||||
@ -2046,6 +2130,7 @@ issue() {
|
||||
_err "$d:Timeout"
|
||||
_clearupwebbroot "$_currentRoot" "$removelevel" "$token"
|
||||
_clearup
|
||||
_on_issue_err
|
||||
return 1
|
||||
fi
|
||||
|
||||
@ -2057,6 +2142,7 @@ issue() {
|
||||
_err "$d:Verify error:$response"
|
||||
_clearupwebbroot "$_currentRoot" "$removelevel" "$token"
|
||||
_clearup
|
||||
_on_issue_err
|
||||
return 1
|
||||
fi
|
||||
_debug2 original "$response"
|
||||
@ -2090,6 +2176,7 @@ issue() {
|
||||
fi
|
||||
_clearupwebbroot "$_currentRoot" "$removelevel" "$token"
|
||||
_clearup
|
||||
_on_issue_err
|
||||
return 1;
|
||||
fi
|
||||
|
||||
@ -2099,6 +2186,7 @@ issue() {
|
||||
_err "$d:Verify error:$response"
|
||||
_clearupwebbroot "$_currentRoot" "$removelevel" "$token"
|
||||
_clearup
|
||||
_on_issue_err
|
||||
return 1
|
||||
fi
|
||||
|
||||
@ -2112,6 +2200,7 @@ issue() {
|
||||
|
||||
if ! _send_signed_request "$API/acme/new-cert" "{\"resource\": \"new-cert\", \"csr\": \"$der\"}" "needbase64" ; then
|
||||
_err "Sign failed."
|
||||
_on_issue_err
|
||||
return 1
|
||||
fi
|
||||
|
||||
@ -2144,6 +2233,7 @@ issue() {
|
||||
if [ -z "$Le_LinkCert" ] ; then
|
||||
response="$(echo $response | _dbase64 "multiline" | _normalizeJson )"
|
||||
_err "Sign failed: $(echo "$response" | _egrep_o '"detail":"[^"]*"')"
|
||||
_on_issue_err
|
||||
return 1
|
||||
fi
|
||||
|
||||
@ -2195,6 +2285,7 @@ issue() {
|
||||
Le_NextRenewTimeStr=$( _time2str $Le_NextRenewTime )
|
||||
_savedomainconf "Le_NextRenewTimeStr" "$Le_NextRenewTimeStr"
|
||||
|
||||
_on_issue_success
|
||||
|
||||
if [ "$Le_RealCertPath$Le_RealKeyPath$Le_RealCACertPath$Le_ReloadCmd$Le_RealFullChainPath" ] ; then
|
||||
_installcert
|
||||
@ -2232,7 +2323,7 @@ renew() {
|
||||
fi
|
||||
|
||||
IS_RENEW="1"
|
||||
issue "$Le_Webroot" "$Le_Domain" "$Le_Alt" "$Le_Keylength" "$Le_RealCertPath" "$Le_RealKeyPath" "$Le_RealCACertPath" "$Le_ReloadCmd" "$Le_RealFullChainPath"
|
||||
issue "$Le_Webroot" "$Le_Domain" "$Le_Alt" "$Le_Keylength" "$Le_RealCertPath" "$Le_RealKeyPath" "$Le_RealCACertPath" "$Le_ReloadCmd" "$Le_RealFullChainPath" "$Le_PreHook" "$Le_PostHook" "$Le_RenewHook"
|
||||
res=$?
|
||||
IS_RENEW=""
|
||||
|
||||
@ -2984,6 +3075,9 @@ Parameters:
|
||||
--nocron Only valid for '--install' command, which means: do not install the default cron job. In this case, the certs will not be renewed automatically.
|
||||
--ecc Specifies to use the ECC cert. Valid for '--installcert', '--renew', '--revoke', '--toPkcs' and '--createCSR'
|
||||
--csr Specifies the input csr.
|
||||
--pre-hook Command to be run before obtaining any certificates.
|
||||
--post-hook Command to be run after attempting to obtain/renew certificates. No matter the obain/renew is success or failed.
|
||||
--renew-hook Command to be run once for each successfully renewed certificate.
|
||||
"
|
||||
}
|
||||
|
||||
@ -3060,6 +3154,9 @@ _process() {
|
||||
_nocron=""
|
||||
_ecc=""
|
||||
_csr=""
|
||||
_pre_hook=""
|
||||
_post_hook=""
|
||||
_renew_hook=""
|
||||
while [ ${#} -gt 0 ] ; do
|
||||
case "${1}" in
|
||||
|
||||
@ -3321,6 +3418,18 @@ _process() {
|
||||
_csr="$2"
|
||||
shift
|
||||
;;
|
||||
--pre-hook)
|
||||
_pre_hook="$2"
|
||||
shift
|
||||
;;
|
||||
--post-hook)
|
||||
_post_hook="$2"
|
||||
shift
|
||||
;;
|
||||
--renew-hook)
|
||||
_renew_hook="$2"
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
_err "Unknown parameter : $1"
|
||||
return 1
|
||||
@ -3339,7 +3448,7 @@ _process() {
|
||||
uninstall) uninstall "$_nocron" ;;
|
||||
upgrade) upgrade ;;
|
||||
issue)
|
||||
issue "$_webroot" "$_domain" "$_altdomains" "$_keylength" "$_certpath" "$_keypath" "$_capath" "$_reloadcmd" "$_fullchainpath"
|
||||
issue "$_webroot" "$_domain" "$_altdomains" "$_keylength" "$_certpath" "$_keypath" "$_capath" "$_reloadcmd" "$_fullchainpath" "$_pre_hook" "$_post_hook" "$_renew_hook"
|
||||
;;
|
||||
signcsr)
|
||||
signcsr "$_csr" "$_webroot"
|
||||
|
Loading…
Reference in New Issue
Block a user