diff app/models/paste.rb @ 70:8f0fb869e770

Limit pastes to 100/hour per IP address.
author Edho Arief <edho@myconan.net>
date Thu, 04 Oct 2012 10:38:08 +0700
parents 36d07f047ec2
children 7bb46d9febad
line wrap: on
line diff
--- a/app/models/paste.rb	Thu Oct 04 10:31:15 2012 +0700
+++ b/app/models/paste.rb	Thu Oct 04 10:38:08 2012 +0700
@@ -1,5 +1,6 @@
 class Paste < ActiveRecord::Base
   attr_accessible :paste
+  before_validation :paste_limit
   before_validation :convert_newlines
   before_validation :set_paste_hash
   validates :paste, :paste_hash, :ip, :presence => true
@@ -13,6 +14,11 @@
     self.paste = self.paste.gsub("\r\n", "\n").gsub("\r", "\n")
   end
 
+  def paste_limit
+    ip_post_recent_count = self.class.where(:ip => self.ip).where('created_at > ?', Time.now - 1.hour).count
+    errors.add :base, :limit if ip_post_recent_count > 100
+  end
+
   def self.fix_all
     self.all.each do |p|
       p.save