mirror of
https://github.com/zulip/zulip.git
synced 2026-06-30 21:11:04 +08:00
realm: Create RealmAuditLog entries when removing custom emoji.
We also add acting_user parameter to do_remove_realm_emoji in this commit, so that we can use it while creating RealmAuditLog objects.
This commit is contained in:
parent
90898cc9c4
commit
9d9252ef08
@ -1,4 +1,4 @@
|
||||
from typing import IO, Dict
|
||||
from typing import IO, Dict, Optional
|
||||
|
||||
import django.db.utils
|
||||
import orjson
|
||||
@ -64,8 +64,23 @@ def check_add_realm_emoji(
|
||||
return realm_emoji
|
||||
|
||||
|
||||
def do_remove_realm_emoji(realm: Realm, name: str) -> None:
|
||||
def do_remove_realm_emoji(realm: Realm, name: str, *, acting_user: Optional[UserProfile]) -> None:
|
||||
emoji = RealmEmoji.objects.get(realm=realm, name=name, deactivated=False)
|
||||
emoji.deactivated = True
|
||||
emoji.save(update_fields=["deactivated"])
|
||||
notify_realm_emoji(realm, realm.get_emoji())
|
||||
|
||||
realm_emoji_dict = realm.get_emoji()
|
||||
RealmAuditLog.objects.create(
|
||||
realm=realm,
|
||||
acting_user=acting_user,
|
||||
event_type=RealmAuditLog.REALM_EMOJI_REMOVED,
|
||||
event_time=timezone_now(),
|
||||
extra_data=orjson.dumps(
|
||||
{
|
||||
"realm_emoji": dict(sorted(realm_emoji_dict.items())),
|
||||
"deactivated_emoji": realm_emoji_dict[str(emoji.id)],
|
||||
}
|
||||
).decode(),
|
||||
)
|
||||
|
||||
notify_realm_emoji(realm, realm_emoji_dict)
|
||||
|
||||
@ -4257,6 +4257,7 @@ class AbstractRealmAuditLog(models.Model):
|
||||
REALM_LINKIFIER_CHANGED = 224
|
||||
REALM_LINKIFIER_REMOVED = 225
|
||||
REALM_EMOJI_ADDED = 226
|
||||
REALM_EMOJI_REMOVED = 227
|
||||
|
||||
SUBSCRIPTION_CREATED = 301
|
||||
SUBSCRIPTION_ACTIVATED = 302
|
||||
|
||||
@ -22,7 +22,7 @@ from zerver.actions.realm_domains import (
|
||||
do_change_realm_domain,
|
||||
do_remove_realm_domain,
|
||||
)
|
||||
from zerver.actions.realm_emoji import check_add_realm_emoji
|
||||
from zerver.actions.realm_emoji import check_add_realm_emoji, do_remove_realm_emoji
|
||||
from zerver.actions.realm_icon import do_change_icon_source
|
||||
from zerver.actions.realm_linkifiers import (
|
||||
do_add_linkifier,
|
||||
@ -937,3 +937,32 @@ class TestRealmAuditLog(ZulipTestCase):
|
||||
).count(),
|
||||
1,
|
||||
)
|
||||
|
||||
now = timezone_now()
|
||||
do_remove_realm_emoji(user.realm, "test_emoji", acting_user=user)
|
||||
|
||||
deactivated_emoji = EmojiInfo(
|
||||
id=str(realm_emoji.id),
|
||||
name="test_emoji",
|
||||
source_url=get_emoji_url(get_emoji_file_name("img.png", realm_emoji.id), user.realm_id),
|
||||
deactivated=True,
|
||||
author_id=user.id,
|
||||
still_url=None,
|
||||
)
|
||||
realm_emoji_dict[str(realm_emoji.id)] = deactivated_emoji
|
||||
|
||||
expected_extra_data = {
|
||||
"realm_emoji": dict(sorted(realm_emoji_dict.items())),
|
||||
"deactivated_emoji": deactivated_emoji,
|
||||
}
|
||||
|
||||
self.assertEqual(
|
||||
RealmAuditLog.objects.filter(
|
||||
realm=user.realm,
|
||||
event_type=RealmAuditLog.REALM_EMOJI_REMOVED,
|
||||
event_time__gte=now,
|
||||
acting_user=user,
|
||||
extra_data=orjson.dumps(expected_extra_data).decode(),
|
||||
).count(),
|
||||
1,
|
||||
)
|
||||
|
||||
@ -1786,7 +1786,9 @@ class NormalActionsTest(BaseAction):
|
||||
check_realm_emoji_update("events[0]", events[0])
|
||||
|
||||
events = self.verify_action(
|
||||
lambda: do_remove_realm_emoji(self.user_profile.realm, "my_emoji")
|
||||
lambda: do_remove_realm_emoji(
|
||||
self.user_profile.realm, "my_emoji", acting_user=self.user_profile
|
||||
)
|
||||
)
|
||||
check_realm_emoji_update("events[0]", events[0])
|
||||
|
||||
|
||||
@ -1201,14 +1201,14 @@ class MarkdownTest(ZulipTestCase):
|
||||
)
|
||||
|
||||
# Deactivate realm emoji.
|
||||
do_remove_realm_emoji(realm, "green_tick")
|
||||
do_remove_realm_emoji(realm, "green_tick", acting_user=None)
|
||||
converted = markdown_convert(":green_tick:", message_realm=realm, message=msg)
|
||||
self.assertEqual(converted.rendered_content, "<p>:green_tick:</p>")
|
||||
|
||||
def test_deactivated_realm_emoji(self) -> None:
|
||||
# Deactivate realm emoji.
|
||||
realm = get_realm("zulip")
|
||||
do_remove_realm_emoji(realm, "green_tick")
|
||||
do_remove_realm_emoji(realm, "green_tick", acting_user=None)
|
||||
|
||||
msg = Message(sender=self.example_user("hamlet"))
|
||||
converted = markdown_convert(":green_tick:", message_realm=realm, message=msg)
|
||||
|
||||
@ -60,5 +60,5 @@ def delete_emoji(request: HttpRequest, user_profile: UserProfile, emoji_name: st
|
||||
).exists():
|
||||
raise JsonableError(_("Emoji '{}' does not exist").format(emoji_name))
|
||||
check_remove_custom_emoji(user_profile, emoji_name)
|
||||
do_remove_realm_emoji(user_profile.realm, emoji_name)
|
||||
do_remove_realm_emoji(user_profile.realm, emoji_name, acting_user=user_profile)
|
||||
return json_success(request)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user