cmd/server | ||
.dockerignore | ||
.gitignore | ||
docker-compose.yml | ||
Dockerfile | ||
go.mod | ||
go.sum | ||
Makefile | ||
readme.md | ||
webhooks.yml.example |
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.