Send events on muted user forbidden actions

If a muted user attempts to message a subreddit, the details text is
"muted". If a subreddit attempts to message a user that has been muted,
the details text is "muted mod".
This commit is contained in:
MelissaCole
2015-08-21 11:32:47 -07:00
parent ea21528b1f
commit 9e22c22e86
2 changed files with 55 additions and 1 deletions

View File

@@ -354,7 +354,6 @@ class ApiController(RedditController):
if (form.has_errors("to",
errors.USER_DOESNT_EXIST, errors.NO_USER,
errors.SUBREDDIT_NOEXIST, errors.USER_BLOCKED,
errors.USER_MUTED,
) or
form.has_errors("subject", errors.NO_SUBJECT) or
form.has_errors("subject", errors.TOO_LONG) or
@@ -364,6 +363,11 @@ class ApiController(RedditController):
form.has_errors("from_sr", errors.SUBREDDIT_NOEXIST)):
return
if form.has_errors("to", errors.USER_MUTED):
g.events.muted_forbidden_event("muted", target=to,
request=request, context=c)
return
if from_sr and isinstance(to, Subreddit):
c.errors.add(errors.NO_SR_TO_SR_MESSAGE, field="from")
form.has_errors("from", errors.NO_SR_TO_SR_MESSAGE)
@@ -385,6 +389,8 @@ class ApiController(RedditController):
elif from_sr.is_muted(to) and not c.user_is_admin:
c.errors.add(errors.MUTED_FROM_SUBREDDIT, field="to")
form.has_errors("to", errors.MUTED_FROM_SUBREDDIT)
g.events.muted_forbidden_event("muted mod", subreddit=from_sr,
target=to, request=request, context=c)
return
m, inbox_rel = Message._new(c.user, to, subject, body, request.ip,
sr=from_sr, from_sr=True)
@@ -1959,14 +1965,24 @@ class ApiController(RedditController):
user_muted_error = False
if sr.is_muted(message.author_slow):
user_muted_error = True
muted_user = message.author_slow
elif message.to_id and sr.is_muted(message.recipient_slow):
user_muted_error = True
muted_user = message.recipient_slow
if user_muted_error:
if sr.is_moderator(c.user):
c.errors.add(errors.MUTED_FROM_SUBREDDIT, field="parent")
g.events.muted_forbidden_event("muted mod",
sr, parent_message=parent, target=muted_user,
request=request, context=c,
)
else:
c.errors.add(errors.USER_MUTED, field="parent")
g.events.muted_forbidden_event("muted",
parent_message=parent, target=sr,
request=request, context=c,
)
is_message = True
should_ratelimit = False

View File

@@ -248,6 +248,44 @@ class EventQueue(object):
self.save_event(event_base)
@squelch_exceptions
def muted_forbidden_event(self, details_text, subreddit=None,
parent_message=None, target=None, request=None, context=None):
"""Create a mute-related 'forbidden_event' for event-collector.
details_text: "muted" if a muted user is trying to message the
subreddit or "muted mod" if the subreddit mod is attempting
to message the muted user
subreddit: The Subreddit of the mod messaging the muted user
parent_message: Message that is being responded to
target: The intended recipient (Subreddit or Account)
request, context: Should be pylons.request & pylons.c respectively;
"""
event = EventV2(
topic="forbidden_actions",
event_type="ss.forbidden_message_attempt",
request=request,
context=context,
)
event.add("details_text", details_text)
if parent_message:
event.add("parent_message_id", parent_message._id)
event.add("parent_message_fullname", parent_message._fullname)
if subreddit:
event.add("sr_id", subreddit._id)
event.add("sr_name", subreddit.name)
if target:
event.add("target_id", target._id)
event.add("target_fullname", target._fullname)
event.add("target_name", target.name)
event.add("target_type", target.__class__.__name__.lower())
self.save_event(event)
@squelch_exceptions
@sampled("events_collector_mod_sample_rate")
def mod_event(self, modaction, subreddit, mod, target=None,