dzove855 / Bash-web-server

A purely bash web server, no socat, netcat, etc...

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Bash-web-server

A purely bash web server, no socat, netcat, etc...

Requirement

  • bash 5.2 (The patch will be included in bash5.2 - Alpha release already contains the patch)
  • if bash version is under 5.2, patched loadable accept builtin (http://git.savannah.gnu.org/cgit/bash.git/tree/examples/loadables/accept.c) is needed, you have to apply accept.patch to your loadable accept.c file which is existed in bash source code, and than build and install the loadable accept builtin into BASH_LOADABLE_PATH specified in bash-server.sh

How to

The port can be set by the env var: HTTP_PORT

The path to accept (Directory) can be set by using: BASH_LOADABLES_PATH (see man bash)

Server Methods:

  • serveHtml (needs DOCUMENT_ROOT envvars) - This will serve the static files
  • script file - The script need a file as first argument which will be source. The file will need a function named runner, which will be run on each request

Basic authentication can be enabled by env var: BASIC_AUTH, accounts and passwords are stored in the file specified in $BASIC_AUTH_FILE

Usage

Simple explication of various functions that could be used.

Session Handling

Variables:

    SESSION_COOKIE
        The name of the cookie : default BASHSESSID

Functions:

    sessionStart
        Start a session or reuse an existing session

    sessionSet $1 $2
        Set a session variable

    sessionGet $1 
        Get the value of the given variable

Cookie Handling

Functions:

    cookieSet $1 
        Send the cookie
        Example: cookieSet "BASHSESSID=12345; max-age=5000" 

HTTP Handling

Functions:

    httpSendStatus $1 
        Send the provided http status
        Example: httpSendStatus 200

    To set Headers, you should add an entry inside the assoc var HTTP_RESPONSE_HEADERS
        HTTP_RESPONSE_HEADERS["ExampleHeader"]="The value of the Header"

Websocket

!!!NOTE: This is still expiremental and only works for sendin data, not receiving!

Functions:

    websocketStart FUNCTION
        Start the websocket server

    websocketStop
        Stop the websocket server inside the function

About

A purely bash web server, no socat, netcat, etc...

License:MIT License


Languages

Language:Shell 66.8%Language:C 32.3%Language:HTML 0.8%Language:CSS 0.2%