skiqqy.xyz/nginxd

143 lines
3.1 KiB
Plaintext
Raw Normal View History

2020-10-14 21:28:25 +00:00
#!/bin/bash
# @Auther skiqqy
2020-10-14 21:47:47 +00:00
# This script is best run as root inside the root of this repo.
2020-10-14 21:28:25 +00:00
# This script allows me to enable/disable certain sections of my website.
2020-10-15 08:12:49 +00:00
# Available units
2020-10-17 21:49:58 +00:00
units=( git blog wiki irc proj files all )
2020-10-15 09:40:30 +00:00
RED='\033[0;31m'
NC='\033[0m'
2020-10-15 08:12:49 +00:00
2020-10-15 18:08:36 +00:00
# Show the help menu
2020-10-14 21:28:25 +00:00
help_menu () {
echo "Welcome!"
echo -e "e\t->\tEnable a unit."
echo -e "d\t->\tDisable a unit."
2020-10-14 21:54:48 +00:00
echo -e "u\t->\tSpecify the path to the units directory"
2020-10-14 21:28:25 +00:00
echo -e "h\t->\tShows this message."
}
2020-10-15 08:31:59 +00:00
# Display an error message and exit.
# error [message] [exit code]
2020-10-14 21:28:25 +00:00
error () {
2020-10-15 09:40:30 +00:00
printf "[${RED}ERROR${NC}] $1\n"
2020-10-14 21:28:25 +00:00
exit $2
}
2020-10-15 08:31:59 +00:00
# links available site to enabled.
# link [unit]
2020-10-14 21:47:47 +00:00
link () {
2020-10-15 08:12:49 +00:00
[ ! -f /etc/nginx/sites-available/$1 ] && error "The unit <$1> file cannot be linked." 1
2020-10-14 21:47:47 +00:00
ln -s /etc/nginx/sites-available/$1 /etc/nginx/sites-enabled/$1
}
# Adds a unit so that nginx can use it, also sets up sym links.
# add [unit]
add () {
2020-10-15 17:57:57 +00:00
echo Enabling $1
2020-10-15 17:44:30 +00:00
cp $unitsd/$1 /etc/nginx/sites-available
link $1
}
# Remove a unit so that nginx does not use it anymore, also sets up sym links.
# remove [unit]
remove () {
2020-10-15 17:57:57 +00:00
echo Removing $1
2020-10-15 17:48:06 +00:00
rm -f /etc/nginx/sites-enabled/$1
}
# Enable or disable all units.
2020-10-15 08:58:07 +00:00
# all [ e | d ]
2020-10-15 08:12:49 +00:00
all () {
# Test and check valid args
2020-10-15 08:58:07 +00:00
[ -z $1 ] && error "[ALL] Not given a flag." 1
! [[ $1 == 'e' || $1 == 'd' ]] && error "[ALL] Not given a valid flag." 1
2020-10-15 08:12:49 +00:00
REMOVE=()
ADD=()
2020-10-15 08:49:56 +00:00
for u in "${units[@]}"
do
if [ $u != "all" ]
then
if [ $1 == 'e' ]
2020-10-15 08:31:59 +00:00
then
ADD+=("$u")
REMOVE+=("d$u")
2020-10-15 08:49:56 +00:00
else
2020-10-15 08:31:59 +00:00
REMOVE+=("$u")
ADD+=("d$u")
fi
2020-10-15 08:49:56 +00:00
fi
done
2020-10-15 08:31:59 +00:00
echo "Adding units ( ${ADD[@]} )"
echo "Removing units ( ${REMOVE[@]} )"
2020-10-15 08:49:56 +00:00
for u in "${ADD[@]}"
do
add $u
done
for u in "${REMOVE[@]}"
do
remove $u
done
2020-10-15 08:12:49 +00:00
}
2020-10-14 22:00:43 +00:00
# Handle arguments and do basic error checking
2020-10-14 21:54:48 +00:00
while getopts "he:d:u:" opt
2020-10-14 21:28:25 +00:00
do
case $opt in
h)
help_menu
2020-10-14 22:00:43 +00:00
exit 0
2020-10-14 21:28:25 +00:00
;;
e | d)
2020-10-14 21:47:47 +00:00
[ ! -z $unit ] && error "Unit <$unit> already set." 1
2020-10-14 21:28:25 +00:00
[[ $opt == "e" ]] && oper=e || oper=d
unit="$OPTARG"
;;
2020-10-14 21:54:48 +00:00
u)
2020-10-15 08:12:49 +00:00
[ -d "$OPTARG" ] && unitsd="$OPTARG" || error "Not <$OPTARG> a valid directory." 1
2020-10-14 21:54:48 +00:00
;;
2020-10-14 21:28:25 +00:00
*)
exit 2
;;
esac
done
2020-10-14 22:00:43 +00:00
# if not specified, then by default we enable everything
[ -z $unit ] && unit="all" && oper="e"
2020-10-15 08:12:49 +00:00
# Unit directory
2020-10-14 22:11:44 +00:00
unitsd=${unitsd:="./units"}
2020-10-15 07:53:19 +00:00
unitsd=$(echo $unitsd | sed 's:/*$::') # Remove trailing slash
2020-10-14 21:47:47 +00:00
# Check that a valid unit was given.
[[ ! " ${units[@]} " =~ " ${unit} " ]] && error "The unit <$unit> does not exist." 1 \
2020-10-15 07:44:10 +00:00
|| echo "Unit <$unit> is supported!"
# Check if we are disabeling, that we have a replacement unit
[ $oper == "d" ] && [ $unit != "all" ] && [[ ! -f "$unitsd/d$unit" ]] && error "Cannot find replacement unit for <$unit>." 1
2020-10-15 07:45:26 +00:00
[ $oper == "e" ] && [ $unit != "all" ] && [[ ! -f "$unitsd/$unit" ]] && error "Cannot find unit file for <$unit>" 1
2020-10-14 22:11:44 +00:00
# Everything is valid, Perform tasks
if [ $unit == "all" ]
2020-10-15 08:31:59 +00:00
then
all $oper
elif [ $oper == 'e' ]
2020-10-15 08:12:49 +00:00
then
add $unit
remove "d$unit"
2020-10-15 08:12:49 +00:00
elif [ $oper == 'd' ]
2020-10-30 11:28:41 +00:00
then
add "d$unit"
remove $unit
2020-10-15 08:12:49 +00:00
echo Disabling $unit
else
error "No operation set." 1
fi
2020-10-15 17:57:57 +00:00
# Finally we test the new configs, and restart nginx
service nginx testconfig && systemctl restart nginx || error "nginx config test failed..." 1