Browse Source

Added auto-upgrade option on the command line

pull/4/head
srvrco 10 years ago
parent
commit
3a3e84aba5
1 changed files with 53 additions and 3 deletions
  1. +53
    -3
      checkssl

+ 53
- 3
checkssl View File

@ -26,11 +26,17 @@
# 2016-01-07 Added option to just provide domain name on command line (v0.6 srvrco)
# 2016-01-30 Updated after using shellcheck to maintain a better coding standard (0.7)
# 2016-01-31 Added check at start to ensure all required applications are installed (0.8)
# 2016-05-30 Added auto-upgrade option on the command line (1.00)
# ---------------------------------------------------------------------------
PROGNAME=${0##*/}
VERSION="0.8"
VERSION="1.00"
ORIGCMD="$0 $*"
UPDATE_LOCATION="https://raw.githubusercontent.com/srvrco/getssl/master/checkssl"
RENEW_ALERT="30" # set to number of days to be alerted for certificate renewal ( default, can be changed with -expires argument)
_QUIET=0
_UPGRADE=0
clean_up() { # Perform pre-exit housekeeping
rm -f LIST_OF_DOMAINS
@ -63,7 +69,7 @@ signal_exit() { # Handle trapped signals
usage() {
echo -e "Usage: $PROGNAME [-h|--help] [-d|--debug] [-f|--file filename] [-s|--server stype] [-l|--location directory]
[-e|--expires days] [-r:--renew] [-c:--command command] [domain]"
[-e|--expires days] [-r|--renew] [-u|--update] [-c|--command command] [domain]"
}
log() {
@ -105,6 +111,7 @@ help_message() {
Where 'days' is the number of days to alert if cert expires in that time period
-r, --renew this just lists domain names that need to be renewed.
This list could be used by an auto renew script, or to email you.
-u, --upgrade Upgrade checkssl if a more recent version is available
-c, --command run_command
Where 'run_command' is a command which will be run (with domain name passed)
for any certs due for renewal
@ -114,6 +121,46 @@ help_message() {
return
}
debug() {
if [[ "${_USE_DEBUG:-"0"}" -eq 1 ]]; then
echo "$@"
fi
}
info() {
if [ ${_QUIET} -eq 0 ]; then
echo "$@"
fi
}
check_upgrade () {
latestcode=$(curl --silent "$UPDATE_LOCATION")
latestversion=$(echo "$latestcode" | grep VERSION= | head -1| awk -F'"' '{print $2}')
latestvdec=$(echo "$latestversion"| tr -d '.')
localvdec=$(echo "$VERSION"| tr -d '.' )
debug "current code is version ${VERSION}"
debug "Most recent version is ${latestversion}"
# use a default of 0 for cases where the latest code has not been obtained.
if [ "${latestvdec:-0}" -gt "$localvdec" ]; then
if [ ${_UPGRADE} -eq 1 ]; then
temp_upgrade="$(mktemp)"
echo "$latestcode" > "$temp_upgrade"
install "$0" "${0}.v${VERSION}"
install "$temp_upgrade" "$0"
rm -f "$temp_upgrade"
info "Updated getssl from v${VERSION} to v${latestversion}"
eval "$ORIGCMD"
graceful_exit
else
info ""
info "A more recent version (v${latestversion}) of checkssl is available, please update"
info "the easiest way is to use the -u or --upgrade flag"
info ""
fi
fi
}
# Trap signals
trap "signal_exit TERM" TERM HUP
trap "signal_exit INT" INT
@ -139,6 +186,8 @@ while [[ -n $1 ]]; do
SERVERARG=true; shift; STYPE="$1" ;;
-l | --location)
LOCATIONARG=true; shift; LOC="$1" ;;
-u | --upgrade)
_UPGRADE=1 ;;
-* | --*)
usage
error_exit "Unknown option $1" ;;
@ -163,6 +212,7 @@ if [[ ! $FILEARG && ! $SERVERARG && ! $LOCATIONARG && ! $DOMAINARG ]]; then
graceful_exit
fi
check_upgrade
# create temporary file for the list of domains, and output
LIST_OF_DOMAINS=$(mktemp)
@ -181,7 +231,7 @@ fi
if [ $FILEARG ]; then
if [ -f "$FILE" ]; then
cat "$FILE" >> "$LIST_OF_DOMAINS"
debug "added $file $FILE to list of domains"
debug "added file $FILE to list of domains"
else
echo "$FILE not found"
graceful_exit


Loading…
Cancel
Save