# frozen_string_literal: true class SpamRule::FlagSockpuppets def initialize(post) @post = post end def perform I18n.with_locale(SiteSetting.default_locale) do if SiteSetting.flag_sockpuppets && reply_is_from_sockpuppet? flag_sockpuppet_users true else false end end end def reply_is_from_sockpuppet? return false if @post.try(:post_number) == 1 return false if first_post.user.nil? !first_post.user.staff? && !@post.user.staff? && !first_post.user.staged? && !@post.user.staged? && @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) end def flag_sockpuppet_users message = I18n.t( 'flag_reason.sockpuppet', ip_address: @post.user.ip_address, base_path: Discourse.base_path, locale: SiteSetting.default_locale ) flag_post(@post, message) flag_post(first_post, message) if first_post&.user&.new_user? end private def flag_post(post, message) can_trust_user = ReviewableFlaggedPost.where(status: Reviewable.statuses[:rejected], target_created_by: post.user).exists? return if can_trust_user PostActionCreator.create(Discourse.system_user, post, :spam, message: message) end def first_post @first_post ||= @post.topic.posts.by_post_number.first end end