#!/bin/sh

# Automatically renew Let's Encrypt certificates each week
#
# Add the following lines to /etc/periodic.conf:
#
# weekly_certbot_enable (bool):	Set to "NO" by default
# weekly_certbot_service (str):	If defined, certbot will try to shutdown this
#		service before renewing the certificate, and restart it afterwards.
#		For example, set to "nginx" or "apache24". This is usually used to avoid
#		conflict with the standalone plugin webserver.
#		If any of pre_hook or post_hook is set, this behavior is disabled.
# weekly_certbot_pre_hook (str):	Command to be run in a shell before obtaining
#		any certificates.
# weekly_certbot_post_hook (str):	Command to be run in a shell after
#		attempting to obtain/renew certificates.
#		An example to reload nginx after renewing all certificates.
#		weekly_certbot_post_hook="service nginx onereload"
# weekly_certbot_deploy_hook (str):	Command to be run in a shell once for each
#		successfully issued certificate.
# weekly_certbot_custom_args (str):	Any other misc arguments for the renewal
#		See certbot -h renew for full list
#		An example to force renewal for certificates not due yet
#		weekly_certbot_custom_args="--force-renewal"

# If there is a global system configuration file, suck it in.
#
if [ -r /etc/defaults/periodic.conf ]
then
    . /etc/defaults/periodic.conf
    source_periodic_confs
fi

case "$weekly_certbot_enable" in
    [Yy][Ee][Ss])
	echo
	echo "Renewing Let's Encrypt certificates:"

	PRE_HOOK=""
	POST_HOOK=""
	DEPLOY_HOOK=""

	if [ -n "$weekly_certbot_service" ] && \
		[ -z "$weekly_certbot_pre_hook" ] && [ -z "$weekly_certbot_post_hook" ];
	then
		if service "$weekly_certbot_service" onestatus
		then
			PRE_HOOK="--pre-hook 'service $weekly_certbot_service onestop'"
			POST_HOOK="--post-hook 'service $weekly_certbot_service onestart'"
		fi
	else
		if [ -n "$weekly_certbot_pre_hook" ]; then
			PRE_HOOK="--pre-hook '$weekly_certbot_pre_hook'"
		fi

		if [ -n "$weekly_certbot_post_hook" ]; then
			POST_HOOK="--post-hook '$weekly_certbot_post_hook'"
		fi
	fi

	if [ -n "$weekly_certbot_deploy_hook" ]; then
		DEPLOY_HOOK="--deploy-hook '$weekly_certbot_deploy_hook'"
	fi

	anticongestion

	eval %%LOCALBASE%%/bin/certbot-%%PYTHON_VER%% renew "$PRE_HOOK" "$POST_HOOK" \
		"$DEPLOY_HOOK" "$weekly_certbot_custom_args" --no-random-sleep-on-renew
	if [ $? -gt 0 ]
	then
	    echo
	    echo "Errors were reported when renewing Let's Encrypt certificate(s)."
	    rc=3
	else
	    rc=0
	fi
	;;
    *)  rc=0;;
esac

exit $rc
