snapshot of https://github.com/zulip/zulip.git @ 48c69911c7dd4e03b20552eb3bd77ad8151c1357 (2026-09-15)
Some checks failed
Code scanning / CodeQL (push) Failing after 15s
Zulip production suite / Ubuntu 22.04 production build (push) Failing after 26s
Zulip production suite / Debian 12 production install with custom db name and user (push) Has been skipped
Zulip production suite / Ubuntu 22.04 production install and PostgreSQL upgrade with pgroonga (push) Has been skipped
Zulip production suite / Ubuntu 24.04 production install (push) Has been skipped
Zulip production suite / Ubuntu 26.04 production install (push) Has been skipped
Zulip production suite / Debian 13 production install (push) Has been skipped
Zulip production suite / 7.0 Version Upgrade (push) Has been skipped
Zulip production suite / 8.0 Version Upgrade (push) Has been skipped
Zulip production suite / 6.0 Version Upgrade (push) Has been skipped
Zulip production suite / 10.0 Version Upgrade (push) Has been skipped
Zulip production suite / 9.0 Version Upgrade (push) Has been skipped
Zulip production suite / 12.0 Version Upgrade (push) Has been skipped
Zulip production suite / 11.0 Version Upgrade (push) Has been skipped
GitHub Actions Security Analysis with zizmor / zizmor (push) Failing after 3s
Zulip CI / Debian 12 (Python 3.11, backend + documentation) (push) Failing after 26s
Zulip CI / Ubuntu 22.04 (Python 3.10, backend + frontend) (push) Failing after 3s
Zulip CI / Ubuntu 24.04 (Python 3.12, backend) (push) Failing after 25s
Zulip CI / Ubuntu 26.04 (Python 3.14, backend) (push) Failing after 25s
Zulip CI / Debian 13 (Python 3.13, backend) (push) Failing after 28s
Zulip production suite / Required jobs (push) Has been cancelled
Zulip CI / Required jobs (push) Has been cancelled
API Documentation Update Check / check-feature-level-updated (push) Has been cancelled
API Documentation Update Check / notify-if-api-docs-changed (push) Has been cancelled
Some checks failed
Code scanning / CodeQL (push) Failing after 15s
Zulip production suite / Ubuntu 22.04 production build (push) Failing after 26s
Zulip production suite / Debian 12 production install with custom db name and user (push) Has been skipped
Zulip production suite / Ubuntu 22.04 production install and PostgreSQL upgrade with pgroonga (push) Has been skipped
Zulip production suite / Ubuntu 24.04 production install (push) Has been skipped
Zulip production suite / Ubuntu 26.04 production install (push) Has been skipped
Zulip production suite / Debian 13 production install (push) Has been skipped
Zulip production suite / 7.0 Version Upgrade (push) Has been skipped
Zulip production suite / 8.0 Version Upgrade (push) Has been skipped
Zulip production suite / 6.0 Version Upgrade (push) Has been skipped
Zulip production suite / 10.0 Version Upgrade (push) Has been skipped
Zulip production suite / 9.0 Version Upgrade (push) Has been skipped
Zulip production suite / 12.0 Version Upgrade (push) Has been skipped
Zulip production suite / 11.0 Version Upgrade (push) Has been skipped
GitHub Actions Security Analysis with zizmor / zizmor (push) Failing after 3s
Zulip CI / Debian 12 (Python 3.11, backend + documentation) (push) Failing after 26s
Zulip CI / Ubuntu 22.04 (Python 3.10, backend + frontend) (push) Failing after 3s
Zulip CI / Ubuntu 24.04 (Python 3.12, backend) (push) Failing after 25s
Zulip CI / Ubuntu 26.04 (Python 3.14, backend) (push) Failing after 25s
Zulip CI / Debian 13 (Python 3.13, backend) (push) Failing after 28s
Zulip production suite / Required jobs (push) Has been cancelled
Zulip CI / Required jobs (push) Has been cancelled
API Documentation Update Check / check-feature-level-updated (push) Has been cancelled
API Documentation Update Check / notify-if-api-docs-changed (push) Has been cancelled
This commit is contained in:
0
zerver/webhooks/json/__init__.py
Normal file
0
zerver/webhooks/json/__init__.py
Normal file
26
zerver/webhooks/json/doc.md
Normal file
26
zerver/webhooks/json/doc.md
Normal file
@@ -0,0 +1,26 @@
|
||||
# Zulip JSON formatter
|
||||
|
||||
Render JSON payloads nicely in a Zulip code block! This is
|
||||
particularly useful when you want to capture a webhook payload as part
|
||||
of [writing an incoming webhook integration][incoming-webhooks-overview].
|
||||
|
||||
{start_tabs}
|
||||
|
||||
1. {!create-an-incoming-webhook.md!}
|
||||
|
||||
1. {!generate-webhook-url-basic.md!}
|
||||
|
||||
1. Configure your application to send the webhook
|
||||
payload to the **URL** generated above.
|
||||
|
||||
{end_tabs}
|
||||
|
||||
{!congrats.md!}
|
||||
|
||||

