diff --git a/.gitignore b/.gitignore index ad83071..09fffa7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ secret/* app +config/master.sh diff --git a/config/master.sh b/config/master_example.sh similarity index 87% rename from config/master.sh rename to config/master_example.sh index 4c6a06f..8405090 100644 --- a/config/master.sh +++ b/config/master_example.sh @@ -1,9 +1,10 @@ declare -A cfg -cfg[ip]=0.0.0.0 # IP address to bind to - use 0.0.0.0 to bind to all +cfg[ip]=127.0.0.1 # IP address to bind to - use 0.0.0.0 to bind to all cfg[http]=true # enables/disables listening on HTTP -cfg[port]=1341 # HTTP port +cfg[port]=1337 # HTTP port +cfg[socat_only]=false cfg[namespace]='app' diff --git a/http.sh b/http.sh index aa57c21..c3c1783 100755 --- a/http.sh +++ b/http.sh @@ -75,8 +75,16 @@ for i in $(cat src/dependencies.optional); do [[ $? != 0 ]] && echo "WARNING: can't find $i" done +which ncat > /dev/null 2>&1 +if [[ $? != 0 ]]; then + if [[ ${cfg[socat_only]} != true ]]; then + echo "ERROR: can't find ncat, and cfg[socat_only] is not set to true" + error=true + fi +fi + if [[ $error == true ]]; then - echo "Fix above dependencies, and we might just let you pass." + echo "Fix above dependencies, and I might just let you pass." exit 0 fi @@ -105,7 +113,7 @@ echo "

Hello from HTTP.sh!


To get started with your app, check out $(
  • $(pwd)/${cfg[namespace]}/config.sh - config for everything specific to your app AND workers
  • $(pwd)/config/master.sh - master server config
  • $(pwd)/src/ - HTTP.sh src, feel free to poke around :P
  • - © sdomi, selfisekai, ptrcnull - 2020" + © sdomi, ptrcnull, selfisekai - 2020, 2021" LauraIsCute cat < "${cfg[namespace]}/routes.sh" ## routes - application-specific routes @@ -139,7 +147,7 @@ cat <&2 |_| |_| |_| |_| |_| □ /_____/|_| |_| PtrcIsCute -if [[ $1 == "debug" ]]; then +if [[ "$1" == "debug" ]]; then cfg[dbg]=true echo "[DEBUG] Activated debug mode - stderr will be shown" fi @@ -150,25 +158,38 @@ if [[ -f "${cfg[namespace]}/config.sh" ]]; then source "${cfg[namespace]}/config.sh" fi -if [[ ${cfg[http]} == true ]]; then - # this is a workaround because ncat kept messing up large (<150KB) files over HTTP - but not over HTTPS! - socket=$(mktemp -u /tmp/XXXX.socket) +if [[ ${cfg[socat_only]} == true ]]; then + echo "[INFO] listening directly via socat, assuming no ncat available" + echo "[HTTP] listening on ${cfg[ip]}:${cfg[port]}" if [[ ${cfg[dbg]} == true ]]; then - ncat -l -U "$socket" -c src/server.sh -k & + socat tcp-listen:${cfg[port]},bind=${cfg[ip]},fork "exec:bash -c src/server.sh" else - ncat -l -U "$socket" -c src/server.sh -k 2>> /dev/null & + socat tcp-listen:${cfg[port]},bind=${cfg[ip]},fork "exec:bash -c src/server.sh" 2>> /dev/null + if [[ $? != 0 ]]; then + echo "[WARN] socat exitted with a non-zero status; Maybe the port is in use?" + fi + fi +else + if [[ ${cfg[http]} == true ]]; then + # this is a workaround because ncat kept messing up large (<150KB) files over HTTP - but not over HTTPS! + socket=$(mktemp -u /tmp/XXXX.socket) + if [[ ${cfg[dbg]} == true ]]; then + ncat -l -U "$socket" -c src/server.sh -k & + else + ncat -l -U "$socket" -c src/server.sh -k 2>> /dev/null & + fi + socat TCP-LISTEN:${cfg[port]},fork,bind=${cfg[ip]} UNIX-CLIENT:$socket & + echo "[HTTP] listening on ${cfg[ip]}:${cfg[port]} through '$socket'" + #ncat -v -l ${cfg[ip]} ${cfg[port]} -c ./src/server.sh -k 2>> /dev/null & fi - socat TCP-LISTEN:${cfg[port]},fork,bind=${cfg[ip]} UNIX-CLIENT:$socket & - echo "[HTTP] listening on ${cfg[ip]}:${cfg[port]} through '$socket'" - #ncat -v -l ${cfg[ip]} ${cfg[port]} -c ./src/server.sh -k 2>> /dev/null & -fi -if [[ ${cfg[ssl]} == true ]]; then - echo "[SSL] listening on port ${cfg[ip]}:${cfg[ssl_port]}" - if [[ ${cfg[dbg]} == true ]]; then - ncat -l ${cfg[ip]} ${cfg[ssl_port]} -c src/server.sh -k --ssl $([[ ${cfg[ssl_key]} != '' && ${cfg[ssl_cert]} != '' ]] && echo "--ssl-cert ${cfg[ssl_cert]} --ssl-key ${cfg[ssl_key]}") & - else - ncat -l ${cfg[ip]} ${cfg[ssl_port]} -c src/server.sh -k --ssl $([[ ${cfg[ssl_key]} != '' && ${cfg[ssl_cert]} != '' ]] && echo "--ssl-cert ${cfg[ssl_cert]} --ssl-key ${cfg[ssl_key]}") 2>> /dev/null & + if [[ ${cfg[ssl]} == true ]]; then + echo "[SSL] listening on port ${cfg[ip]}:${cfg[ssl_port]}" + if [[ ${cfg[dbg]} == true ]]; then + ncat -l ${cfg[ip]} ${cfg[ssl_port]} -c src/server.sh -k --ssl $([[ ${cfg[ssl_key]} != '' && ${cfg[ssl_cert]} != '' ]] && echo "--ssl-cert ${cfg[ssl_cert]} --ssl-key ${cfg[ssl_key]}") & + else + ncat -l ${cfg[ip]} ${cfg[ssl_port]} -c src/server.sh -k --ssl $([[ ${cfg[ssl_key]} != '' && ${cfg[ssl_cert]} != '' ]] && echo "--ssl-cert ${cfg[ssl_cert]} --ssl-key ${cfg[ssl_key]}") 2>> /dev/null & + fi fi fi diff --git a/src/dependencies.required b/src/dependencies.required index 9953e7a..bd7bebc 100644 --- a/src/dependencies.required +++ b/src/dependencies.required @@ -1,5 +1,4 @@ bash -ncat socat grep sed