Skip to content
This repository was archived by the owner on Jul 1, 2026. It is now read-only.

Commit 0ef11bf

Browse files
committed
switch from flask to sanic
1 parent b0b4773 commit 0ef11bf

2 files changed

Lines changed: 14 additions & 15 deletions

File tree

‎sanic_github_webhook/__init__.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
:license: Apache License, Version 2.0
99
"""
1010

11-
from github_webhook.webhook import Webhook
11+
from sanic_github_webhook.webhook import Webhook
1212

1313
# -----------------------------------------------------------------------------
1414
# Copyright 2015 Bloomberg Finance L.P.

‎sanic_github_webhook/webhook.py‎

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
import logging
55

66
import six
7-
from flask import abort, request
8-
7+
from sanic.exceptions import abort
8+
from sanic.response import text
99

1010
class Webhook(object):
1111
"""
@@ -17,8 +17,7 @@ class Webhook(object):
1717
"""
1818

1919
def __init__(self, app, endpoint='/postreceive', secret=None):
20-
app.add_url_rule(rule=endpoint, endpoint=endpoint, view_func=self._postreceive,
21-
methods=['POST'])
20+
app.add_route(uri=endpoint, handler=self._postreceive, methods=['POST'])
2221

2322
self._hooks = collections.defaultdict(list)
2423
self._logger = logging.getLogger('webhook')
@@ -40,41 +39,41 @@ def decorator(func):
4039

4140
return decorator
4241

43-
def _get_digest(self):
42+
def _get_digest(self, request):
4443
"""Return message digest if a secret key was provided"""
4544

4645
return hmac.new(
47-
self._secret, request.data, hashlib.sha1).hexdigest() if self._secret else None
46+
self._secret, request.body, hashlib.sha1).hexdigest() if self._secret else None
4847

49-
def _postreceive(self):
48+
def _postreceive(self, request):
5049
"""Callback from Flask"""
5150

52-
digest = self._get_digest()
51+
digest = self._get_digest(request)
5352

5453
if digest is not None:
55-
sig_parts = _get_header('X-Hub-Signature').split('=', 1)
54+
sig_parts = _get_header('X-Hub-Signature', request).split('=', 1)
5655
if not isinstance(digest, six.text_type):
5756
digest = six.text_type(digest)
5857

5958
if (len(sig_parts) < 2 or sig_parts[0] != 'sha1'
6059
or not hmac.compare_digest(sig_parts[1], digest)):
6160
abort(400, 'Invalid signature')
6261

63-
event_type = _get_header('X-Github-Event')
64-
data = request.get_json()
62+
event_type = _get_header('X-Github-Event', request)
63+
data = request.json
6564

6665
if data is None:
6766
abort(400, 'Request body must contain json')
6867

6968
self._logger.info(
70-
'%s (%s)', _format_event(event_type, data), _get_header('X-Github-Delivery'))
69+
'%s (%s)', _format_event(event_type, data), _get_header('X-Github-Delivery', request))
7170

7271
for hook in self._hooks.get(event_type, []):
7372
hook(data)
7473

75-
return '', 204
74+
return text('', 204)
7675

77-
def _get_header(key):
76+
def _get_header(key, request):
7877
"""Return message header"""
7978

8079
try:

0 commit comments

Comments
 (0)