Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/dzove855/Bash-web-server

A purely bash web server, no socat, netcat, etc...
https://github.com/dzove855/Bash-web-server

Last synced: about 2 months ago
JSON representation

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

Awesome Lists containing this project

README

        

# 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
```