From 826b19f7d4837d9e5d394589b2c2172e067ba0d3 Mon Sep 17 00:00:00 2001 From: Dave Bonner Date: Fri, 3 Feb 2017 12:19:45 -0500 Subject: [PATCH 1/2] enable py3 compatibility for signature verification also, call out test requirements in setup.py. Signed-Off-By: David Bonner --- github_webhook/webhook.py | 7 ++++++- setup.py | 3 ++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/github_webhook/webhook.py b/github_webhook/webhook.py index ee63241..7fe771e 100644 --- a/github_webhook/webhook.py +++ b/github_webhook/webhook.py @@ -3,6 +3,7 @@ import hmac import logging +import six from flask import abort, request @@ -21,6 +22,8 @@ def __init__(self, app, endpoint='/postreceive', secret=None): self._hooks = collections.defaultdict(list) self._logger = logging.getLogger('webhook') + if secret and not isinstance(secret, six.binary_type): + secret = secret.encode('utf-8') self._secret = secret def hook(self, event_type='push'): @@ -50,9 +53,11 @@ def _postreceive(self): if digest is not None: sig_parts = _get_header('X-Hub-Signature').split('=', 1) + if not isinstance(digest, six.text_type): + digest = six.text_type(digest) if (len(sig_parts) < 2 or sig_parts[0] != 'sha1' - or not hmac.compare_digest(sig_parts[1], unicode(digest))): + or not hmac.compare_digest(sig_parts[1], digest)): abort(400, 'Invalid signature') event_type = _get_header('X-Github-Event') diff --git a/setup.py b/setup.py index 388ea76..647a1e3 100644 --- a/setup.py +++ b/setup.py @@ -8,7 +8,8 @@ author_email="achamberlai9@bloomberg.net, fphillips7@bloomberg.net, dkiss1@bloomberg.net, dbeer1@bloomberg.net", license='Apache 2.0', packages=["github_webhook"], - install_requires=['flask'], + install_requires=['flask', 'six'], + tests_require=['mock', 'nose'], classifiers=[ 'Development Status :: 4 - Beta', From b9a84e9cdfb6cd7ada83dcc7293d2e3c07d3d49c Mon Sep 17 00:00:00 2001 From: Dave Bonner Date: Fri, 3 Feb 2017 12:22:07 -0500 Subject: [PATCH 2/2] check for none, not just falsiness Signed-Off-By: David Bonner --- github_webhook/webhook.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/github_webhook/webhook.py b/github_webhook/webhook.py index 7fe771e..24cabc1 100644 --- a/github_webhook/webhook.py +++ b/github_webhook/webhook.py @@ -22,7 +22,7 @@ def __init__(self, app, endpoint='/postreceive', secret=None): self._hooks = collections.defaultdict(list) self._logger = logging.getLogger('webhook') - if secret and not isinstance(secret, six.binary_type): + if secret is not None and not isinstance(secret, six.binary_type): secret = secret.encode('utf-8') self._secret = secret