56 lines
2.1 KiB
Ruby
56 lines
2.1 KiB
Ruby
require 'digest/sha1'
|
|
module ActionView
|
|
module Helpers
|
|
module TagHelper
|
|
# Now that form_tag accepts blocks, it was easier to alias tag when name == :form
|
|
def tag_with_form_spam_protection(name, *args)
|
|
returning tag_without_form_spam_protection(name, *args) do |out|
|
|
if name == :form && @protect_form_from_spam
|
|
session[:form_keys] ||= {}
|
|
form_key = Digest::SHA1.hexdigest(self.object_id.to_s + rand.to_s)
|
|
session[:form_keys][form_key] = 0
|
|
out << enkode(hidden_field_tag('_form_key', form_key))
|
|
end
|
|
end
|
|
end
|
|
|
|
alias_method :tag_without_form_spam_protection, :tag
|
|
alias_method :tag, :tag_with_form_spam_protection
|
|
end
|
|
|
|
# module FormTagHelper
|
|
# def form_tag_with_spam_protection(*args, &proc)
|
|
# form_tag_method_with_spam_protection :form_tag, *args, &proc
|
|
# end
|
|
#
|
|
# # alias_method_chain :form_tag, :spam_protection
|
|
# alias_method :form_tag_without_spam_protection, :form_tag
|
|
# alias_method :form_tag, :form_tag_with_spam_protection
|
|
#
|
|
# protected
|
|
# def form_tag_method_with_spam_protection(method_name, *args, &proc)
|
|
# old_method_name = "#{method_name}_without_spam_protection"
|
|
# returning send(old_method_name, *args) do |out|
|
|
# if @protect_form_from_spam
|
|
# session[:form_keys] ||= {}
|
|
# form_key = Digest::SHA1.hexdigest(self.object_id.to_s + rand.to_s)
|
|
# session[:form_keys][form_key] = 0
|
|
# out << enkode(hidden_field_tag('_form_key', form_key))
|
|
# end
|
|
# end
|
|
# end
|
|
#
|
|
#
|
|
# end
|
|
#
|
|
# module PrototypeHelper
|
|
# def form_remote_tag_with_spam_protection(*args, &proc)
|
|
# form_tag_method_with_spam_protection :form_remote_tag, *args, &proc
|
|
# end
|
|
#
|
|
# # alias_method_chain :form_remote_tag, :spam_protection
|
|
# alias_method :form_remote_tag_without_spam_protection, :form_remote_tag
|
|
# alias_method :form_remote_tag, :form_remote_tag_with_spam_protection
|
|
# end
|
|
end
|
|
end |