FIX: staged users are still tl0 but do not trigger spam if 1 week old.

This commit is contained in:
Jeff Wong 2018-06-18 17:05:04 -07:00
parent 630b4570ef
commit 68e4e6a575
4 changed files with 19 additions and 3 deletions

View File

@ -326,7 +326,7 @@ class Post < ActiveRecord::Base
# Prevent new users from posting the same hosts too many times.
def has_host_spam?
return false if acting_user.present? && (acting_user.staged? || acting_user.from_staged? || acting_user.has_trust_level?(TrustLevel[1]))
return false if acting_user.present? && (acting_user.staged? || acting_user.mature_staged? || acting_user.has_trust_level?(TrustLevel[1]))
return false if topic&.private_message?
total_hosts_usage.values.any? { |count| count >= SiteSetting.newuser_spam_host_threshold }

View File

@ -1073,6 +1073,10 @@ class User < ActiveRecord::Base
custom_fields[User::FROM_STAGED]
end
def mature_staged?
from_staged? && self.created_at && self.created_at < 1.week.ago
end
protected
def badge_grant

View File

@ -144,7 +144,7 @@ class Validators::PostValidator < ActiveModel::Validator
private
def acting_user_is_trusted?(post, level = 1)
post.acting_user.present? && (post.acting_user.has_trust_level?(TrustLevel[level]) || post.acting_user.from_staged?)
post.acting_user.present? && post.acting_user.has_trust_level?(TrustLevel[level])
end
def private_message?(post)

View File

@ -967,9 +967,21 @@ describe Post do
expect(post.has_host_spam?).to eq(false)
end
it "doesn't punish previously staged users" do
it "punishes previously staged users that were created within 1 week" do
SiteSetting.newuser_spam_host_threshold = 1
SiteSetting.newuser_max_links = 3
user = Fabricate(:user, staged: true, trust_level: 0)
user.created_at = 1.hour.ago
user.unstage
post = Fabricate(:post, raw: raw, user: user)
expect(post.has_host_spam?).to eq(true)
end
it "doesn't punish previously staged users over 1 week old" do
SiteSetting.newuser_spam_host_threshold = 1
SiteSetting.newuser_max_links = 3
user = Fabricate(:user, staged: true, trust_level: 0)
user.created_at = 1.week.ago
user.unstage
post = Fabricate(:post, raw: raw, user: user)
expect(post.has_host_spam?).to eq(false)