Module: Mack::Utils::ForgeryDetector::ClassMethods
- Defined in:
- lib/mack/utils/forgery_detector.rb
Instance Method Summary collapse
-
#disable_forgery_detector(options = {}) ⇒ Object
By default the framework will try to validate incoming HTTP request (other than GET) by validating a secret token stored as hidden field in the posted form.
-
#ignored_actions ⇒ Object
:nodoc:.
Instance Method Details
#disable_forgery_detector(options = {}) ⇒ Object
By default the framework will try to validate incoming HTTP request (other than GET) by validating a secret token stored as hidden field in the posted form.
There are 2 ways of disabling this feature:
-
Globally disabling this feature by setting mack::disable_forgery_detector to true in app_config
-
In a controller, call this method (disable_forgery_detector) to disable the detection for a specified set of methods.
Supported options: :only => list_of_methods.
This directive will tell the framework only disable the detection for the specified list of methods.
:except => list_of_methods
This directive will tell the framework to disable the detection for all methods except the ones specified.
Example: class MyController
include Mack::Controller
disable_forgery_detector :only => [:test1, :test2]
def test1
end
def test2
end
Notes:
-
This method will not work properly if both :only and :except options are passed in
-
In inherited case, the following behavior is to be expected:
-
If the super class declare that it wants to disable detection for all methods, and the subclass declare that it wants to disable detection for only a set of methods, then when the subclass is run, the “disable all detection” from the parent class will be overwritten
-
On the other hand, if the super class declare that it wants to disable a set of methods, and the subclass also declare it wants to disable a set of methods from its own set. Then the “only” list will be the combination of both
-
The first rule apply in inheritance; this method will not work properly if superclass declear “except” list, and subclass declare “only” list
-
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/mack/utils/forgery_detector.rb', line 47 def disable_forgery_detector( = {}) hash = self.ignored_actions hash[:all] = true and return if .empty? # TODO: should raise error if type is invalid type = [:only] ? :only : ([:except] ? :except : :unknown) list = [:only] ? [[:only]].flatten : ([:except] ? [[:except]].flatten : []) if !list.empty? hash[type] ||= [] hash[type] << list hash[type].flatten! hash[type].uniq! hash[:all] = false end end |
#ignored_actions ⇒ Object
:nodoc:
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/mack/utils/forgery_detector.rb', line 63 def ignored_actions # :nodoc: unless @ignored_actions @ignored_actions = {} sc = self.superclass if sc.class_is_a?(Mack::Controller) sc_hash = sc.ignored_actions if sc_hash[:only] @ignored_actions[:only] ||= [] @ignored_actions[:only] << sc_hash[:only] @ignored_actions[:only].flatten! elsif sc_hash[:except] @ignored_actions[:except] ||= [] @ignored_actions[:except] << sc_hash[:except] @ignored_actions[:except].flatten! elsif sc_hash[:all] @ignored_actions[:all] = sc_hash[:all] end end end return @ignored_actions end |