A server for reading/writing gpio state via webhooks.
Go to file
2020-05-25 20:47:48 +00:00
cmd/server Update application name. 2020-05-20 18:00:35 +00:00
.dockerignore Build process cleanup. 2020-05-25 20:47:48 +00:00
.gitignore Update application name. 2020-05-20 18:00:35 +00:00
docker-compose.yml Correct configuration, improve logging. 2020-05-12 03:21:26 +00:00
Dockerfile Update application name. 2020-05-20 18:00:35 +00:00
go.mod Initial commit. 2020-05-11 16:28:37 +00:00
go.sum Initial commit. 2020-05-11 16:28:37 +00:00
Makefile Build process cleanup. 2020-05-25 20:47:48 +00:00
readme.md Update application name. 2020-05-20 18:00:35 +00:00
webhooks.yml.example Remove the useless 'secret key', since it doesn't add any more security than the path. 2020-05-13 22:11:07 +00:00

A simple server for controlling GPIO pins on embedded devices

This is a tiny webserver designed to receive webhooks that control microcontrollers running gpio-webhook.

Configuration

The server can be configured via the following environment variables:

  • DEBUG - if set, extra output will be logged / generated. this will leak secrets to stdout
  • LISTEN_PORT - the TCP port to serve the app on. Default is 7200.
  • WEBHOOK_CONFIG_FILE - location of the webhook config. Defaults to ./webhooks.yaml.

The webhooks configuration file should be an array of entries with the following keys:

  • name - A human-readable name that explains the webhook's purpose.
  • path - The webhook will be served by the app at this path. Treat this as a secret value.
  • num_switches - the number of data points / indexes expected with each POST.
  • momentary_switches - an array of any indexes that refer to 'momentary' switches.
    The value of these indexes will be reset to 0 after the next GET request to the webhook.

Build & Run

Build the server with:

make build

And run with:

./gpio-webhook-server

A dockerfile is also included, along with a sample docker-compose.yml demonstrating how the server might be run in a containerized environment.

Note that you SHOULD always run this service behind a TLS-encrypted proxy. Using plain http WILL expose your secrets.

Usage

To read the current webhook data, simply send a GET to the webhook URL, with the key parameter appropriately set. Example:

curl -x GET "https://example.com/WEBHOOK_PATH

To write data, send a POST to the same URL, with a json-formatted body in the following format:

[value0, value1, value2, ...]

Future Development

  • Use a more robust secret than "the URL is hidden behind TLS." Maybe client-side x509 certs.