the coolest web framework (in Bash) to date.
We now have an IRC channel! Join #http.sh @ irc.libera.chat
We have some guides and general documentation in the docs directory. Among them:
- A quick start guide
- General directory structure
- CLI usage
- Tests
- HTTP Router
- List of security fixes
Absolutely necessary:
- Bash (5.x, not interested in backwards compat)
- either Ncat (not openbsd-nc, not netcat, not nc) or socat, or a combo of both
- GNU grep/sed
Full list of dependencies: required, optional.
- if ncat fails to bind to
[::]
, change the bind to127.0.0.1
or0
inconfig/master.sh
$post_multipart
doesn't keep original names - could be fixed by parsing individual headers from the multipart request instead of skipping them all- websocket impl isn't properly finished
- fails with an empty response, instead of throwing 400/500
(this data may be slightly outdated. Full docs TODO.)
- get_data - holds data from GET parameters
- /?test=asdf ->
${get_data[test]}
=="asdf"
- /?test=asdf ->
- params - holds parsed data from URL router
- /profile/test (assuming profile/:name) ->
${params[name]}
=="test"
- /profile/test (assuming profile/:name) ->
- post_data - same as above, but for urlencoded POST params
- test=asdf ->
${post_data[test]}
=="asdf"
- test=asdf ->
- post_multipart - contains paths to uploaded files from multipart/form-data POST requests. WARNING: it doesn't hold field names yet, it relies on upload order for identification
- first file (in upload order) ->
cat ${post_multipart[0]}
- second file ->
cat ${post_multipart[1]}
- first file (in upload order) ->
- r - misc request data
- authorization
- content_boundary
- content_boundary
- content_length
- content_type
- headers
- host
- host_portless
- ip
- post
- proto
- status
- uri
- url
- user_agent
- view
- websocket_key
- cfg - server and app config - see
config/master.sh
for more details
- To prevent running malicious scripts, by default only scripts with extension
.shs
can be run by the server, but this can be changed in the config. - ${cfg[index]} ignores the above - see config/master.sh
- Trans rights!
- SHS stands for Shell Server.