Skip to content
This repository was archived by the owner on Jul 9, 2024. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 4 additions & 6 deletions emailer.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

import envelopes
Expand All @@ -11,7 +12,7 @@
import os.path
import rollbar
import rollbar.contrib.flask
import sha
import hashlib

app = Flask(__name__)

Expand Down Expand Up @@ -206,15 +207,12 @@ def _get_subject(repo, message):
def _valid_signature(gh_signature, body, secret):
"""Returns True if GitHub signature is valid. False, otherwise."""
def to_str(s):
if isinstance(s, unicode):
return str(s)
else:
return s
return str(s)

gh_signature = to_str(gh_signature)
body = to_str(body)
secret = to_str(secret)

expected_hmac = hmac.new(secret, body, sha)
expected_hmac = hmac.new(secret, body, hashlib.sha1())
expected_signature = to_str('sha1=' + expected_hmac.hexdigest())
return hmac.compare_digest(expected_signature, gh_signature)
3 changes: 1 addition & 2 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
Envelopes==0.4
Flask==0.12.2
Jinja2==2.9.6
MarkupSafe==1.0
MarkupSafe==1.1.1
Werkzeug==0.12.2
blinker==1.4
gunicorn==19.7.1
itsdangerous==0.24
rollbar==0.13.13
wsgiref==0.1.2
10 changes: 5 additions & 5 deletions test_emailer.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import json
import mock
import os
import sha
import hashlib
import unittest
import uuid

Expand Down Expand Up @@ -323,7 +323,7 @@ def test_valid_signature__true__str(self):
"""Verify _valid_signature returns true when signature matches."""
body = '{"rock": "on"}'
secret = str(uuid.uuid4())
h = hmac.new(secret, body, sha)
h = hmac.new(secret, body, hashlib.sha1())
sig = 'sha1=' + h.hexdigest()
gh_sig = sig
self.assertTrue(emailer._valid_signature(gh_sig, body, secret))
Expand All @@ -333,16 +333,16 @@ def test_valid_signature__true__unicode(self):
signature is unicode."""
body = '{"rock": "on"}'
secret = str(uuid.uuid4())
h = hmac.new(secret, body, sha)
h = hmac.new(secret, body, hashlib.sha1())
sig = 'sha1=' + h.hexdigest()
gh_sig = unicode(sig)
gh_sig = sig
self.assertTrue(emailer._valid_signature(gh_sig, body, secret))

def test_valid_signature__false(self):
"""Verify _valid_signature returns False when signature does
not match."""
self.assertFalse(
emailer._valid_signature(str(unicode('adsf')), 'asdf', 'my-secret')
emailer._valid_signature(str('adsf'), 'asdf', 'my-secret')
)


Expand Down