diff --git a/zerver/webhooks/crashlytics/view.py b/zerver/webhooks/crashlytics/view.py index 5fa5c5c762..61ba18e0bb 100644 --- a/zerver/webhooks/crashlytics/view.py +++ b/zerver/webhooks/crashlytics/view.py @@ -1,11 +1,10 @@ # Webhooks for external integrations. -from typing import Any, Dict - from django.http import HttpRequest, HttpResponse from zerver.decorator import webhook_view from zerver.lib.request import REQ, has_request_variables from zerver.lib.response import json_success +from zerver.lib.validator import WildValue, check_int, check_string, to_wild_value from zerver.lib.webhooks.common import check_send_webhook_message from zerver.models import UserProfile @@ -23,7 +22,7 @@ VERIFICATION_EVENT = "verification" def api_crashlytics_webhook( request: HttpRequest, user_profile: UserProfile, - payload: Dict[str, Any] = REQ(argument_type="body"), + payload: WildValue = REQ(argument_type="body", converter=to_wild_value), ) -> HttpResponse: event = payload["event"] if event == VERIFICATION_EVENT: @@ -32,12 +31,12 @@ def api_crashlytics_webhook( else: issue_body = payload["payload"] subject = CRASHLYTICS_TOPIC_TEMPLATE.format( - display_id=issue_body["display_id"], - title=issue_body["title"], + display_id=issue_body["display_id"].tame(check_int), + title=issue_body["title"].tame(check_string), ) body = CRASHLYTICS_MESSAGE_TEMPLATE.format( - impacted_devices_count=issue_body["impacted_devices_count"], - url=issue_body["url"], + impacted_devices_count=issue_body["impacted_devices_count"].tame(check_int), + url=issue_body["url"].tame(check_string), ) check_send_webhook_message(request, user_profile, subject, body)