multihook

Crates.iomultihook
lib.rsmultihook
version0.4.2
sourcesrc
created_at2021-08-07 14:59:02.443456
updated_at2023-06-17 15:28:52.621046
descriptionA webhook server
homepage
repositoryhttps://github.com/Trivernis/multihook.git
max_upload_size
id432803
size98,263
Julius Riegel (Trivernis)

documentation

README

Multihook

Multihook is an easy to configure webhook server.

Installation

With cargo:

cargo install multihook

Usage

Just run it via systemd or smth.

multihook

Config

The config allows you to configure actions for each endpoint. The config is most likely stored in ~/.config/multihook and on Windows maybe in the APPDATA directory (?). After running the program for the first time the config directory and config file should be created.

[server]
address = '127.0.0.1:8080'

[hooks]
# executed before all endpoint actions
pre_action = "echo 'pre action'"
# executed after all endpoint actions
post_action = "echo 'post action'"
# executed when an action fails
err_action = "echo \"Hook $HOOK_NAME failed with error: $HOOK_ERROR\""

# the name needs to be unique
[endpoints.ls]
# the path needs to be unique
path = "path/on/the/server"
# a command or a path to the script
action = "ls {{$.filepath}}"
# allows multiple instances of this action to run concurrently
allow_parallel = true
# additional hooks on endpoint-level
hooks = {pre_action = "echo 'before something bad happens'"}

[endpoints.error]
path = "error"
action = "echo '{{$.books.*.title}}'"
# Validate secrets according to different parsing rules
# Currently only HMac based secrets with sha256 are supported
secret = { value = "my secret", format = "HMac"}

[endpoints.testscript]
path = "script"
action = "/home/trivernis/.local/share/multihook/test-script.sh"
allow_parallel = false
# doesn't wait for the command to finish and returns a http response directly
# This setting can be useful if your action takes a very long time to run and would
# cause a timeout
run_detached = true

The configured action is either a script file or a command. In both cases placeholders with the syntax {{query}} can be used. The query is the path to required values in the json body of the request. The request body will also be provided in the environment variable HOOK_BODY.

License

GPL-3

Commit count: 22

cargo fmt