Sha256: 790812a02654aa6d25d15cadf4bc04dd712da5e2e5c678691f16984bf52ab0c3
Contents?: true
Size: 1.55 KB
Versions: 2
Compression:
Stored size: 1.55 KB
Contents
module DoubleTrouble module Protection extend ActiveSupport::Concern included do class_inheritable_accessor :allow_double_trouble_protection cattr_accessor :double_trouble_nonce_store cattr_accessor :double_trouble_nonce_param helper_method :protect_against_double_trouble?, :double_trouble_nonce_param, :double_trouble_form_nonce self.allow_double_trouble_protection = true end module ClassMethods def protect_from_double_trouble(resource_name, options = {}) self.double_trouble_nonce_param ||= :form_nonce self.double_trouble_nonce_store ||= CachedNonce around_filter(options.slice(:only, :except)) do |controller, action_block| if controller.send(:protect_against_double_trouble?) nonce = controller.params[double_trouble_nonce_param] double_trouble_nonce_store.valid?(nonce) || raise(InvalidNonce) action_block.call controller.instance_variable_get("@#{resource_name}").tap do |resource| resource.present? && !resource.new_record? && double_trouble_nonce_store.store!(nonce) end else action_block.call end end end end module InstanceMethods protected def double_trouble_form_nonce ActiveSupport::SecureRandom.base64(32) end def protect_against_double_trouble? allow_double_trouble_protection && double_trouble_nonce_store && double_trouble_nonce_param end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
double_trouble-0.2.1 | lib/double_trouble/protection.rb |
double_trouble-0.2.0 | lib/double_trouble/protection.rb |