http-cmd 0.1.0

Run a command over HTTP
# 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.