mirror of
https://github.com/zulip/zulip.git
synced 2025-10-23 16:14:02 +00:00
45 lines
1.6 KiB
Python
45 lines
1.6 KiB
Python
from typing import Annotated
|
|
|
|
from django.http import HttpRequest, HttpResponse
|
|
from django.utils.translation import gettext as _
|
|
from django.utils.translation import override as override_language
|
|
from pydantic import StringConstraints
|
|
|
|
from zerver.lib.exceptions import JsonableError
|
|
from zerver.lib.message import access_message
|
|
from zerver.lib.message_report import send_message_report
|
|
from zerver.lib.response import json_success
|
|
from zerver.lib.typed_endpoint import typed_endpoint
|
|
from zerver.lib.typed_endpoint_validators import check_string_in_validator
|
|
from zerver.models import Realm, UserProfile
|
|
|
|
|
|
@typed_endpoint
|
|
def report_message_backend(
|
|
request: HttpRequest,
|
|
user_profile: UserProfile,
|
|
message_id: int,
|
|
*,
|
|
description: Annotated[
|
|
str, StringConstraints(max_length=Realm.MAX_REPORT_MESSAGE_EXPLANATION_LENGTH)
|
|
] = "",
|
|
report_type: Annotated[str, check_string_in_validator(Realm.REPORT_MESSAGE_REASONS)],
|
|
) -> HttpResponse:
|
|
if report_type == "other" and description == "":
|
|
raise JsonableError(_("An explanation is required."))
|
|
|
|
if user_profile.realm.moderation_request_channel is None:
|
|
raise JsonableError(_("Message reporting is not enabled in this organization."))
|
|
|
|
reported_message = access_message(user_profile, message_id, is_modifying_message=False)
|
|
with override_language(user_profile.realm.default_language):
|
|
send_message_report(
|
|
user_profile,
|
|
user_profile.realm,
|
|
reported_message,
|
|
report_type,
|
|
description,
|
|
)
|
|
|
|
return json_success(request)
|