diff --git a/pica-wekan/README.md b/pica-wekan/README.md index fd37d9e06562fb534813038be0c81e13988b9bf4..be1424158a86d3aef4e76576adb5e3e354103d2f 100644 --- a/pica-wekan/README.md +++ b/pica-wekan/README.md @@ -19,22 +19,8 @@ Il suffit de mettre à jour les tags des images dans le [docker-compose.yml](./d On pourra aussi consulter le Compose du dépôt officiel pour effectuer les nouvelles configurations. -### Configurer des hooks +### Hooks -Wekan a une fonctionnalité pour [déclencher un *hook*](https://github.com/wekan/wekan/pull/1119) lors de l'activité sur un board. -Grâce aux hooks, on peut configurer Mattermost pour recevoir un message sur un canal donné dès qu'une activité est détectée. +Pour configurer des hooks, on pourra consulter la [documentation utilisateur](https://wiki.picasoft.net/doku.php?id=technique:adminsys:wekan:hooks). -Le souci est que Wekan [déclenche les hooks sortants pour chaque activité](https://github.com/wekan/wekan/wiki/Webhook-data), même les plus insignifiantes, ce qui spamme le canal. - -L'idée est donc de passer par un intermédiaire pour filter les hooks selon le type d'activité, et ne transmettre que les activités intéressantes. C'est ce que fait le petit outil [filter-hooks](./filter-hooks). - -Lorsque l'on configure un hook entrant dans Mattermost, on obtient un lien de la forme `https://team.picasoft.net/hooks/XXX`, qui permet de poster le message du hook sur un canal donné. Plutôt que d'entrer directement cette URL dans Wekan, on utilisera une URL de la forme : -``` -https://kanban.picasoft.net/forward_hooks?url=https://team.picasoft.net/hooks/XXX -``` - -`filter-hooks` répond lorsqu'une requête arrive sur `/foward_hooks`, et transmet le hook à `url` s'il est pertinent. - -Les hooks "pertinents" sont définis directement [dans le code](./filter-hooks/main.py). - -Le code est très basique voire bancal et pourra être amélioré. +Voir aussi [le README de filter-hooks](./filter-hooks) pour le code permettant de filter les hooks par activité. diff --git a/pica-wekan/docker-compose.yml b/pica-wekan/docker-compose.yml index 753ae94f1e25f5d9fb22f179d9a83bd516257a5c..84a268058d4f27201c0326c18615c592d9a70520 100644 --- a/pica-wekan/docker-compose.yml +++ b/pica-wekan/docker-compose.yml @@ -52,7 +52,7 @@ services: build: ./filter-hooks container_name: wekan-filter-hooks environment: - - WEKAN_URL=https://kanban.picasoft.net + - KANBAN_URL=https://kanban.picasoft.net networks: - docker_default labels: diff --git a/pica-wekan/filter-hooks/README.md b/pica-wekan/filter-hooks/README.md new file mode 100644 index 0000000000000000000000000000000000000000..3ca4eae489896f7edf5b777c8b8ac94f1e9a33be --- /dev/null +++ b/pica-wekan/filter-hooks/README.md @@ -0,0 +1,41 @@ +## Filter et faire suivre les hooks Wekan + +Wekan a une fonctionnalité pour [déclencher un *hook*](https://github.com/wekan/wekan/pull/1119) lors de l'activité sur un board. +Grâce aux hooks, on peut configurer Mattermost pour recevoir un message sur un canal donné dès qu'une activité est détectée. + +Le souci est que Wekan [déclenche les hooks sortants pour chaque activité](https://github.com/wekan/wekan/wiki/Webhook-data), même les plus insignifiantes, ce qui spamme le canal. + +L'idée est donc de passer par un intermédiaire pour filter les hooks selon le type d'activité, et ne transmettre que les activités intéressantes. C'est ce que fait ce petit outil. Le code est très basique voire bancal et pourra être amélioré. + +### Lancement + +Il suffit de construire l'image et de lancer l'outil. +On peut aussi le faire à la main : +``` +gunicorn --bind 0.0.0.0:5000 --reload main:app +``` + +### Utilisation + +Supposons que dans une application type Mattermost, on configure un hook **entrant** qui peut recevoir des requêtes `POST` de Wekan. Cette URL est désignée par `URL_HOOK`. + +Supposons que cet outil soit déployé à l'adresse `https://URL_FILTER`. + +Dans Wekan, l'URL du hook sortant sera alors (à la place de `URL_HOOK`) : +``` +https://URL_FILTER/forward_hooks?url=URL_HOOK +``` + +Quand il reçoit une requête, l'outil examine le hook et voit si le type d'activité correspond à une liste pré-définie. +Si oui, il construit un objet JSON avec une description en français de la forme : +```json +{ + "text": "Machin a créé la carte truc dans TODO" +} +``` + +Puis l'envoye à `URL_HOOK`. La plupart des outils type Mattermost sont compatibles avec ce format (c'est celui utilisé par Wekan, d'ailleurs). Sur Mattermost, un message sera posté avec `text` pour contenu. + +### Type d'activité pris en compte + +Les hooks "pertinents" sont définis directement [dans le code](./main.py). diff --git a/pica-wekan/filter-hooks/main.py b/pica-wekan/filter-hooks/main.py index 5c2cc4395541bbb0320c25e86a1fea8187a261ad..9cbee81a6e9b95c246c6e6a56626e5cf46dd626d 100644 --- a/pica-wekan/filter-hooks/main.py +++ b/pica-wekan/filter-hooks/main.py @@ -29,7 +29,7 @@ allowed_hooks = { 'act-addComment': 'commenté' } -@app.route('/', methods=['POST']) +@app.route('/forward_hooks', methods=['POST']) def filter_hook(): hook_data = json.loads(request.data) event = hook_data['description']