Browse Source

Encode webhook POST body as utf-8. Fixes #130

pull/133/head
Pēteris Caune 7 years ago
parent
commit
8d58a3a361
2 changed files with 18 additions and 2 deletions
  1. +17
    -1
      hc/api/tests/test_notify.py
  2. +1
    -1
      hc/api/transports.py

+ 17
- 1
hc/api/tests/test_notify.py View File

@ -1,3 +1,5 @@
# coding: utf-8
from datetime import timedelta as td
import json
@ -7,6 +9,7 @@ from hc.api.models import Channel, Check, Notification
from hc.test import BaseTestCase
from mock import patch
from requests.exceptions import ConnectionError, Timeout
from six import binary_type
class NotifyTestCase(BaseTestCase):
@ -100,7 +103,8 @@ class NotifyTestCase(BaseTestCase):
self.assertEqual(args[1], "http://example.com")
# spaces should not have been urlencoded:
self.assertTrue(kwargs["data"].startswith("The Time Is 2"))
payload = kwargs["data"].decode("utf-8")
self.assertTrue(payload.startswith("The Time Is 2"))
@patch("hc.api.transports.requests.request")
def test_webhooks_dollarsign_escaping(self, mock_get):
@ -129,6 +133,18 @@ class NotifyTestCase(BaseTestCase):
"get", "http://bar", headers={"User-Agent": "healthchecks.io"},
timeout=5)
@patch("hc.api.transports.requests.request")
def test_webhooks_handle_unicode_post_body(self, mock_request):
template = u"http://example.com\n\n(╯°□°)╯︵ ┻━┻"
self._setup_data("webhook", template)
self.check.save()
self.channel.notify(self.check)
args, kwargs = mock_request.call_args
# unicode should be encoded into utf-8
self.assertTrue(isinstance(kwargs["data"], binary_type))
def test_email(self):
self._setup_data("email", "[email protected]")
self.channel.notify(self.check)


+ 1
- 1
hc/api/transports.py View File

@ -156,7 +156,7 @@ class Webhook(HttpTransport):
url = self.prepare(url, check, urlencode=True)
if self.channel.post_data:
payload = self.prepare(self.channel.post_data, check)
return self.post(url, data=payload)
return self.post(url, data=payload.encode("utf-8"))
else:
return self.get(url)


Loading…
Cancel
Save