From 21e2b063ee14b701c9f42d5d136080d109f2b8c8 Mon Sep 17 00:00:00 2001 From: hael Date: Thu, 2 Feb 2023 14:04:21 +0000 Subject: [PATCH] Remove and modify alternate locations --- scripts/nginx_config_create.sh | 80 ++++++++++++++++++++++++++++------ 1 file changed, 67 insertions(+), 13 deletions(-) diff --git a/scripts/nginx_config_create.sh b/scripts/nginx_config_create.sh index 841f064..a818a27 100755 --- a/scripts/nginx_config_create.sh +++ b/scripts/nginx_config_create.sh @@ -12,7 +12,7 @@ if [ -n "$2" ]; then fi DOMAIN_SOURCE=/domains/$DOMAIN -#DOMAIN_SOURCE=./domains/$DOMAIN +#DOMAIN_SOURCE=./domains/$DOMAIN #TEMP DOMAIN_NAME=$(jq -r .DOMAIN $DOMAIN_SOURCE) HTTP_PORT=$(jq -r .HTTP_PORT $DOMAIN_SOURCE) HTTPS_PORT=$(jq -r .HTTPS_PORT $DOMAIN_SOURCE) @@ -25,9 +25,19 @@ ERROR_PAGE=$(jq -r .ERROR_PAGE $DOMAIN_SOURCE) MAX_BODY_SIZE=$(jq -r .MAX_BODY_SIZE $DOMAIN_SOURCE) DEBUG=$(jq -r .DEBUG $DOMAIN_SOURCE) ALLOWED_NETWORK=$(jq -r '.ALLOWED_NETWORK | select(.!="null") | join(" ")' $DOMAIN_SOURCE) +OPERATION=$(jq -r '.OPERATION' $DOMAIN_SOURCE) ALTERNATE_LOCATION_PATH=$(jq -r .ALTERNATE_LOCATION_PATH $DOMAIN_SOURCE) add_alternate_location() { + { + cat $DOMAIN_NAME.conf | head -n -1 + add_location; + echo "}" + + } >> "$file" +} + +add_location() { if [[ "$ALTERNATE_LOCATION_PATH" != "" ]]; then @@ -43,6 +53,13 @@ add_alternate_location() { ALP_LOCAL_PORT=$(echo $ALP | jq -rc .LOCAL_PORT); ALP_LOCAL_ALLOWED_NETWORK=$(echo $ALP | jq -rc '.LOCAL_ALLOWED_NETWORK | select(.!="null") | join(" ")'); + # do not duplicate locations + EXISTS=$(grep -rn "location /$ALP_LOCAL_PATH {" -m 1 $DOMAIN_NAME.conf); + if [ -n "$EXISTS" ]; then + # skip if exists + continue; + fi; + if [[ "$ALP_LOCAL_NAME" = "" ]]; then ALP_LOCAL_NAME=$LOCAL_NAME fi; @@ -85,11 +102,47 @@ add_alternate_location() { echo " proxy_redirect off;" echo " proxy_buffering off;" echo "}" + echo "# location end" done; fi; } +remove_alternate_location() { + + if [[ "$ALTERNATE_LOCATION_PATH" != "" ]]; then + + ALP_IDX=$(jq -r '.ALTERNATE_LOCATION_PATH | length' $DOMAIN_SOURCE) + ALP_IDX=$(( $ALP_IDX - 1 )) + + for i in $(seq 0 $ALP_IDX) ; + do + ALP=$(jq -r .ALTERNATE_LOCATION_PATH[$i] $DOMAIN_SOURCE) + ALP_LOCAL_PATH=$(echo $ALP | jq -rc .LOCAL_PATH); + remove_location $ALP_LOCAL_PATH + done; + fi; +} + +remove_location() { + local LOCATION=$1 + + LOCATION_ROW="location /$LOCATION {"; + ROW_NUMBER=$(grep -rn "$LOCATION_ROW" $DOMAIN_NAME.conf | cut -d ':' -f1); + OFFSET=$(tail -n+$ROW_NUMBER $DOMAIN_NAME.conf | grep -n '# location end' -m 1 | cut -d ':' -f1); + START=$(($ROW_NUMBER - 1)); + END=$(($ROW_NUMBER + $OFFSET)); + + { + head -n$START $DOMAIN_NAME.conf + tail -n+$END $DOMAIN_NAME.conf + } >> $file + + mv $file $DOMAIN_NAME.conf; +} + + +file="/tmp/$DOMAIN.conf" # check whether certificates exist or not @@ -99,20 +152,20 @@ fi echo "created domain name: "$DOMAIN; -file="/tmp/$DOMAIN.conf" - #cp -a /scripts/nginx_template.conf /tmp/$DOMAIN.conf # if domain already exists as a config file append alternate location there if [ -f $DOMAIN_NAME.conf ]; then - - { - cat $DOMAIN_NAME.conf | head -n -1 + + if [ "$OPERATION" = "DELETE" ]; then + remove_alternate_location; + elif [ "$OPERATION" = "MODIFY" ]; then + remove_alternate_location; add_alternate_location; - echo "}" - - } >> "$file" - + else + # default CREATE, append location + add_alternate_location; + fi; else # create new nginx config @@ -295,8 +348,7 @@ echo " proxy_pass http://$LOCAL_NAME:$HTTPS_PORT;" echo " proxy_buffering off;" echo "}" - - add_alternate_location; + add_location; fi @@ -308,6 +360,8 @@ fi fi; # end of create new nginx config -mv $file $DOMAIN_NAME.conf; +if [ "$OPERATION" != "DELETE" ]; then + mv $file $DOMAIN_NAME.conf; +fi; echo "$DOMAIN" >> new_config