2013-10-25 13:25:02 -04:00
|
|
|
class SpamRule::FlagSockpuppets
|
|
|
|
|
|
|
|
def initialize(post)
|
|
|
|
@post = post
|
|
|
|
end
|
|
|
|
|
|
|
|
def perform
|
2019-02-07 13:46:05 -05:00
|
|
|
I18n.with_locale(SiteSetting.default_locale) do
|
|
|
|
if SiteSetting.flag_sockpuppets && reply_is_from_sockpuppet?
|
|
|
|
flag_sockpuppet_users
|
|
|
|
true
|
|
|
|
else
|
|
|
|
false
|
|
|
|
end
|
2013-10-25 13:25:02 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def reply_is_from_sockpuppet?
|
2015-02-05 13:58:49 -05:00
|
|
|
return false if @post.try(:post_number) == 1
|
2013-10-25 13:25:02 -04:00
|
|
|
|
|
|
|
first_post = @post.topic.posts.by_post_number.first
|
|
|
|
return false if first_post.user.nil?
|
|
|
|
|
2015-02-05 13:58:49 -05:00
|
|
|
!first_post.user.staff? &&
|
|
|
|
!@post.user.staff? &&
|
2016-01-18 18:57:55 -05:00
|
|
|
!first_post.user.staged? &&
|
|
|
|
!@post.user.staged? &&
|
2015-02-05 13:58:49 -05:00
|
|
|
@post.user != first_post.user &&
|
|
|
|
@post.user.ip_address == first_post.user.ip_address &&
|
|
|
|
@post.user.new_user? &&
|
|
|
|
!ScreenedIpAddress.is_whitelisted?(@post.user.ip_address)
|
2013-10-25 13:25:02 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def flag_sockpuppet_users
|
2018-11-07 11:59:42 -05:00
|
|
|
message = I18n.t('flag_reason.sockpuppet', ip_address: @post.user.ip_address, base_path: Discourse.base_path)
|
2016-04-25 17:03:17 -04:00
|
|
|
PostAction.act(Discourse.system_user, @post, PostActionType.types[:spam], message: message) rescue PostAction::AlreadyActed
|
|
|
|
|
2013-10-25 13:25:02 -04:00
|
|
|
if (first_post = @post.topic.posts.by_post_number.first).try(:user).try(:new_user?)
|
2016-04-25 17:03:17 -04:00
|
|
|
PostAction.act(Discourse.system_user, first_post, PostActionType.types[:spam], message: message) rescue PostAction::AlreadyActed
|
2013-10-25 13:25:02 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2015-02-05 13:58:49 -05:00
|
|
|
end
|