Skip to content
Snippets Groups Projects
Verified Commit 1bad1fbe authored by Quentin Duchemin's avatar Quentin Duchemin
Browse files

[WekanHooks] Remove unmaintainable and stupid text parsing. Keep original message.

parent 162f6390
No related branches found
No related tags found
No related merge requests found
## v0.2
Remove unmaintainable and stupid text parsing.
Keep original message.
## v0.1
Initial release.
......@@ -5,7 +5,7 @@ Grâce aux hooks, on peut configurer Mattermost pour recevoir un message sur un
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é.
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 et pourra être amélioré.
### Lancement
......@@ -26,15 +26,7 @@ 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.
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 et l'envoie à `URL_HOOK` le cas échéant.
### Type d'activité pris en compte
......
......@@ -2,7 +2,6 @@
# -*- coding: utf-8 -*-
import json
import os
import logging
import requests
......@@ -23,11 +22,11 @@ app = Flask(__name__)
# List of hooks to forward to the real hook URL
# See https://github.com/wekan/wekan/wiki/Webhook-data
allowed_hooks = {
'act-createCard': 'créé',
'act-moveCard': 'déplacé',
'act-addComment': 'commenté'
}
allowed_hooks = [
'act-createCard'
'act-moveCard'
'act-addComment'
]
@app.route('/forward_hooks', methods=['POST'])
def filter_hook():
......@@ -35,31 +34,8 @@ def filter_hook():
event = hook_data['description']
# Check if we must forward hook
if event in allowed_hooks:
# Retrieve card URL
card_url_pos = hook_data['text'].index(os.environ['KANBAN_URL'])
card_url = hook_data['text'][card_url_pos:]
# Text like '<user> a <verbe> la carte <nom>' with a link
text = f'{hook_data["user"]} a [{allowed_hooks[event]} la carte **{hook_data["card"]}**]({card_url})'
# If card moved, add origin and destination lists
if event == 'act-moveCard':
# Yes, I'm ashamed of this ugly parsing, thanks for asking.
from_list = hook_data['text'].split('from list')[1].split('"')[1]
to_list = hook_data['text'].split('to list')[1].split('"')[1]
text += f' de {from_list} vers {to_list}.'
# If there is a new comment, add it as a citation
elif event == 'act-addComment':
text += f'\n>{hook_data["comment"]}'
# If new card, add the list it belongs to
elif event == 'act-createCard':
to_list = hook_data['text'].split('to list')[1].split('"')[1]
text += f' dans {to_list}'
# Forward the hook
r = requests.post(request.args['url'], json={'text': text})
r = requests.post(request.args['url'], json=hook_data)
if r.status_code != 200:
logging.error(f'Unable to forward hook : {r}')
else:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment