more robust validation for ip bans

This commit is contained in:
albert
2013-02-23 11:16:23 -05:00
parent e7da9b2a37
commit 4c3159b662
3 changed files with 15 additions and 6 deletions

View File

@@ -7,7 +7,12 @@ class IpBansController < ApplicationController
def create
@ip_ban = IpBan.create(params[:ip_ban])
redirect_to ip_bans_path
if @ip_ban.errors.any?
render :action => "new"
else
redirect_to ip_bans_path
end
end
def index

View File

@@ -1,18 +1,20 @@
class IpBan < ActiveRecord::Base
IP_ADDR_REGEX = /\A(?:[0-9]{1,3}\.){3}[0-9]{1,3}\Z/
belongs_to :creator, :class_name => "User"
before_validation :initialize_creator, :on => :create
validates_presence_of :reason, :creator
validates_uniqueness_of :ip_addr
validates_presence_of :reason, :creator, :ip_addr
validates_format_of :ip_addr, :with => IP_ADDR_REGEX
validates_uniqueness_of :ip_addr, :if => lambda {|rec| rec.ip_addr =~ IP_ADDR_REGEX}
def self.is_banned?(ip_addr)
exists?(["ip_addr = ?", ip_addr])
exists?("ip_addr = ?", ip_addr)
end
def self.search(params)
q = scoped
return q if params.blank?
if params[:ip_addr]
if params[:ip_addr].present?
q = q.where("ip_addr = ?", params[:ip_addr])
end

View File

@@ -2,8 +2,10 @@
<div id="a-new">
<h1>New IP Ban</h1>
<%= error_messages_for "ip_ban" %>
<%= simple_form_for(@ip_ban) do |f| %>
<%= f.input :ip_addr %>
<%= f.input :ip_addr, :label => "IP Address" %>
<%= f.input :reason, :input_html => {:size => "50x5"} %>
<%= f.button :submit, "Submit" %>
<% end %>