2019-02-17 05:46:00 -05:00
# Matrix Webhook
2019-02-10 16:02:48 -05:00
2019-02-17 05:46:00 -05:00
Post a message to a matrix room with a simple HTTP POST
2019-02-10 19:32:57 -05:00
2023-01-17 13:36:50 -05:00
This is my own fork of https://github.com/nim65s/matrix-webhook
It adds a yaml configuration with multi-api key endpoints and moves the filtes
to more of a plugin-based system
2021-07-18 12:12:08 -04:00
## Install
2019-02-10 19:32:57 -05:00
2023-01-17 13:36:50 -05:00
For now, clone this repo and run `pip install .`
2021-07-18 12:12:08 -04:00
## Start
2022-08-05 14:27:41 -04:00
Create a matrix user for the bot, and launch this app with the following arguments and/or environment variables
(environment variables update defaults, arguments take precedence):
2021-07-18 12:12:08 -04:00
```
2022-08-01 17:46:37 -04:00
matrix-webhook -h
# OR
2021-07-18 12:12:08 -04:00
python -m matrix_webhook -h
# OR
docker run --rm -it nim65s/matrix-webhook -h
```
```
2021-11-09 08:57:46 -05:00
usage: python -m matrix_webhook [-h] [-H HOST] [-P PORT] [-u MATRIX_URL]
[-i MATRIX_ID] [-p MATRIX_PW] [-k API_KEYS]
[-c CONFIG] [-v]
2021-07-18 12:12:08 -04:00
Configuration for Matrix Webhook.
2021-11-09 08:57:46 -05:00
options:
2021-07-18 12:12:08 -04:00
-h, --help show this help message and exit
2021-11-09 08:57:46 -05:00
-H HOST, --host HOST host to listen to. Default: `''` . Environment
variable: `HOST`
-P PORT, --port PORT port to listed to. Default: 4785. Environment
variable: `PORT`
2021-07-18 12:12:08 -04:00
-u MATRIX_URL, --matrix-url MATRIX_URL
2021-11-09 08:57:46 -05:00
matrix homeserver url. Default: `https://matrix.org` .
Environment variable: `MATRIX_URL`
2021-07-18 12:12:08 -04:00
-i MATRIX_ID, --matrix-id MATRIX_ID
2021-11-09 08:57:46 -05:00
matrix user-id. Required. Environment variable:
`MATRIX_ID`
2021-07-18 12:12:08 -04:00
-p MATRIX_PW, --matrix-pw MATRIX_PW
2021-11-09 08:57:46 -05:00
matrix password. Required. Environment variable:
`MATRIX_PW`
-k API_KEYS, --api-keys API_KEYS
comma separated list of shared secrets to use this
service. Required. Environment variable: `API_KEYS`
-c CONFIG, --config CONFIG
configuration file. Default: `config.yaml`
2021-07-18 12:12:08 -04:00
-v, --verbose increment verbosity level
```
2019-02-10 19:32:57 -05:00
## Dev
```
2021-07-18 12:12:08 -04:00
poetry install
# or python3 -m pip install --user markdown matrix-nio
python3 -m matrix_webhook
2019-02-10 19:32:57 -05:00
```
## Prod
2021-07-18 12:12:08 -04:00
A `docker-compose.yml` is provided:
2019-02-17 06:29:50 -05:00
- Use [Traefik ](https://traefik.io/ ) on the `web` docker network, eg. with
[proxyta.net ](https://framagit.org/oxyta.net/proxyta.net )
2019-02-17 06:44:00 -05:00
- Put the configuration into a `.env` file
2020-06-07 04:31:21 -04:00
- Configure your DNS for `${CHATONS_SERVICE:-matrixwebhook}.${CHATONS_DOMAIN:-localhost}`
2019-02-10 19:32:57 -05:00
```
docker-compose up -d
```
2019-02-17 06:29:50 -05:00
## Test / Usage
2019-02-10 19:32:57 -05:00
```
2021-07-31 05:21:29 -04:00
curl -d '{"body":"new contrib from toto: [44 ](http://radio.localhost/map/#44 )", "key": "secret"}' \
2020-03-14 13:10:32 -04:00
'http://matrixwebhook.localhost/!DPrUlnwOhBEfYwsDLh:matrix.org'
2019-02-10 19:32:57 -05:00
```
2019-03-06 10:47:35 -05:00
(or localhost:4785 without docker)
2020-03-14 12:17:01 -04:00
2021-12-14 23:17:15 -05:00
### Formatters
These formatters will output custom messages depending on the specific formatter. Generally to set these up, on the remote provider you would create a webhook with `https://your.webhook.domain/?formatter=<formatter columun below>&api_key=<your apikey>`
2021-12-14 23:19:51 -05:00
| formatter | description | key location |
| -- | - | - |
| github | for github.com | in github JSON webhook settings as `secret` |
| grafana | for grafana | in webhook URL with `api_key=<yourkey>` |
| pingdom | for pingdom.com | in webhook URL with `api_key=<yourkey>` |
| buildbot | buildbot reporter | in webhook URL with `api_key=<yourkey>` or in master.cfg credentials header as `api_key` |
| generic | returns raw JSON that was recieved. For developing additional formatter plugins | in URL with api_key=< yourkey > |
2021-12-14 23:17:15 -05:00
For example, if your matrix-webhook was hosted at https://webhooks.example.com, and you were setting up pingdom and you have an api_key of "123", you would use the following URL for your webhook call from pingdom:
`https://webhooks.example.com/?formatter=pingdom&api_key=123`
2021-12-14 22:58:30 -05:00
2022-03-03 13:17:40 -05:00
### For Gitlab
At a group level, Gitlab does not permit to setup webhooks. A workaround consists to use Google
Chat or Microsoft Teams notification integration with a custom URL (Gitlab does not check if the url begins with the normal url of the service).
#### Google Chat
Add a Google Chat integration with an URL ending with `?formatter=gitlab_gchat&key=API_KEY`
#### Microsoft Teams
Add a Microsoft Teams integration with an URL ending with `?formatter=gitlab_teams&key=API_KEY`
2020-03-14 12:17:01 -04:00
## Test room
2021-08-27 18:38:39 -04:00
[#matrix-webhook:tetaneutral.net ](https://matrix.to/#/!DPrUlnwOhBEfYwsDLh:matrix.org )
2021-07-18 12:12:08 -04:00
## Unit tests
```
docker-compose -f test.yml up --exit-code-from tests --force-recreate --build
```