diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb index 73882e1348f2ab..40680ef4b7f29c 100644 --- a/app/lib/activitypub/activity/create.rb +++ b/app/lib/activitypub/activity/create.rb @@ -83,8 +83,15 @@ def process_status ApplicationRecord.transaction do @status = Status.create!(@params) attach_tags(@status) + + if seems_spam? + @status = nil + raise ActiveRecord::Rollback + end end + return if @status.nil? + resolve_thread(@status) fetch_replies(@status) distribute @@ -426,4 +433,14 @@ def increment_voters_count! poll.reload retry end + + SPAM_FILTER_MINIMUM_FOLLOWERS = ENV.fetch('SPAM_FILTER_MINIMUM_FOLLOWERS', 2).to_i + SPAM_FILTER_MINIMUM_CREATE_DAYS = ENV.fetch('SPAM_FILTER_MINIMUM_CREATE_DAYS', 2).to_i + SPAM_FILTER_MINIMUM_MENTIONS = ENV.fetch('SPAM_FILTER_MINIMUM_MENTIONS', 2).to_i + def seems_spam? + !@status.account.local? && + @status.account.followers_count <= SPAM_FILTER_MINIMUM_FOLLOWERS && + SPAM_FILTER_MINIMUM_CREATE_DAYS.day.ago <= @status.account.created_at && + SPAM_FILTER_MINIMUM_MENTIONS <= @mentions.count + end end