FIX: Suspended users should not be allowed to post

This commit is contained in:
Sam 2014-07-31 13:15:16 +10:00
parent e907cca62e
commit 138d013e56
3 changed files with 25 additions and 3 deletions

View File

@ -92,6 +92,7 @@ en:
one: "Sorry, new users can only put one link in a post." one: "Sorry, new users can only put one link in a post."
other: "Sorry, new users can only put %{count} links in a post." other: "Sorry, new users can only put %{count} links in a post."
spamming_host: "Sorry you cannot post a link to that host." spamming_host: "Sorry you cannot post a link to that host."
user_is_suspended: "Suspended users are not allowed to post."
just_posted_that: "is too similar to what you recently posted" just_posted_that: "is too similar to what you recently posted"
has_already_been_used: "has already been used" has_already_been_used: "has already been used"

View File

@ -47,6 +47,10 @@ class PostCreator
@spam @spam
end end
def skip_validations?
@opts[:skip_validations]
end
def guardian def guardian
@guardian ||= Guardian.new(@user) @guardian ||= Guardian.new(@user)
end end
@ -55,6 +59,12 @@ class PostCreator
@topic = nil @topic = nil
@post = nil @post = nil
if @user.suspended? && !skip_validations?
@errors = Post.new.errors
@errors.add(:base, I18n.t(:user_is_suspended))
return
end
transaction do transaction do
setup_topic setup_topic
setup_post setup_post
@ -142,7 +152,7 @@ class PostCreator
{ user: @user, { user: @user,
limit_once_per: 24.hours, limit_once_per: 24.hours,
message_params: {domains: @post.linked_hosts.keys.join(', ')} } ) message_params: {domains: @post.linked_hosts.keys.join(', ')} } )
elsif @post && !@post.errors.present? && !@opts[:skip_validations] elsif @post && !@post.errors.present? && !skip_validations?
SpamRulesEnforcer.enforce!(@post) SpamRulesEnforcer.enforce!(@post)
end end
end end
@ -213,7 +223,7 @@ class PostCreator
end end
def rollback_if_host_spam_detected def rollback_if_host_spam_detected
return if @opts[:skip_validations] return if skip_validations?
if @post.has_host_spam? if @post.has_host_spam?
@post.errors.add(:base, I18n.t(:spamming_host)) @post.errors.add(:base, I18n.t(:spamming_host))
@errors = @post.errors @errors = @post.errors
@ -223,7 +233,7 @@ class PostCreator
end end
def save_post def save_post
unless @post.save(validate: !@opts[:skip_validations]) unless @post.save(validate: !skip_validations?)
@errors = @post.errors @errors = @post.errors
raise ActiveRecord::Rollback.new raise ActiveRecord::Rollback.new
end end

View File

@ -463,5 +463,16 @@ describe PostCreator do
end end
end end
describe "suspended users" do
it "does not allow suspended users to create topics" do
user = Fabricate(:user, suspended_at: 1.month.ago, suspended_till: 1.month.from_now)
creator = PostCreator.new(user, {title: "my test title 123", raw: "I should not be allowed to post"} )
creator.create
creator.errors.count.should be > 0
end
end
end end