From 59714b628f4242bc2f18b48c453821e308f52173 Mon Sep 17 00:00:00 2001 From: Jason Jones Date: Fri, 18 Oct 2024 09:15:33 -0400 Subject: [PATCH 1/9] update: add hop proxy command --- bin/_helpers | 73 +++++++++++++++++ bin/hop | 76 +++--------------- bin/proxy | 222 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 304 insertions(+), 67 deletions(-) create mode 100644 bin/_helpers create mode 100755 bin/proxy diff --git a/bin/_helpers b/bin/_helpers new file mode 100644 index 0000000..a0135c9 --- /dev/null +++ b/bin/_helpers @@ -0,0 +1,73 @@ +#!/usr/bin/env bash + +# +# Script Output +# + +# Determine width of the program +ACTUAL_WIDTH=$(($(tput cols) - 2)) +MAX_WIDTH=100 + +if test "$ACTUAL_WIDTH" -gt "$MAX_WIDTH"; then + WIDTH=$MAX_WIDTH +else + WIDTH=$ACTUAL_WIDTH +fi + +# Setup Color Outputs +if test -t 1; then + ncolors=$(tput colors) + + if test -n "$ncolors" && test "$ncolors" -ge 8; then + COLOR_R=1 # color code - RED + COLOR_G=2 # color code - GREEN + COLOR_Y=3 # color code - YELLOW + COLOR_B=4 # color code - BLUE + COLOR_M=5 # color code - MAGENTA + COLOR_C=6 # color code - CYAN + COLOR_N=246 # color code - NEUTRAL (GRAY) + + BG_R="$(tput setab $COLOR_R)" # Background - RED + BG_G="$(tput setab $COLOR_G)" # Background - GREEN + BG_Y="$(tput setab $COLOR_Y)" # Background - YELLOW + BG_B="$(tput setab $COLOR_B)" # Background - BLUE + #BG_M="$(tput setab $COLOR_M)" # Background - MAGENTA + #BG_C="$(tput setab $COLOR_C)" # Background - CYAN + #BG_N="$(tput setab $COLOR_N)" # Background - NEUTRAL (GRAY) + + #FG_R="$(tput setaf $COLOR_R)" # Foreground - RED + #FG_G="$(tput setaf $COLOR_G)" # Foreground - GREEN + #FG_Y="$(tput setaf $COLOR_Y)" # Foreground - YELLOW + #FG_B="$(tput setaf $COLOR_B)" # Foreground - BLUE + FG_M="$(tput setaf $COLOR_M)" # Foreground - MAGENTA + FG_C="$(tput setaf $COLOR_C)" # Foreground - CYAN + FG_N="$(tput setaf $COLOR_N)" # Foreground - NEUTRAL (GRAY) + + BOLD="$(tput bold)" + RESET="$(tput sgr0)" + fi +fi + +function join { + local IFS="$1" + shift + echo "$*" +} + +function tag { + local STYLE=$1 + local LABEL=$2 + shift 2 + + echo "$@" "${STYLE} ${LABEL} ${RESET} " +} + +function output_error { + tag "$BG_R" "ERROR" -n + echo "$1" +} + +function output_info { + tag "$BG_B" "INFO" -n + echo "$1" +} \ No newline at end of file diff --git a/bin/hop b/bin/hop index 2701bdd..4d9e59d 100755 --- a/bin/hop +++ b/bin/hop @@ -1,61 +1,9 @@ #!/usr/bin/env bash -HOP_PATH=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) +HOP_PATH=$(cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd) TOOLKIT_PATH=$(dirname "$HOP_PATH") -# -# Script Output -# - -# Determine width of the program -ACTUAL_WIDTH=$(($(tput cols) - 2)) -MAX_WIDTH=100 - -if test "$ACTUAL_WIDTH" -gt "$MAX_WIDTH"; then - WIDTH=$MAX_WIDTH -else - WIDTH=$ACTUAL_WIDTH -fi - -# Setup Color Outputs -if test -t 1; then - ncolors=$(tput colors) - - if test -n "$ncolors" && test "$ncolors" -ge 8; then - COLOR_R=1 # color code - RED - COLOR_G=2 # color code - GREEN - COLOR_Y=3 # color code - YELLOW - COLOR_B=4 # color code - BLUE - COLOR_M=5 # color code - MAGENTA - COLOR_C=6 # color code - CYAN - COLOR_N=246 # color code - NEUTRAL (GRAY) - - BG_R="$(tput setab $COLOR_R)" # Background - RED - BG_G="$(tput setab $COLOR_G)" # Background - GREEN - BG_Y="$(tput setab $COLOR_Y)" # Background - YELLOW - BG_B="$(tput setab $COLOR_B)" # Background - BLUE - #BG_M="$(tput setab $COLOR_M)" # Background - MAGENTA - #BG_C="$(tput setab $COLOR_C)" # Background - CYAN - #BG_N="$(tput setab $COLOR_N)" # Background - NEUTRAL (GRAY) - - #FG_R="$(tput setaf $COLOR_R)" # Foreground - RED - #FG_G="$(tput setaf $COLOR_G)" # Foreground - GREEN - #FG_Y="$(tput setaf $COLOR_Y)" # Foreground - YELLOW - #FG_B="$(tput setaf $COLOR_B)" # Foreground - BLUE - FG_M="$(tput setaf $COLOR_M)" # Foreground - MAGENTA - FG_C="$(tput setaf $COLOR_C)" # Foreground - CYAN - FG_N="$(tput setaf $COLOR_N)" # Foreground - NEUTRAL (GRAY) - - BOLD="$(tput bold)" - RESET="$(tput sgr0)" - fi -fi - -function join { - local IFS="$1" - shift - echo "$*" -} +source "$TOOLKIT_PATH/bin/_helpers" function describe_command { local COMMAND_NAME=$1 @@ -79,19 +27,6 @@ function describe_command { join " " "${SEGMENTS[@]}" "${RESET}" } -function tag { - local STYLE=$1 - local LABEL=$2 - shift 2 - - echo "$@" "${STYLE} ${LABEL} ${RESET} " -} - -function output_error { - tag "$BG_R" "ERROR" -n - echo "$1" -} - EXPLAIN_COUNT=0 function explain { EXPLAIN_COUNT=$((EXPLAIN_COUNT + 1)) @@ -159,6 +94,9 @@ function display_help { describe_command "seed" "hop artisan db:seed" describe_command "test" "hop artisan test" describe_command "tinker" "hop artisan tinker" + echo + tag "$BG_Y$BOLD" "Commands" + describe_command "proxy" "\$@" "Start a proxy for this project." } if [ $# -lt 1 ] || [ "$1" == "help" ] || [ "$1" == "-h" ] || [ "$1" == "-help" ] || [ "$1" == "--help" ]; then @@ -411,6 +349,10 @@ case $1 in shift 1 run_exec_command php vendor/bin/pint ;; + "proxy") + shift 1 + bash "$TOOLKIT_PATH/bin/proxy" "$@" + ;; "ps"|"status") shift 1 run_command ps "$@" diff --git a/bin/proxy b/bin/proxy new file mode 100755 index 0000000..24179f4 --- /dev/null +++ b/bin/proxy @@ -0,0 +1,222 @@ +#!/usr/bin/env bash + +HOP_PATH=$(cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd) +TOOLKIT_PATH=$(dirname "$HOP_PATH") + +LOCAL_DOMAIN= +LOCAL_PORT= +PROXY_DOMAIN= +PROXY_PORT= + +PORT_GEN_MAX=65535 +PORT_GEN_MIN=10002 + +source "$TOOLKIT_PATH/bin/_helpers" + +function describe { + local COMMAND_NAME=$1 + local ARGS_LIST=${*:2:(($# - 2))} + local DESCRIPTION=${!#} + local CONTENT_LENGTH=$((${#COMMAND_NAME} + ${#ARGS_LIST} + ${#DESCRIPTION})) + + local SEGMENTS=() + SEGMENTS+=("${FG_C}${COMMAND_NAME}") + + if test $# -gt 2; then + SEGMENTS+=("${FG_M}${ARGS_LIST}") + fi + + local DOT_COUNT=$((WIDTH - CONTENT_LENGTH - ${#SEGMENTS[@]} - 3 - 1)) # 3 for "hop", 1 for additional space for last segment + local DOTS + DOTS=$(printf '%*s' "$DOT_COUNT" "" | tr ' ' '.') + SEGMENTS+=("${FG_N}${DOTS}") + SEGMENTS+=("${FG_N}${DESCRIPTION}") + + join " " "${SEGMENTS[@]}" "${RESET}" +} + +function display_help() { + tag "$BG_G$BOLD" "Sourcetoad Proxy" + echo "A script that makes it easy to proxy your projects via hop." + echo + tag "$BG_Y$BOLD" "Options" + describe "-h, --help" "Display this help message." + describe "--local-domain" "Overrides the automatically determined local domain." + describe "--local-port" "Overrides the default local port of 80." + describe "--proxy-port" "Specify the port to use for the proxy. Required." + describe "--proxy-domain" "The subdomain to use for the proxy." +} + +function parse_arg() { + local key=$1 + local value=$2 + + if [ "$2" ]; then + echo "$2" + else + output_error "'${key}' requires a non-empty argument." + exit 1 + fi +} + +while :; do + option=${1%%=*} + parsed_value= + + case $1 in + -h|--help) + display_help + exit + ;; + --local-domain|--local-port|--proxy-port|--proxy-domain) + parsed_value=$(parse_arg $@) + ;; + --local-domain=?*|--local-port=?*|--proxy-port=?*|--proxy-domain=?*) + parsed_value=$(parse_arg ${1%%=*} ${1#*=}) + ;; + --local-domain=|--local-port=|--proxy-port=|--proxy-domain=) + parsed_value=$(parse_arg ${1%%=*}) + ;; + *) + ;; + esac + + if [ $? -ne 0 ]; then + echo $parsed_value + exit 1 + fi + + case $option in + --local-domain) + LOCAL_DOMAIN=$parsed_value + ;; + --local-port) + LOCAL_PORT=$parsed_value + ;; + --proxy-domain) + PROXY_DOMAIN=$parsed_value + ;; + --proxy-port) + PROXY_PORT=$parsed_value + ;; + *) + break + ;; + esac + + shift +done + +function locate_docker_file { + local POTENTIAL_FILES=("docker/docker-compose.yml" "docker-compose.yml") + for file in "${POTENTIAL_FILES[@]}"; do + if [ -f "$file" ]; then + echo "$file" + return + fi + done +} +DOCKER_FILE=$(locate_docker_file) + +function locate_docker_file_override { + local POTENTIAL_FILES=("docker/docker-compose.override.yml" "docker-compose.override.yml") + for file in "${POTENTIAL_FILES[@]}"; do + if [ -f "$file" ]; then + echo "$file" + return + fi + done +} +DOCKER_FILE_OVERRIDE=$(locate_docker_file_override) + +function pick_one_virtual_host_from_file() { + local FILE=$1 + local EXCEPT=$2 + + local HOST_STRING=$(sed -nr 's/.*VIRTUAL_HOST=(.*)/\1/p' $FILE) + local HOSTS + local HOST + + IFS="," read -ra HOSTS <<< "$HOST_STRING" + + for HOST_ENTRY in "${HOSTS[@]}"; do + if [ "$HOST_ENTRY" != "$EXCEPT" ]; then + echo $HOST_ENTRY + break; + fi + done + + if [ -z "HOST" ]; then + output_error "No VIRTUAL_HOST found in $FILE." + exit 1 + fi +} + +function determine_virtual_host() { + if [ -z "$DOCKER_FILE" ]; then + output_error "No docker-compose file found." + exit 1 + fi + + local HOST=$(pick_one_virtual_host_from_file $DOCKER_FILE) + + if [ $? -ne 0 ]; then + echo $HOST + exit 1 + fi + + echo $HOST +} + +function determine_virtual_host_override() { + if [ -z $1 ]; then + output_error "No local host provided." + exit 1 + fi + + if [ -z "$DOCKER_FILE_OVERRIDE" ]; then + output_error "No docker-compose override file found. It is recommended that you create a docker-compose.override.yml file with an override for your VIRTUAL_HOST environment variable." + exit 1 + fi + + local HOST=$(pick_one_virtual_host_from_file $DOCKER_FILE_OVERRIDE $1) + + if [ $? -ne 0 ]; then + echo $HOST + exit 1 + fi + + echo $HOST +} + +if [ -z "$LOCAL_DOMAIN" ]; then + LOCAL_DOMAIN=$(determine_virtual_host) + + if [ $? -ne 0 ]; then + echo $LOCAL_DOMAIN + exit 1 + fi +fi + +if [ -z "$LOCAL_PORT" ]; then + LOCAL_PORT=80 +fi + +if [ -z "$PROXY_DOMAIN" ]; then + PROXY_DOMAIN=$(determine_virtual_host_override $LOCAL_DOMAIN) + + if [ $? -ne 0 ]; then + echo $PROXY_DOMAIN + exit 1 + fi +fi + +if [ -z "$PROXY_PORT" ]; then + PROXY_PORT=$(($RANDOM%(PORT_GEN_MIN-PORT_GEN_MAX+1)+PORT_GEN_MIN)) + output_info "No proxy port specified. Using random port: ${PROXY_PORT}" +fi + +echo +output_info "Starting proxy... $FG_C${LOCAL_DOMAIN}$FG_N:$FG_M${LOCAL_PORT}$RESET -> $FG_C${PROXY_DOMAIN}$FG_N:$FG_M${PROXY_PORT}$RESET" +echo +ssh -tR ${PROXY_PORT}:${LOCAL_DOMAIN}:${LOCAL_PORT} proxy@local.sourcetoadtest.com sirtunnel.py ${PROXY_DOMAIN} ${PROXY_PORT} From a263b18c04db799c6cdeddfbf46b7904b3469a22 Mon Sep 17 00:00:00 2001 From: Jason Jones Date: Fri, 18 Oct 2024 09:25:49 -0400 Subject: [PATCH 2/9] update: output a proxy URL link --- bin/_helpers | 13 ++++++++----- bin/proxy | 2 ++ 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/bin/_helpers b/bin/_helpers index a0135c9..61a1e74 100644 --- a/bin/_helpers +++ b/bin/_helpers @@ -33,7 +33,7 @@ if test -t 1; then BG_B="$(tput setab $COLOR_B)" # Background - BLUE #BG_M="$(tput setab $COLOR_M)" # Background - MAGENTA #BG_C="$(tput setab $COLOR_C)" # Background - CYAN - #BG_N="$(tput setab $COLOR_N)" # Background - NEUTRAL (GRAY) + BG_N="$(tput setab $COLOR_N)" # Background - NEUTRAL (GRAY) #FG_R="$(tput setaf $COLOR_R)" # Foreground - RED #FG_G="$(tput setaf $COLOR_G)" # Foreground - GREEN @@ -62,12 +62,15 @@ function tag { echo "$@" "${STYLE} ${LABEL} ${RESET} " } +function output_tagged_string() { + tag "$1" "$2" -n + echo $3 +} + function output_error { - tag "$BG_R" "ERROR" -n - echo "$1" + output_tagged_string "$BG_R" "ERROR" "$1" } function output_info { - tag "$BG_B" "INFO" -n - echo "$1" + output_tagged_string "$BG_B" "INFO" "$1" } \ No newline at end of file diff --git a/bin/proxy b/bin/proxy index 24179f4..887c077 100755 --- a/bin/proxy +++ b/bin/proxy @@ -219,4 +219,6 @@ fi echo output_info "Starting proxy... $FG_C${LOCAL_DOMAIN}$FG_N:$FG_M${LOCAL_PORT}$RESET -> $FG_C${PROXY_DOMAIN}$FG_N:$FG_M${PROXY_PORT}$RESET" echo +output_tagged_string "$BG_N" "Proxy URL" "https://$PROXY_DOMAIN" +echo ssh -tR ${PROXY_PORT}:${LOCAL_DOMAIN}:${LOCAL_PORT} proxy@local.sourcetoadtest.com sirtunnel.py ${PROXY_DOMAIN} ${PROXY_PORT} From fb94815bcbbef0dfb5213696e39bc52bcb62b1dd Mon Sep 17 00:00:00 2001 From: Jason Jones Date: Fri, 18 Oct 2024 09:46:20 -0400 Subject: [PATCH 3/9] fix: option entry not shifting past value --- bin/_helpers | 2 +- bin/proxy | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/bin/_helpers b/bin/_helpers index 61a1e74..91368a2 100644 --- a/bin/_helpers +++ b/bin/_helpers @@ -73,4 +73,4 @@ function output_error { function output_info { output_tagged_string "$BG_B" "INFO" "$1" -} \ No newline at end of file +} diff --git a/bin/proxy b/bin/proxy index 887c077..0e62de1 100755 --- a/bin/proxy +++ b/bin/proxy @@ -69,7 +69,7 @@ while :; do exit ;; --local-domain|--local-port|--proxy-port|--proxy-domain) - parsed_value=$(parse_arg $@) + parsed_value=$(parse_arg "$@") ;; --local-domain=?*|--local-port=?*|--proxy-port=?*|--proxy-domain=?*) parsed_value=$(parse_arg ${1%%=*} ${1#*=}) @@ -104,6 +104,9 @@ while :; do ;; esac + if [ $1 == $option ]; then + shift + fi shift done @@ -146,7 +149,7 @@ function pick_one_virtual_host_from_file() { fi done - if [ -z "HOST" ]; then + if [ -z "$HOST" ]; then output_error "No VIRTUAL_HOST found in $FILE." exit 1 fi @@ -221,4 +224,4 @@ output_info "Starting proxy... $FG_C${LOCAL_DOMAIN}$FG_N:$FG_M${LOCAL_PORT}$RESE echo output_tagged_string "$BG_N" "Proxy URL" "https://$PROXY_DOMAIN" echo -ssh -tR ${PROXY_PORT}:${LOCAL_DOMAIN}:${LOCAL_PORT} proxy@local.sourcetoadtest.com sirtunnel.py ${PROXY_DOMAIN} ${PROXY_PORT} +#ssh -tR ${PROXY_PORT}:${LOCAL_DOMAIN}:${LOCAL_PORT} proxy@local.sourcetoadtest.com sirtunnel.py ${PROXY_DOMAIN} ${PROXY_PORT} From a58228c2215ab8f9ab8b5bb15c1d66b47e427329 Mon Sep 17 00:00:00 2001 From: Jason Jones Date: Fri, 18 Oct 2024 09:47:35 -0400 Subject: [PATCH 4/9] fix: uncomment actual proxy command --- bin/proxy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/proxy b/bin/proxy index 0e62de1..6931e56 100755 --- a/bin/proxy +++ b/bin/proxy @@ -224,4 +224,4 @@ output_info "Starting proxy... $FG_C${LOCAL_DOMAIN}$FG_N:$FG_M${LOCAL_PORT}$RESE echo output_tagged_string "$BG_N" "Proxy URL" "https://$PROXY_DOMAIN" echo -#ssh -tR ${PROXY_PORT}:${LOCAL_DOMAIN}:${LOCAL_PORT} proxy@local.sourcetoadtest.com sirtunnel.py ${PROXY_DOMAIN} ${PROXY_PORT} +ssh -tR ${PROXY_PORT}:${LOCAL_DOMAIN}:${LOCAL_PORT} proxy@local.sourcetoadtest.com sirtunnel.py ${PROXY_DOMAIN} ${PROXY_PORT} From 642fbe87ee1200a291c4d761254659209a063f0d Mon Sep 17 00:00:00 2001 From: Jason Jones Date: Fri, 18 Oct 2024 09:56:36 -0400 Subject: [PATCH 5/9] style: fix some lint issues --- bin/_helpers | 32 ++++++++++++++++---------------- bin/proxy | 20 +++++++++++++------- 2 files changed, 29 insertions(+), 23 deletions(-) diff --git a/bin/_helpers b/bin/_helpers index 91368a2..551160c 100644 --- a/bin/_helpers +++ b/bin/_helpers @@ -27,24 +27,24 @@ if test -t 1; then COLOR_C=6 # color code - CYAN COLOR_N=246 # color code - NEUTRAL (GRAY) - BG_R="$(tput setab $COLOR_R)" # Background - RED - BG_G="$(tput setab $COLOR_G)" # Background - GREEN - BG_Y="$(tput setab $COLOR_Y)" # Background - YELLOW - BG_B="$(tput setab $COLOR_B)" # Background - BLUE - #BG_M="$(tput setab $COLOR_M)" # Background - MAGENTA - #BG_C="$(tput setab $COLOR_C)" # Background - CYAN - BG_N="$(tput setab $COLOR_N)" # Background - NEUTRAL (GRAY) + export BG_R="$(tput setab $COLOR_R)" # Background - RED + export BG_G="$(tput setab $COLOR_G)" # Background - GREEN + export BG_Y="$(tput setab $COLOR_Y)" # Background - YELLOW + export BG_B="$(tput setab $COLOR_B)" # Background - BLUE + export BG_M="$(tput setab $COLOR_M)" # Background - MAGENTA + export BG_C="$(tput setab $COLOR_C)" # Background - CYAN + export BG_N="$(tput setab $COLOR_N)" # Background - NEUTRAL (GRAY) - #FG_R="$(tput setaf $COLOR_R)" # Foreground - RED - #FG_G="$(tput setaf $COLOR_G)" # Foreground - GREEN - #FG_Y="$(tput setaf $COLOR_Y)" # Foreground - YELLOW - #FG_B="$(tput setaf $COLOR_B)" # Foreground - BLUE - FG_M="$(tput setaf $COLOR_M)" # Foreground - MAGENTA - FG_C="$(tput setaf $COLOR_C)" # Foreground - CYAN - FG_N="$(tput setaf $COLOR_N)" # Foreground - NEUTRAL (GRAY) + export FG_R="$(tput setaf $COLOR_R)" # Foreground - RED + export FG_G="$(tput setaf $COLOR_G)" # Foreground - GREEN + export FG_Y="$(tput setaf $COLOR_Y)" # Foreground - YELLOW + export FG_B="$(tput setaf $COLOR_B)" # Foreground - BLUE + export FG_M="$(tput setaf $COLOR_M)" # Foreground - MAGENTA + export FG_C="$(tput setaf $COLOR_C)" # Foreground - CYAN + export FG_N="$(tput setaf $COLOR_N)" # Foreground - NEUTRAL (GRAY) - BOLD="$(tput bold)" - RESET="$(tput sgr0)" + export BOLD="$(tput bold)" + export RESET="$(tput sgr0)" fi fi diff --git a/bin/proxy b/bin/proxy index 6931e56..1760a9d 100755 --- a/bin/proxy +++ b/bin/proxy @@ -51,8 +51,8 @@ function parse_arg() { local key=$1 local value=$2 - if [ "$2" ]; then - echo "$2" + if [ "$value" ]; then + echo "$value" else output_error "'${key}' requires a non-empty argument." exit 1 @@ -136,15 +136,17 @@ function pick_one_virtual_host_from_file() { local FILE=$1 local EXCEPT=$2 - local HOST_STRING=$(sed -nr 's/.*VIRTUAL_HOST=(.*)/\1/p' $FILE) + local HOST_STRING local HOSTS local HOST + HOST_STRING=$(sed -nr 's/.*VIRTUAL_HOST=(.*)/\1/p' $FILE) + IFS="," read -ra HOSTS <<< "$HOST_STRING" for HOST_ENTRY in "${HOSTS[@]}"; do if [ "$HOST_ENTRY" != "$EXCEPT" ]; then - echo $HOST_ENTRY + HOST=$HOST_ENTRY break; fi done @@ -153,6 +155,8 @@ function pick_one_virtual_host_from_file() { output_error "No VIRTUAL_HOST found in $FILE." exit 1 fi + + echo $HOST } function determine_virtual_host() { @@ -161,7 +165,8 @@ function determine_virtual_host() { exit 1 fi - local HOST=$(pick_one_virtual_host_from_file $DOCKER_FILE) + local HOST + HOST=$(pick_one_virtual_host_from_file $DOCKER_FILE) if [ $? -ne 0 ]; then echo $HOST @@ -182,7 +187,8 @@ function determine_virtual_host_override() { exit 1 fi - local HOST=$(pick_one_virtual_host_from_file $DOCKER_FILE_OVERRIDE $1) + local HOST + HOST=$(pick_one_virtual_host_from_file $DOCKER_FILE_OVERRIDE $1) if [ $? -ne 0 ]; then echo $HOST @@ -224,4 +230,4 @@ output_info "Starting proxy... $FG_C${LOCAL_DOMAIN}$FG_N:$FG_M${LOCAL_PORT}$RESE echo output_tagged_string "$BG_N" "Proxy URL" "https://$PROXY_DOMAIN" echo -ssh -tR ${PROXY_PORT}:${LOCAL_DOMAIN}:${LOCAL_PORT} proxy@local.sourcetoadtest.com sirtunnel.py ${PROXY_DOMAIN} ${PROXY_PORT} +ssh -tR "${PROXY_PORT}:${LOCAL_DOMAIN}:${LOCAL_PORT}" proxy@local.sourcetoadtest.com sirtunnel.py "${PROXY_DOMAIN}" "${PROXY_PORT}" From 6c65ee39804e1a05b399a2ec493d75025bf9c944 Mon Sep 17 00:00:00 2001 From: Jason Jones Date: Fri, 18 Oct 2024 10:00:59 -0400 Subject: [PATCH 6/9] style: fix more lint issues --- bin/_helpers | 76 +++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 58 insertions(+), 18 deletions(-) diff --git a/bin/_helpers b/bin/_helpers index 551160c..4707a8b 100644 --- a/bin/_helpers +++ b/bin/_helpers @@ -14,6 +14,25 @@ else WIDTH=$ACTUAL_WIDTH fi +declare BG_R +declare BG_G +declare BG_Y +declare BG_B +declare BG_M +declare BG_C +declare BG_N + +declare FG_R +declare FG_G +declare FG_Y +declare FG_B +declare FG_M +declare FG_C +declare FG_N + +declare BOLD +declare RESET + # Setup Color Outputs if test -t 1; then ncolors=$(tput colors) @@ -27,24 +46,24 @@ if test -t 1; then COLOR_C=6 # color code - CYAN COLOR_N=246 # color code - NEUTRAL (GRAY) - export BG_R="$(tput setab $COLOR_R)" # Background - RED - export BG_G="$(tput setab $COLOR_G)" # Background - GREEN - export BG_Y="$(tput setab $COLOR_Y)" # Background - YELLOW - export BG_B="$(tput setab $COLOR_B)" # Background - BLUE - export BG_M="$(tput setab $COLOR_M)" # Background - MAGENTA - export BG_C="$(tput setab $COLOR_C)" # Background - CYAN - export BG_N="$(tput setab $COLOR_N)" # Background - NEUTRAL (GRAY) - - export FG_R="$(tput setaf $COLOR_R)" # Foreground - RED - export FG_G="$(tput setaf $COLOR_G)" # Foreground - GREEN - export FG_Y="$(tput setaf $COLOR_Y)" # Foreground - YELLOW - export FG_B="$(tput setaf $COLOR_B)" # Foreground - BLUE - export FG_M="$(tput setaf $COLOR_M)" # Foreground - MAGENTA - export FG_C="$(tput setaf $COLOR_C)" # Foreground - CYAN - export FG_N="$(tput setaf $COLOR_N)" # Foreground - NEUTRAL (GRAY) - - export BOLD="$(tput bold)" - export RESET="$(tput sgr0)" + BG_R="$(tput setab $COLOR_R)" # Background - RED + BG_G="$(tput setab $COLOR_G)" # Background - GREEN + BG_Y="$(tput setab $COLOR_Y)" # Background - YELLOW + BG_B="$(tput setab $COLOR_B)" # Background - BLUE + BG_M="$(tput setab $COLOR_M)" # Background - MAGENTA + BG_C="$(tput setab $COLOR_C)" # Background - CYAN + BG_N="$(tput setab $COLOR_N)" # Background - NEUTRAL (GRAY) + + FG_R="$(tput setaf $COLOR_R)" # Foreground - RED + FG_G="$(tput setaf $COLOR_G)" # Foreground - GREEN + FG_Y="$(tput setaf $COLOR_Y)" # Foreground - YELLOW + FG_B="$(tput setaf $COLOR_B)" # Foreground - BLUE + FG_M="$(tput setaf $COLOR_M)" # Foreground - MAGENTA + FG_C="$(tput setaf $COLOR_C)" # Foreground - CYAN + FG_N="$(tput setaf $COLOR_N)" # Foreground - NEUTRAL (GRAY) + + BOLD="$(tput bold)" + RESET="$(tput sgr0)" fi fi @@ -74,3 +93,24 @@ function output_error { function output_info { output_tagged_string "$BG_B" "INFO" "$1" } + +export BG_R +export BG_G +export BG_Y +export BG_B +export BG_M +export BG_C +export BG_N + +export FG_R +export FG_G +export FG_Y +export FG_B +export FG_M +export FG_C +export FG_N + +export BOLD +export RESET + +export WIDTH From 615614c09ec29ecaf5cb386f1387f25e6fd2eb90 Mon Sep 17 00:00:00 2001 From: Jason Jones Date: Fri, 18 Oct 2024 10:10:20 -0400 Subject: [PATCH 7/9] style: fix more lint issues --- bin/_helpers | 2 +- bin/proxy | 42 +++++++++++++++++++++++------------------- 2 files changed, 24 insertions(+), 20 deletions(-) diff --git a/bin/_helpers b/bin/_helpers index 4707a8b..33caa48 100644 --- a/bin/_helpers +++ b/bin/_helpers @@ -83,7 +83,7 @@ function tag { function output_tagged_string() { tag "$1" "$2" -n - echo $3 + echo "$3" } function output_error { diff --git a/bin/proxy b/bin/proxy index 1760a9d..277e154 100755 --- a/bin/proxy +++ b/bin/proxy @@ -69,23 +69,27 @@ while :; do exit ;; --local-domain|--local-port|--proxy-port|--proxy-domain) - parsed_value=$(parse_arg "$@") + if ! parsed_value=$(parse_arg "$@"); then + echo "$parsed_value" + exit 1 + fi ;; --local-domain=?*|--local-port=?*|--proxy-port=?*|--proxy-domain=?*) - parsed_value=$(parse_arg ${1%%=*} ${1#*=}) + if ! parsed_value=$(parse_arg "${1%%=*}" "${1#*=}"); then + echo "$parsed_value" + exit 1 + fi ;; --local-domain=|--local-port=|--proxy-port=|--proxy-domain=) - parsed_value=$(parse_arg ${1%%=*}) + if ! parsed_value=$(parse_arg "${1%%=*}"); then + echo "$parsed_value" + exit 1 + fi ;; *) ;; esac - if [ $? -ne 0 ]; then - echo $parsed_value - exit 1 - fi - case $option in --local-domain) LOCAL_DOMAIN=$parsed_value @@ -104,7 +108,7 @@ while :; do ;; esac - if [ $1 == $option ]; then + if [ "$1" == "$option" ]; then shift fi shift @@ -140,7 +144,7 @@ function pick_one_virtual_host_from_file() { local HOSTS local HOST - HOST_STRING=$(sed -nr 's/.*VIRTUAL_HOST=(.*)/\1/p' $FILE) + HOST_STRING=$(sed -nr 's/.*VIRTUAL_HOST=(.*)/\1/p' "$FILE") IFS="," read -ra HOSTS <<< "$HOST_STRING" @@ -156,7 +160,7 @@ function pick_one_virtual_host_from_file() { exit 1 fi - echo $HOST + echo "$HOST" } function determine_virtual_host() { @@ -169,11 +173,11 @@ function determine_virtual_host() { HOST=$(pick_one_virtual_host_from_file $DOCKER_FILE) if [ $? -ne 0 ]; then - echo $HOST + echo "$HOST" exit 1 fi - echo $HOST + echo "$HOST" } function determine_virtual_host_override() { @@ -191,18 +195,18 @@ function determine_virtual_host_override() { HOST=$(pick_one_virtual_host_from_file $DOCKER_FILE_OVERRIDE $1) if [ $? -ne 0 ]; then - echo $HOST + echo "$HOST" exit 1 fi - echo $HOST + echo "$HOST" } if [ -z "$LOCAL_DOMAIN" ]; then LOCAL_DOMAIN=$(determine_virtual_host) if [ $? -ne 0 ]; then - echo $LOCAL_DOMAIN + echo "$LOCAL_DOMAIN" exit 1 fi fi @@ -212,16 +216,16 @@ if [ -z "$LOCAL_PORT" ]; then fi if [ -z "$PROXY_DOMAIN" ]; then - PROXY_DOMAIN=$(determine_virtual_host_override $LOCAL_DOMAIN) + PROXY_DOMAIN=$(determine_virtual_host_override "$LOCAL_DOMAIN") if [ $? -ne 0 ]; then - echo $PROXY_DOMAIN + echo "$PROXY_DOMAIN" exit 1 fi fi if [ -z "$PROXY_PORT" ]; then - PROXY_PORT=$(($RANDOM%(PORT_GEN_MIN-PORT_GEN_MAX+1)+PORT_GEN_MIN)) + PROXY_PORT=$((RANDOM%(PORT_GEN_MIN-PORT_GEN_MAX+1)+PORT_GEN_MIN)) output_info "No proxy port specified. Using random port: ${PROXY_PORT}" fi From e05542efb761776e420ee987e4566f84264d34fa Mon Sep 17 00:00:00 2001 From: Jason Jones Date: Fri, 18 Oct 2024 10:13:40 -0400 Subject: [PATCH 8/9] style: fix more lint issues --- bin/proxy | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/bin/proxy b/bin/proxy index 277e154..f7aefb8 100755 --- a/bin/proxy +++ b/bin/proxy @@ -170,9 +170,8 @@ function determine_virtual_host() { fi local HOST - HOST=$(pick_one_virtual_host_from_file $DOCKER_FILE) - if [ $? -ne 0 ]; then + if ! HOST=$(pick_one_virtual_host_from_file "$DOCKER_FILE"); then echo "$HOST" exit 1 fi @@ -181,7 +180,7 @@ function determine_virtual_host() { } function determine_virtual_host_override() { - if [ -z $1 ]; then + if [ -z "$1" ]; then output_error "No local host provided." exit 1 fi @@ -192,9 +191,8 @@ function determine_virtual_host_override() { fi local HOST - HOST=$(pick_one_virtual_host_from_file $DOCKER_FILE_OVERRIDE $1) - if [ $? -ne 0 ]; then + if ! HOST=$(pick_one_virtual_host_from_file "$DOCKER_FILE_OVERRIDE" "$1"); then echo "$HOST" exit 1 fi @@ -203,9 +201,7 @@ function determine_virtual_host_override() { } if [ -z "$LOCAL_DOMAIN" ]; then - LOCAL_DOMAIN=$(determine_virtual_host) - - if [ $? -ne 0 ]; then + if ! LOCAL_DOMAIN=$(determine_virtual_host); then echo "$LOCAL_DOMAIN" exit 1 fi @@ -216,9 +212,7 @@ if [ -z "$LOCAL_PORT" ]; then fi if [ -z "$PROXY_DOMAIN" ]; then - PROXY_DOMAIN=$(determine_virtual_host_override "$LOCAL_DOMAIN") - - if [ $? -ne 0 ]; then + if ! PROXY_DOMAIN=$(determine_virtual_host_override "$LOCAL_DOMAIN"); then echo "$PROXY_DOMAIN" exit 1 fi From f5ba331240d7fc024ab7890116607b7f5278374a Mon Sep 17 00:00:00 2001 From: Jason Jones Date: Wed, 23 Oct 2024 09:53:32 -0400 Subject: [PATCH 9/9] update: allow selection of specific host when multiple domains are defined in VIRTUAL_HOST --- bin/proxy | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/bin/proxy b/bin/proxy index f7aefb8..f1015ba 100755 --- a/bin/proxy +++ b/bin/proxy @@ -141,23 +141,42 @@ function pick_one_virtual_host_from_file() { local EXCEPT=$2 local HOST_STRING - local HOSTS + local HOSTS=() local HOST + local HOST_OPTIONS=() HOST_STRING=$(sed -nr 's/.*VIRTUAL_HOST=(.*)/\1/p' "$FILE") IFS="," read -ra HOSTS <<< "$HOST_STRING" for HOST_ENTRY in "${HOSTS[@]}"; do - if [ "$HOST_ENTRY" != "$EXCEPT" ]; then - HOST=$HOST_ENTRY - break; - fi + if [ "$HOST_ENTRY" != "$EXCEPT" ]; then + HOST_OPTIONS+=("$HOST_ENTRY") + fi done - if [ -z "$HOST" ]; then - output_error "No VIRTUAL_HOST found in $FILE." + if [ "${#HOST_OPTIONS[@]}" -eq "0" ]; then + output_error "No VIRTUAL_HOST overrides found in $FILE." exit 1 + elif [ "${#HOST_OPTIONS[@]}" -gt "1" ]; then + PS3="Select a Proxy URL (or quit to exit): " + while [ -z "$HOST" ]; do + select opt in "${HOST_OPTIONS[@]}"; do + if [ -z "$opt" ]; then + if [ "$REPLY" == "quit" ]; then + output_info "Exiting..." + exit 1 + fi + >&2 output_error "Invalid selection: $REPLY. Please enter the number of the option you wish to select." + continue + fi + + HOST=$opt + break + done + done + else + HOST=${HOST_OPTIONS[0]} fi echo "$HOST"