instiki/vendor/plugins/form_spam_protection/lib/form_tag_helper_extensions.rb

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