Skip to content

Commit

Permalink
Merge pull request #1281 from python-discord/jb3/github-webhook-no-st…
Browse files Browse the repository at this point in the history
…atus

Don't propagate the status received from Discord to GitHub Webhook
  • Loading branch information
jb3 committed Apr 1, 2024
2 parents 04672bb + 3d04acc commit 5d4e729
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 5 deletions.
20 changes: 18 additions & 2 deletions pydis_site/apps/api/tests/test_github_webhook_filter.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,10 @@ def test_accepts_interesting_events(self):
context_mock.read.return_value = b'{"status": "ok"}'

response = self.client.post(url, data=payload, headers=headers)
self.assertEqual(response.status_code, context_mock.status)
self.assertEqual(response.headers.get('X-Clacks-Overhead'), 'Joe Armstrong')
response_body = response.json()
self.assertEqual(response.status_code, 200)
self.assertEqual(response_body.get("headers", {}).get("X-Clacks-Overhead"), 'Joe Armstrong')
self.assertEqual(response_body.get("original_status"), 299)

def test_rate_limit_is_logged_to_sentry(self):
url = reverse('api:github-webhook-filter', args=('id', 'token'))
Expand All @@ -60,3 +62,17 @@ def test_rate_limit_is_logged_to_sentry(self):
self.client.post(url, data=payload, headers=headers)

logger.warning.assert_called_once()

def test_other_error_is_logged(self):
url = reverse('api:github-webhook-filter', args=('id', 'token'))
payload = {}
headers = {'X-GitHub-Event': 'pull_request_review'}
with (
mock.patch('urllib.request.urlopen') as urlopen,
mock.patch.object(GitHubWebhookFilterView, "logger") as logger,
):
urlopen.side_effect = HTTPError(None, 451, 'Unavailable For Legal Reasons', {}, None)
logger.warning = mock.PropertyMock()
self.client.post(url, data=payload, headers=headers)

logger.warning.assert_called_once()
23 changes: 20 additions & 3 deletions pydis_site/apps/api/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -303,9 +303,26 @@ def post(self, request: Request, *, webhook_id: str, webhook_token: str) -> Resp
(response_status, headers, body) = self.send_webhook(
webhook_id, webhook_token, request.data, dict(request.headers),
)
headers.pop('Connection', None)
headers.pop('Content-Length', None)
return Response(data=body, headers=headers, status=response_status)

body_decoded = body.decode("utf-8")

if (
not (status.HTTP_200_OK <= response_status < status.HTTP_300_MULTIPLE_CHOICES)
and response_status != status.HTTP_429_TOO_MANY_REQUESTS
):
self.logger.warning(
"Failed to send GitHub webhook to Discord. Response code %d, body: %s",
response_status,
body_decoded,
)

response_body = {
"original_status": response_status,
"data": body_decoded,
"headers": headers,
}

return Response(response_body)

def send_webhook(
self,
Expand Down

0 comments on commit 5d4e729

Please sign in to comment.