#!/bin/bash # @Auther skiqqy # This script is best run as root inside the root of this repo. # This script allows me to enable/disable certain sections of my website. # Available units units=( git blog wiki irc proj files all ) RED='\033[0;31m' NC='\033[0m' # Show the help menu help_menu () { echo "Welcome!" echo -e "e\t->\tEnable a unit." echo -e "d\t->\tDisable a unit." echo -e "u\t->\tSpecify the path to the units directory" echo -e "h\t->\tShows this message." } # Display an error message and exit. # error [message] [exit code] error () { printf "[${RED}ERROR${NC}] $1\n" exit $2 } # links available site to enabled. # link [unit] link () { [ ! -f /etc/nginx/sites-available/$1 ] && error "The unit <$1> file cannot be linked." 1 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 () { echo Enabling $1 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 () { echo Removing $1 rm -f /etc/nginx/sites-enabled/$1 } # Enable or disable all units. # all [ e | d ] all () { # Test and check valid args [ -z $1 ] && error "[ALL] Not given a flag." 1 ! [[ $1 == 'e' || $1 == 'd' ]] && error "[ALL] Not given a valid flag." 1 REMOVE=() ADD=() for u in "${units[@]}" do if [ $u != "all" ] then if [ $1 == 'e' ] then ADD+=("$u") REMOVE+=("d$u") else REMOVE+=("$u") ADD+=("d$u") fi fi done echo "Adding units ( ${ADD[@]} )" echo "Removing units ( ${REMOVE[@]} )" for u in "${ADD[@]}" do add $u done for u in "${REMOVE[@]}" do remove $u done } # Handle arguments and do basic error checking while getopts "he:d:u:" opt do case $opt in h) help_menu exit 0 ;; e | d) [ ! -z $unit ] && error "Unit <$unit> already set." 1 [[ $opt == "e" ]] && oper=e || oper=d unit="$OPTARG" ;; u) [ -d "$OPTARG" ] && unitsd="$OPTARG" || error "Not <$OPTARG> a valid directory." 1 ;; *) exit 2 ;; esac done # if not specified, then by default we enable everything [ -z $unit ] && unit="all" && oper="e" # Unit directory unitsd=${unitsd:="./units"} unitsd=$(echo $unitsd | sed 's:/*$::') # Remove trailing slash # Check that a valid unit was given. [[ ! " ${units[@]} " =~ " ${unit} " ]] && error "The unit <$unit> does not exist." 1 \ || 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 [ $oper == "e" ] && [ $unit != "all" ] && [[ ! -f "$unitsd/$unit" ]] && error "Cannot find unit file for <$unit>" 1 # Everything is valid, Perform tasks if [ $unit == "all" ] then all $oper elif [ $oper == 'e' ] then add $unit remove "d$unit" elif [ $oper == 'd' ] then add "d$unit" remove $unit echo Disabling $unit else error "No operation set." 1 fi # Finally we test the new configs, and restart nginx service nginx testconfig && systemctl restart nginx || error "nginx config test failed..." 1