1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00
rails--rails/actionpack/lib/action_controller.rb

70 lines
1.7 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
require "abstract_controller"
require "action_dispatch"
require "action_controller/metal/strong_parameters"
module ActionController
extend ActiveSupport::Autoload
2015-04-15 14:30:27 -04:00
autoload :API
2009-12-22 18:27:37 -05:00
autoload :Base
autoload :Metal
autoload :Renderer
autoload :FormBuilder
eager_autoload do
autoload :Caching
end
2009-12-22 18:27:37 -05:00
autoload_under "metal" do
eager_autoload do
autoload :Live
end
2009-12-22 18:27:37 -05:00
autoload :ConditionalGet
autoload :ContentSecurityPolicy
autoload :Cookies
2011-04-18 02:17:47 -04:00
autoload :DataStreaming
autoload :DefaultHeaders
autoload :EtagWithTemplateDigest
autoload :EtagWithFlash
Adds support for configuring HTTP Feature Policy (#33439) A HTTP feature policy is Yet Another HTTP header for instructing the browser about which features the application intends to make use of and to lock down access to others. This is a new security mechanism that ensures that should an application become compromised or a third party attempts an unexpected action, the browser will override it and maintain the intended UX. WICG specification: https://wicg.github.io/feature-policy/ The end result is a HTTP header that looks like the following: ``` Feature-Policy: geolocation 'none'; autoplay https://example.com ``` This will prevent the browser from using geolocation and only allow autoplay on `https://example.com`. Full feature list can be found over in the WICG repository[1]. As of today Chrome and Safari have public support[2] for this functionality with Firefox working on support[3] and Edge still pending acceptance of the suggestion[4]. #### Examples Using an initializer ```rb # config/initializers/feature_policy.rb Rails.application.config.feature_policy do |f| f.geolocation :none f.camera :none f.payment "https://secure.example.com" f.fullscreen :self end ``` In a controller ```rb class SampleController < ApplicationController def index feature_policy do |f| f.geolocation "https://example.com" end end end ``` Some of you might realise that the HTTP feature policy looks pretty close to that of a Content Security Policy; and you're right. So much so that I used the Content Security Policy DSL from #31162 as the starting point for this change. This change *doesn't* introduce support for defining a feature policy on an iframe and this has been intentionally done to split the HTTP header and the HTML element (`iframe`) support. If this is successful, I'll look to add that on it's own. Full documentation on HTTP feature policies can be found at https://wicg.github.io/feature-policy/. Google have also published[5] a great in-depth write up of this functionality. [1]: https://github.com/WICG/feature-policy/blob/master/features.md [2]: https://www.chromestatus.com/feature/5694225681219584 [3]: https://bugzilla.mozilla.org/show_bug.cgi?id=1390801 [4]: https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/33507907-support-feature-policy [5]: https://developers.google.com/web/updates/2018/06/feature-policy
2019-07-10 18:33:16 -04:00
autoload :FeaturePolicy
autoload :Flash
2009-12-22 18:27:37 -05:00
autoload :Head
autoload :Helpers
autoload :HttpAuthentication
autoload :BasicImplicitRender
autoload :ImplicitRender
autoload :Instrumentation
autoload :Logging
2009-12-22 18:27:37 -05:00
autoload :MimeResponds
autoload :ParamsWrapper
2009-12-22 18:27:37 -05:00
autoload :Redirecting
autoload :Renderers
2010-01-04 16:59:23 -05:00
autoload :Rendering
autoload :RequestForgeryProtection
2009-12-22 18:27:37 -05:00
autoload :Rescue
autoload :Streaming
autoload :StrongParameters
autoload :ParameterEncoding
2010-01-04 16:59:23 -05:00
autoload :Testing
autoload :UrlFor
2009-12-12 20:41:58 -05:00
end
autoload_under "api" do
autoload :ApiRendering
end
autoload :TestCase, "action_controller/test_case"
autoload :TemplateAssertions, "action_controller/test_case"
end
# Common Active Support usage in Action Controller
require "active_support/core_ext/module/attribute_accessors"
require "active_support/core_ext/load_error"
require "active_support/core_ext/module/attr_internal"
require "active_support/core_ext/name_error"
require "active_support/core_ext/uri"
require "active_support/inflector"