File: webhook_server.py

package info (click to toggle)
weakforced 3.0.0-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 3,040 kB
  • sloc: cpp: 20,397; python: 2,002; sh: 700; makefile: 432
file content (32 lines) | stat: -rwxr-xr-x 1,078 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
from bottle import route, run, template, request, response
import hmac
import hashlib
import base64
import json
import os

logfile = open('/tmp/webhook-server.log', 'w')
logfile.write("This is to ensure the file isn't empty\n")
logfile.flush()
mypid = os.getpid()

@route('/webhook/<event>', method='POST')
def webhook(event):
    digest_match = False
    event = request.headers.get('X-Wforce-Event')
    secret = request.headers.get('X-Wforce-Signature')
    delivery_id = request.headers.get('X-Wforce-Delivery')
    hook_id = request.headers.get('X-Wforce-HookID')
    body_json = request.json
    shmac = hmac.new(b"secret", b"", hashlib.sha256)
    for myline in request.body.readlines():
        shmac.update(myline)
    sdigest = base64.b64encode(shmac.digest())
    if sdigest.decode() == secret:
        digest_match = True
    log_msg = "[%s] Received webhook id=%s, digest_match=%s, event=%s, body=%s\n" % (mypid, hook_id, digest_match, event, json.dumps(body_json))
    logfile.write(log_msg)
    logfile.flush()
    return "ok\n"

run(host='localhost', port=9080)