From 4ed4ea806a2686b2b1fbbec91a377778e856802f Mon Sep 17 00:00:00 2001 From: Ghassen Telmoudi Date: Thu, 13 Feb 2014 23:12:29 +0100 Subject: [PATCH] first commit --- nginx_modsite | 163 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 nginx_modsite diff --git a/nginx_modsite b/nginx_modsite new file mode 100644 index 0000000..d6b824e --- /dev/null +++ b/nginx_modsite @@ -0,0 +1,163 @@ +#!/bin/bash + +## +# File: +# nginx_modsite +# Description: +# Provides a basic script to automate enabling and disabling websites found +# in the default configuration directories: +# /etc/nginx/sites-available and /etc/nginx/sites-enabled +# For easy access to this script, copy it into the directory: +# /usr/local/sbin +# Run this script without any arguments or with -h or --help to see a basic +# help dialog displaying all options. +## + +# Copyright (C) 2010 Michael Lustfield + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. + +## +# Default Settings +## + +NGINX_CONF_FILE="$(awk -F= -v RS=' ' '/conf-path/ {print $2}' <<< $(nginx -V 2>&1))" +NGINX_CONF_DIR="${NGINX_CONF_FILE%/*}" +NGINX_SITES_AVAILABLE="$NGINX_CONF_DIR/sites-available" +NGINX_SITES_ENABLED="$NGINX_CONF_DIR/sites-enabled" +SELECTED_SITE="$2" + +## +# Script Functions +## + +ngx_enable_site() { + [[ ! "$SELECTED_SITE" ]] && + ngx_select_site "not_enabled" + + [[ ! -e "$NGINX_SITES_AVAILABLE/$SELECTED_SITE" ]] && + ngx_error "Site does not appear to exist." + [[ -e "$NGINX_SITES_ENABLED/$SELECTED_SITE" ]] && + ngx_error "Site appears to already be enabled" + + ln -sf "$NGINX_SITES_AVAILABLE/$SELECTED_SITE" -T "$NGINX_SITES_ENABLED/$SELECTED_SITE" + ngx_reload +} + +ngx_disable_site() { + [[ ! "$SELECTED_SITE" ]] && + ngx_select_site "is_enabled" + + [[ ! -e "$NGINX_SITES_AVAILABLE/$SELECTED_SITE" ]] && + ngx_error "Site does not appear to be \'available\'. - Not Removing" + [[ ! -e "$NGINX_SITES_ENABLED/$SELECTED_SITE" ]] && + ngx_error "Site does not appear to be enabled." + + rm -f "$NGINX_SITES_ENABLED/$SELECTED_SITE" + ngx_reload +} + +ngx_list_site() { + echo "Available sites:" + ngx_sites "available" + echo "Enabled Sites" + ngx_sites "enabled" +} + +## +# Helper Functions +## + +ngx_select_site() { + sites_avail=($NGINX_SITES_AVAILABLE/*) + sa="${sites_avail[@]##*/}" + sites_en=($NGINX_SITES_ENABLED/*) + se="${sites_en[@]##*/}" + + case "$1" in + not_enabled) sites=$(comm -13 <(printf "%s\n" $se) <(printf "%s\n" $sa));; + is_enabled) sites=$(comm -12 <(printf "%s\n" $se) <(printf "%s\n" $sa));; + esac + + ngx_prompt "$sites" +} + +ngx_prompt() { + sites=($1) + i=0 + + echo "SELECT A WEBSITE:" + for site in ${sites[@]}; do + echo -e "$i:\t${sites[$i]}" + ((i++)) + done + + read -p "Enter number for website: " i + SELECTED_SITE="${sites[$i]}" +} + +ngx_sites() { + case "$1" in + available) dir="$NGINX_SITES_AVAILABLE";; + enabled) dir="$NGINX_SITES_ENABLED";; + esac + + for file in $dir/*; do + echo -e "\t${file#*$dir/}" + done +} + +ngx_reload() { + read -p "Would you like to reload the Nginx configuration now? (Y/n) " reload + [[ "$reload" != "n" && "$reload" != "N" ]] && invoke-rc.d nginx reload +} + +ngx_error() { + echo -e "${0##*/}: ERROR: $1" + [[ "$2" ]] && ngx_help + exit 1 +} + +ngx_help() { + echo "Usage: ${0##*/} [options]" + echo "Options:" + echo -e "\t<-e|--enable> \tEnable site" + echo -e "\t<-d|--disable> \tDisable site" + echo -e "\t<-l|--list>\t\tList sites" + echo -e "\t<-h|--help>\t\tDisplay help" + echo -e "\n\tIf is left out a selection of options will be presented." + echo -e "\tIt is assumed you are using the default sites-enabled and" + echo -e "\tsites-disabled located at $NGINX_CONF_DIR." +} + +## +# Core Piece +## + +case "$1" in + -e|--enable) ngx_enable_site;; + -d|--disable) ngx_disable_site;; + -l|--list) ngx_list_site;; + -h|--help) ngx_help;; + *) ngx_error "No Options Selected" 1; ngx_help;; +esac +