ShellSpider/server.sh

101 lines
2.4 KiB
Bash
Raw Permalink Normal View History

#!/bin/bash
EXIT_FAILURE=1
EXIT_SUCCESS=0
progname="server"
2017-11-24 00:43:59 +00:00
home="./home/"
name="localhost"
admin="admin@localhost"
httpPort=-1
httpsPort=-1
cert="./server.pem"
help() {
cat << EOF
2017-11-24 00:43:59 +00:00
usage: $progname [OPTIONS]
Options:
2017-11-24 00:43:59 +00:00
-p, --http-port=PORT set unencrypted port
-s, --https-port=PORT set encrypted port
-c, --cert=CERT set SSL certificate (pem format) (default: ./server.pem)
-h, --home=HOME set home directory (default: ./home/)
-n, --name=NAME set the name of the server (e.g. example.com) (default: localhost)
--admin=ADMIN set the admin mail address (default: admin@localhost)
-v, --verbose set to verbose mode
-q, --quiet don't output anything (not implemented)
Ether an encrypted or an unencrypted port (or both) has to be given.
EOF
}
verboselevel=0
echoOnVerbose() {
if test "$verboselevel" -ge $1; then
echo -n "$2"
fi
}
progname="$0"
2017-11-24 00:43:59 +00:00
OPTS=$(getopt -o "p:vqh:n:s:c:" -l "http-port:,verbose,quiet,home:,name:,admin:,https-port:,cert:" -- $@)
if test $? != 0; then
exit $EXIT_FAILURE
fi
eval set -- "$OPTS"
while true; do
case "$1" in
2017-11-24 00:43:59 +00:00
-p|--http-port) httpPort=$2; shift 2;;
-s|--https-port) httpsPort=$2; shift 2;;
-c|--cert) cert=$2; shift 2;;
-v|--verbose) verboselevel=$(($verboselevel+1)); shift;;
-q|--quiet) verboselevel=-1; shift;;
-h|--home) home=$2; shift 2;;
-n|--name) name=$2; shift 2;;
--admin) admin=$2; shift 2;;
--) shift; break;;
esac
done
2017-11-24 00:43:59 +00:00
if test "$httpPort" -lt 1 -a "$httpsPort" -lt 1; then
help
exit $EXIT_FAILURE
fi
2017-11-24 00:43:59 +00:00
settingsfile="/dev/shm/wserver-$$.settings"
logfile="/dev/shm/wserver-$$.log"
echo -n > "$logfile"
declare -A settings
2017-11-18 22:52:03 +00:00
settings[serverDirectory]="$(pwd)"
2017-11-24 00:43:59 +00:00
settings[logFile]="$logfile"
2017-11-18 22:52:03 +00:00
settings[home]="$home"
settings[name]="$name"
settings[admin]="$admin"
settings[verbose]=$verboselevel
settings[shellExec]="sh"
settings[cgiExec]="cgi"
settings[phpExec]="php"
2017-11-18 00:34:35 +00:00
settings[server]="ShellSpider V1"
settings[index]="true"
declare -p settings > $settingsfile
2017-11-24 00:43:59 +00:00
if test ! "$httpPort" -lt 1; then
echo "Starting unencrypted on port $httpPort ..."
socat $(echoOnVerbose 2 "-vv") tcp-listen:$httpPort,reuseaddr,fork SYSTEM:"./response.sh $settingsfile off" > /dev/null &
fi
if test ! "$httpsPort" -lt 1; then
echo "Starting encrypted on port $httpsPort ..."
socat $(echoOnVerbose 2 "-vv") openssl-listen:$httpsPort,verify=0,cert="$cert",reuseaddr,fork SYSTEM:"./response.sh $settingsfile on" > /dev/null &
fi
2017-11-24 00:43:59 +00:00
while true; do
tail -f $logfile
done