|
||||
|
||||
### Related documentation
|
||||
|
||||
{!webhooks-url-specification.md!}
|
||||
|
||||
[incoming-webhooks-overview]: https://zulip.readthedocs.io/en/latest/webhooks/incoming-webhooks-overview.html
|
||||
1
zerver/webhooks/json/fixtures/json_github_push__1_commit.json
Symbolic link
1
zerver/webhooks/json/fixtures/json_github_push__1_commit.json
Symbolic link
@@ -0,0 +1 @@
|
||||
../../github/fixtures/push__1_commit.json
|
||||
1
zerver/webhooks/json/fixtures/json_pingdom_http_up_to_down.json
Symbolic link
1
zerver/webhooks/json/fixtures/json_pingdom_http_up_to_down.json
Symbolic link
@@ -0,0 +1 @@
|
||||
../../pingdom/fixtures/http_up_to_down.json
|
||||
@@ -0,0 +1 @@
|
||||
../../sentry/fixtures/event_for_exception_js.json
|
||||
46
zerver/webhooks/json/tests.py
Normal file
46
zerver/webhooks/json/tests.py
Normal file
@@ -0,0 +1,46 @@
|
||||
import json
|
||||
|
||||
from zerver.lib.test_classes import WebhookTestCase
|
||||
|
||||
|
||||
class JsonHookTests(WebhookTestCase):
|
||||
def test_json_github_push__1_commit_message(self) -> None:
|
||||
"""
|
||||
Tests if json github push 1 commit is handled correctly
|
||||
"""
|
||||
with open("zerver/webhooks/json/fixtures/json_github_push__1_commit.json") as f:
|
||||
original_fixture = json.load(f)
|
||||
|
||||
expected_topic_name = "JSON"
|
||||
expected_message = f"""```json
|
||||
{json.dumps(original_fixture, indent=2)}
|
||||
```"""
|
||||
self.check_webhook("json_github_push__1_commit", expected_topic_name, expected_message)
|
||||
|
||||
def test_json_pingdom_http_up_to_down_message(self) -> None:
|
||||
"""
|
||||
Tests if json pingdom http up to down is handled correctly
|
||||
"""
|
||||
with open("zerver/webhooks/json/fixtures/json_pingdom_http_up_to_down.json") as f:
|
||||
original_fixture = json.load(f)
|
||||
|
||||
expected_topic_name = "JSON"
|
||||
expected_message = f"""```json
|
||||
{json.dumps(original_fixture, indent=2)}
|
||||
```"""
|
||||
self.check_webhook("json_pingdom_http_up_to_down", expected_topic_name, expected_message)
|
||||
|
||||
def test_json_sentry_event_for_exception_js_message(self) -> None:
|
||||
"""
|
||||
Tests if json sentry event for exception js is handled correctly
|
||||
"""
|
||||
with open("zerver/webhooks/json/fixtures/json_sentry_event_for_exception_js.json") as f:
|
||||
original_fixture = json.load(f)
|
||||
|
||||
expected_topic_name = "JSON"
|
||||
expected_message = f"""```json
|
||||
{json.dumps(original_fixture, indent=2)}
|
||||
```"""
|
||||
self.check_webhook(
|
||||
"json_sentry_event_for_exception_js", expected_topic_name, expected_message
|
||||
)
|
||||
40
zerver/webhooks/json/view.py
Normal file
40
zerver/webhooks/json/view.py
Normal file
@@ -0,0 +1,40 @@
|
||||
import json
|
||||
from typing import Any
|
||||
|
||||
from django.http import HttpRequest, HttpResponse
|
||||
|
||||
from zerver.decorator import webhook_view
|
||||
from zerver.lib.response import json_success
|
||||
from zerver.lib.typed_endpoint import JsonBodyPayload, typed_endpoint
|
||||
from zerver.lib.webhooks.common import check_send_webhook_message
|
||||
from zerver.models import UserProfile
|
||||
|
||||
JSON_MESSAGE_TEMPLATE = """
|
||||
```json
|
||||
{webhook_payload}
|
||||
```
|
||||
""".strip()
|
||||
|
||||
|
||||
@webhook_view("JSON")
|
||||
@typed_endpoint
|
||||
def api_json_webhook(
|
||||
request: HttpRequest,
|
||||
user_profile: UserProfile,
|
||||
*,
|
||||
payload: JsonBodyPayload[dict[str, Any]],
|
||||
) -> HttpResponse:
|
||||
body = get_body_for_http_request(payload)
|
||||
topic_name = get_topic_for_http_request(payload)
|
||||
|
||||
check_send_webhook_message(request, user_profile, topic_name, body)
|
||||
return json_success(request)
|
||||
|
||||
|
||||
def get_topic_for_http_request(payload: dict[str, Any]) -> str:
|
||||
return "JSON"
|
||||
|
||||
|
||||
def get_body_for_http_request(payload: dict[str, Any]) -> str:
|
||||
prettypayload = json.dumps(payload, indent=2)
|
||||
return JSON_MESSAGE_TEMPLATE.format(webhook_payload=prettypayload, sort_keys=True)
|
||||
Reference in New Issue
Block a user