# http-cmd
Run a command over HTTP
## ⚠️ Warning ⚠️
Be very careful with exposing http-cmd to the internet!
Most importantly, **never use it with a shell as the command** to be executed over HTTP!
Otherwise, execution of arbitrary programs is possible!
## Motivation
The motivation for building this tool is that static site generators like [Zola](https://www.getzola.org/) don't allow executing external commands for security reasons.
You don't want arbitrary programs to be executed while you try to build a static website!
Imagine being hacked by a custom theme 😱
However, such static site generators support fetching remote data.
This leads to the hack: What if we run a local server that runs a command for us and returns its output as an HTTP response? 💡
You can find a demonstration example for Zola in the [`zola_example`](zola_example) directory which has its own README.
## Installation
You can install `http-cmd` using Cargo by running: `cargo install http-cmd`.
You can update it using [`cargo-update`](https://github.com/nabijaczleweli/cargo-update).
## Help message
The output of `http-cmd -h`:
```
Usage: http-cmd [OPTIONS] -- <PROGRAM> [ARGS]...
Arguments:
<PROGRAM> The program to execute over HTTP
[ARGS]... The arguments to the command to execute over HTTP
Options:
-m, --max-body-size <MAX_BODY_SIZE>
The maximum body size in bytes. The default is 1MiB [default: 1048576]
-s, --socket-address <SOCKET_ADDRESS>
The IPv4/IPv6 socket address (with port) to listen on [default: 127.0.0.1:8080]
-i, --stdin
Pipe the request body to the command's standard input instead of passing its lines as command arguments
-h, --help
Print help (see more with '--help')
-V, --version
Print version
```
Run `http-cmd --help` (not `-h`) for more details.