update-ngxblocker: add command line switches

* adds help menu & command line switches
* to view options run:

update-ngxblocker -h
This commit is contained in:
Stuart Cardall 2017-04-22 17:58:29 +00:00
parent 4f618fbb09
commit b9198769b4

View file

@ -28,10 +28,30 @@
# RUN THE UPDATE # RUN THE UPDATE
# Here our script runs, pulls the latest update, reloads nginx and emails you a notification # Here our script runs, pulls the latest update, reloads nginx and emails you a notification
email="me@myemail.com" EMAIL="me@myemail.com"
send_email="Y" SEND_EMAIL="Y"
conf_dir=/etc/nginx/conf.d CONF_DIR=/etc/nginx/conf.d
url=https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/conf.d/globalblacklist.conf
##### end user configuration ##############################################################
usage() {
local script=$(basename $0)
cat <<EOF
$script: update Nginx Bad Bot Blocker blacklist to: [ $CONF_DIR ]
Usage: $script [OPTIONS]
[ -c | --conf ] : NGINX conf directory (default: $CONF_DIR)
[ -r | --repo ] : Change repo url (default: $REPO)
[ -e | --email ] : Change email address (default: $EMAIL)
[ -n | --no-email ] : Do not send email report (default: $SEND_EMAIL)
[ -h | --help ] : this help message
Examples:
$script (Download blacklist.conf to: $CONF_DIR)
$script -c /my/custom/conf.d (Download blacklist.conf to a custom location)
EOF
return 0
}
service_cmd() { service_cmd() {
# arch linux does not have a 'service' command # arch linux does not have a 'service' command
@ -54,39 +74,72 @@ wget_opts() {
opts="-nv" opts="-nv"
fi fi
opts="$opts -O $conf_dir/globalblacklist.conf"
echo $opts echo $opts
} }
# require root
if [ "$(id -u)" != "0" ]; then
echo "This script must be run as root" 1>&2
exit 1
fi
# default to service (centos does not have 'which' by default) get_options() {
service=${service_cmd:-"service"} local options=$(getopt -o c:r:e:nh --long \
email_report=$(mktemp) bots:,conf:,repo:,email:,no-email,help,exec -- "$@" 2>/dev/null)
options=$(wget_opts)
# download update if [ $? -ne 0 ]; then
mkdir -p $conf_dir usage
wget $url $options 2>&1 | tee $email_report exit 1
fi
# re-read configuration eval set -- "$options"
if ! grep "Not Found" $email_report; then
$service nginx reload | tee -a $email_report
else
printf "\nDownload failed: not reloading nginx config\n" | tee -a $email_report
fi
# email report while :; do
case "$send_email" in case "$1" in
y*|Y*) cat $email_report | mail -s "Nginx Bad Bot Blocker Updated" $email;; -h | --help) usage && exit 1;;
esac -c | --conf) CONF_DIR=$2; shift 2;;
-r | --repo) REPO=$2; shift 2;;
-e | --email) EMAIL=$2; shift 2;;
-n | --no-email) SEND_EMAIL=N; shift 2;;
*) break;;
esac
done
}
rm -f $email_report main() {
local email_report=$(mktemp) file=globalblacklist.conf
local REPO=https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master
local remote_dir=conf.d url= output=
# default to service (centos does not have 'which' by default)
local service=${service_cmd:-"service"}
# require root
if [ "$(id -u)" != "0" ]; then
echo "This script must be run as root" 1>&2
exit 1
fi
# parse command line
get_options $@
url=$REPO/$remote_dir/$file
output=$CONF_DIR/$file
# download update
mkdir -p $CONF_DIR
wget $url $(wget_opts) -O $output 2>&1 | tee $email_report
# re-read configuration
if ! grep "Not Found" $email_report; then
$service nginx reload | tee -a $email_report
else
printf "\nDownload failed: not reloading nginx config\n" | tee -a $email_report
fi
# email report
case "$SEND_EMAIL" in
y*|Y*) printf "\nEmailing report to: $EMAIL\n";
cat $email_report | mail -s "Nginx Bad Bot Blocker Updated" $EMAIL;;
esac
rm -f $email_report
}
main $@
exit $? exit $?
# Add this as a cron to run daily / weekly as you like # Add this as a cron to run daily / weekly as you like