aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_controller/mime_type.rb
diff options
context:
space:
mode:
authorrick <rick@spacemonkey.local>2008-05-06 02:58:32 -0700
committerrick <rick@spacemonkey.local>2008-05-06 02:58:32 -0700
commitc8451aeeea200043d8a3e6eae9c49def3a154ddb (patch)
tree95def589e8b777cd641809a9af39e7eaea044960 /actionpack/lib/action_controller/mime_type.rb
parent92e2e5990cc2aa4f699c286ac5d1f73e27ede548 (diff)
downloadrails-c8451aeeea200043d8a3e6eae9c49def3a154ddb.tar.gz
rails-c8451aeeea200043d8a3e6eae9c49def3a154ddb.tar.bz2
rails-c8451aeeea200043d8a3e6eae9c49def3a154ddb.zip
change ActionController::RequestForgeryProtection to use Mime::Type#verify_request? [#73]
Diffstat (limited to 'actionpack/lib/action_controller/mime_type.rb')
-rw-r--r--actionpack/lib/action_controller/mime_type.rb19
1 files changed, 16 insertions, 3 deletions
diff --git a/actionpack/lib/action_controller/mime_type.rb b/actionpack/lib/action_controller/mime_type.rb
index 8c02f20521..f43e2ba06d 100644
--- a/actionpack/lib/action_controller/mime_type.rb
+++ b/actionpack/lib/action_controller/mime_type.rb
@@ -17,6 +17,10 @@ module Mime
# end
# end
class Type
+ @@html_types = Set.new [:html, :all]
+ @@unverifiable_types = Set.new [:text, :json, :csv, :xml, :rss, :atom, :yaml]
+ cattr_reader :html_types, :unverifiable_types
+
# A simple helper class used in parsing the accept header
class AcceptItem #:nodoc:
attr_accessor :order, :name, :q
@@ -153,12 +157,21 @@ module Mime
synonym.to_s == mime_type.to_s || synonym.to_sym == mime_type.to_sym
end
end
-
+
+ # Returns true if ActionPack should check requests using this Mime Type for possible request forgery. See
+ # ActionController::RequestForgerProtection.
+ def verify_request?
+ !@@unverifiable_types.include?(to_sym)
+ end
+
+ def html?
+ @@html_types.include?(to_sym) || @string =~ /html/
+ end
+
private
def method_missing(method, *args)
if method.to_s =~ /(\w+)\?$/
- mime_type = $1.downcase.to_sym
- mime_type == @symbol || (mime_type == :html && @symbol == :all)
+ $1.downcase.to_sym == to_sym
else
super
end