actionpack 7.0.8.7 → 7.2.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +90 -537
- data/MIT-LICENSE +1 -1
- data/README.rdoc +2 -2
- data/lib/abstract_controller/asset_paths.rb +2 -0
- data/lib/abstract_controller/base.rb +119 -106
- data/lib/abstract_controller/caching/fragments.rb +51 -52
- data/lib/abstract_controller/caching.rb +2 -0
- data/lib/abstract_controller/callbacks.rb +94 -67
- data/lib/abstract_controller/collector.rb +6 -6
- data/lib/abstract_controller/deprecator.rb +9 -0
- data/lib/abstract_controller/error.rb +2 -0
- data/lib/abstract_controller/helpers.rb +121 -91
- data/lib/abstract_controller/logger.rb +2 -0
- data/lib/abstract_controller/railties/routes_helpers.rb +3 -16
- data/lib/abstract_controller/rendering.rb +14 -13
- data/lib/abstract_controller/translation.rb +12 -30
- data/lib/abstract_controller/url_for.rb +9 -5
- data/lib/abstract_controller.rb +8 -0
- data/lib/action_controller/api/api_rendering.rb +2 -0
- data/lib/action_controller/api.rb +78 -73
- data/lib/action_controller/base.rb +199 -141
- data/lib/action_controller/caching.rb +16 -11
- data/lib/action_controller/deprecator.rb +9 -0
- data/lib/action_controller/form_builder.rb +21 -16
- data/lib/action_controller/log_subscriber.rb +19 -5
- data/lib/action_controller/metal/allow_browser.rb +123 -0
- data/lib/action_controller/metal/basic_implicit_render.rb +2 -0
- data/lib/action_controller/metal/conditional_get.rb +187 -174
- data/lib/action_controller/metal/content_security_policy.rb +26 -25
- data/lib/action_controller/metal/cookies.rb +4 -2
- data/lib/action_controller/metal/data_streaming.rb +65 -54
- data/lib/action_controller/metal/default_headers.rb +6 -2
- data/lib/action_controller/metal/etag_with_flash.rb +4 -0
- data/lib/action_controller/metal/etag_with_template_digest.rb +18 -14
- data/lib/action_controller/metal/exceptions.rb +19 -9
- data/lib/action_controller/metal/flash.rb +12 -10
- data/lib/action_controller/metal/head.rb +20 -16
- data/lib/action_controller/metal/helpers.rb +64 -67
- data/lib/action_controller/metal/http_authentication.rb +212 -199
- data/lib/action_controller/metal/implicit_render.rb +21 -17
- data/lib/action_controller/metal/instrumentation.rb +22 -12
- data/lib/action_controller/metal/live.rb +125 -92
- data/lib/action_controller/metal/logging.rb +6 -4
- data/lib/action_controller/metal/mime_responds.rb +151 -142
- data/lib/action_controller/metal/parameter_encoding.rb +34 -32
- data/lib/action_controller/metal/params_wrapper.rb +58 -58
- data/lib/action_controller/metal/permissions_policy.rb +14 -13
- data/lib/action_controller/metal/rate_limiting.rb +62 -0
- data/lib/action_controller/metal/redirecting.rb +110 -84
- data/lib/action_controller/metal/renderers.rb +50 -49
- data/lib/action_controller/metal/rendering.rb +103 -82
- data/lib/action_controller/metal/request_forgery_protection.rb +279 -161
- data/lib/action_controller/metal/rescue.rb +12 -8
- data/lib/action_controller/metal/streaming.rb +174 -132
- data/lib/action_controller/metal/strong_parameters.rb +598 -473
- data/lib/action_controller/metal/testing.rb +2 -0
- data/lib/action_controller/metal/url_for.rb +23 -14
- data/lib/action_controller/metal.rb +145 -61
- data/lib/action_controller/railtie.rb +25 -9
- data/lib/action_controller/railties/helpers.rb +2 -0
- data/lib/action_controller/renderer.rb +105 -66
- data/lib/action_controller/template_assertions.rb +4 -2
- data/lib/action_controller/test_case.rb +157 -128
- data/lib/action_controller.rb +17 -3
- data/lib/action_dispatch/constants.rb +34 -0
- data/lib/action_dispatch/deprecator.rb +9 -0
- data/lib/action_dispatch/http/cache.rb +28 -29
- data/lib/action_dispatch/http/content_disposition.rb +2 -0
- data/lib/action_dispatch/http/content_security_policy.rb +48 -45
- data/lib/action_dispatch/http/filter_parameters.rb +18 -8
- data/lib/action_dispatch/http/filter_redirect.rb +22 -1
- data/lib/action_dispatch/http/headers.rb +23 -21
- data/lib/action_dispatch/http/mime_negotiation.rb +37 -48
- data/lib/action_dispatch/http/mime_type.rb +60 -30
- data/lib/action_dispatch/http/mime_types.rb +5 -1
- data/lib/action_dispatch/http/parameters.rb +12 -10
- data/lib/action_dispatch/http/permissions_policy.rb +32 -27
- data/lib/action_dispatch/http/rack_cache.rb +4 -0
- data/lib/action_dispatch/http/request.rb +132 -79
- data/lib/action_dispatch/http/response.rb +136 -103
- data/lib/action_dispatch/http/upload.rb +19 -15
- data/lib/action_dispatch/http/url.rb +75 -73
- data/lib/action_dispatch/journey/formatter.rb +19 -6
- data/lib/action_dispatch/journey/gtg/builder.rb +4 -3
- data/lib/action_dispatch/journey/gtg/simulator.rb +2 -0
- data/lib/action_dispatch/journey/gtg/transition_table.rb +10 -8
- data/lib/action_dispatch/journey/nfa/dot.rb +2 -0
- data/lib/action_dispatch/journey/nodes/node.rb +6 -5
- data/lib/action_dispatch/journey/parser.rb +4 -3
- data/lib/action_dispatch/journey/parser_extras.rb +2 -0
- data/lib/action_dispatch/journey/path/pattern.rb +18 -15
- data/lib/action_dispatch/journey/route.rb +12 -9
- data/lib/action_dispatch/journey/router/utils.rb +16 -15
- data/lib/action_dispatch/journey/router.rb +13 -10
- data/lib/action_dispatch/journey/routes.rb +6 -4
- data/lib/action_dispatch/journey/scanner.rb +4 -2
- data/lib/action_dispatch/journey/visitors.rb +2 -0
- data/lib/action_dispatch/journey.rb +2 -0
- data/lib/action_dispatch/log_subscriber.rb +25 -0
- data/lib/action_dispatch/middleware/actionable_exceptions.rb +7 -6
- data/lib/action_dispatch/middleware/assume_ssl.rb +27 -0
- data/lib/action_dispatch/middleware/callbacks.rb +4 -0
- data/lib/action_dispatch/middleware/cookies.rb +192 -194
- data/lib/action_dispatch/middleware/debug_exceptions.rb +36 -27
- data/lib/action_dispatch/middleware/debug_locks.rb +18 -13
- data/lib/action_dispatch/middleware/debug_view.rb +9 -2
- data/lib/action_dispatch/middleware/exception_wrapper.rb +181 -27
- data/lib/action_dispatch/middleware/executor.rb +9 -1
- data/lib/action_dispatch/middleware/flash.rb +65 -46
- data/lib/action_dispatch/middleware/host_authorization.rb +22 -17
- data/lib/action_dispatch/middleware/public_exceptions.rb +12 -8
- data/lib/action_dispatch/middleware/reloader.rb +9 -5
- data/lib/action_dispatch/middleware/remote_ip.rb +88 -83
- data/lib/action_dispatch/middleware/request_id.rb +15 -8
- data/lib/action_dispatch/middleware/server_timing.rb +8 -6
- data/lib/action_dispatch/middleware/session/abstract_store.rb +7 -0
- data/lib/action_dispatch/middleware/session/cache_store.rb +14 -7
- data/lib/action_dispatch/middleware/session/cookie_store.rb +32 -25
- data/lib/action_dispatch/middleware/session/mem_cache_store.rb +9 -3
- data/lib/action_dispatch/middleware/show_exceptions.rb +42 -28
- data/lib/action_dispatch/middleware/ssl.rb +60 -45
- data/lib/action_dispatch/middleware/stack.rb +15 -9
- data/lib/action_dispatch/middleware/static.rb +40 -34
- data/lib/action_dispatch/middleware/templates/rescues/_actions.html.erb +2 -2
- data/lib/action_dispatch/middleware/templates/rescues/_message_and_suggestions.html.erb +4 -4
- data/lib/action_dispatch/middleware/templates/rescues/_source.html.erb +8 -1
- data/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb +7 -7
- data/lib/action_dispatch/middleware/templates/rescues/diagnostics.text.erb +2 -2
- data/lib/action_dispatch/middleware/templates/rescues/layout.erb +17 -0
- data/lib/action_dispatch/middleware/templates/rescues/missing_exact_template.html.erb +16 -12
- data/lib/action_dispatch/middleware/templates/rescues/missing_template.html.erb +1 -1
- data/lib/action_dispatch/middleware/templates/rescues/routing_error.html.erb +3 -3
- data/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb +4 -4
- data/lib/action_dispatch/middleware/templates/rescues/unknown_action.html.erb +1 -1
- data/lib/action_dispatch/middleware/templates/rescues/unknown_action.text.erb +1 -1
- data/lib/action_dispatch/middleware/templates/routes/_route.html.erb +3 -0
- data/lib/action_dispatch/middleware/templates/routes/_table.html.erb +47 -38
- data/lib/action_dispatch/railtie.rb +12 -4
- data/lib/action_dispatch/request/session.rb +39 -27
- data/lib/action_dispatch/request/utils.rb +10 -3
- data/lib/action_dispatch/routing/endpoint.rb +2 -0
- data/lib/action_dispatch/routing/inspector.rb +59 -9
- data/lib/action_dispatch/routing/mapper.rb +686 -639
- data/lib/action_dispatch/routing/polymorphic_routes.rb +70 -61
- data/lib/action_dispatch/routing/redirection.rb +52 -38
- data/lib/action_dispatch/routing/route_set.rb +106 -62
- data/lib/action_dispatch/routing/routes_proxy.rb +16 -19
- data/lib/action_dispatch/routing/url_for.rb +131 -122
- data/lib/action_dispatch/routing.rb +152 -150
- data/lib/action_dispatch/system_test_case.rb +91 -81
- data/lib/action_dispatch/system_testing/browser.rb +27 -19
- data/lib/action_dispatch/system_testing/driver.rb +16 -22
- data/lib/action_dispatch/system_testing/server.rb +2 -0
- data/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb +53 -31
- data/lib/action_dispatch/system_testing/test_helpers/setup_and_teardown.rb +2 -0
- data/lib/action_dispatch/testing/assertion_response.rb +9 -7
- data/lib/action_dispatch/testing/assertions/response.rb +36 -26
- data/lib/action_dispatch/testing/assertions/routing.rb +203 -95
- data/lib/action_dispatch/testing/assertions.rb +5 -1
- data/lib/action_dispatch/testing/integration.rb +240 -229
- data/lib/action_dispatch/testing/request_encoder.rb +6 -1
- data/lib/action_dispatch/testing/test_helpers/page_dump_helper.rb +35 -0
- data/lib/action_dispatch/testing/test_process.rb +14 -9
- data/lib/action_dispatch/testing/test_request.rb +4 -2
- data/lib/action_dispatch/testing/test_response.rb +34 -19
- data/lib/action_dispatch.rb +52 -21
- data/lib/action_pack/gem_version.rb +6 -4
- data/lib/action_pack/version.rb +3 -1
- data/lib/action_pack.rb +18 -17
- metadata +86 -27
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# :markup: markdown
|
4
|
+
|
3
5
|
require "action_dispatch/journey/router/utils"
|
4
6
|
require "action_dispatch/journey/routes"
|
5
7
|
require "action_dispatch/journey/formatter"
|
@@ -22,14 +24,14 @@ module ActionDispatch
|
|
22
24
|
end
|
23
25
|
|
24
26
|
def eager_load!
|
25
|
-
# Eagerly trigger the simulator's initialization so
|
26
|
-
#
|
27
|
+
# Eagerly trigger the simulator's initialization so it doesn't happen during a
|
28
|
+
# request cycle.
|
27
29
|
simulator
|
28
30
|
nil
|
29
31
|
end
|
30
32
|
|
31
33
|
def serve(req)
|
32
|
-
find_routes(req)
|
34
|
+
find_routes(req) do |match, parameters, route|
|
33
35
|
set_params = req.path_parameters
|
34
36
|
path_info = req.path_info
|
35
37
|
script_name = req.script_name
|
@@ -46,24 +48,25 @@ module ActionDispatch
|
|
46
48
|
}
|
47
49
|
|
48
50
|
req.path_parameters = tmp_params
|
51
|
+
req.route_uri_pattern = route.path.spec.to_s
|
49
52
|
|
50
|
-
|
53
|
+
_, headers, _ = response = route.app.serve(req)
|
51
54
|
|
52
|
-
if "pass" == headers[
|
55
|
+
if "pass" == headers[Constants::X_CASCADE]
|
53
56
|
req.script_name = script_name
|
54
57
|
req.path_info = path_info
|
55
58
|
req.path_parameters = set_params
|
56
59
|
next
|
57
60
|
end
|
58
61
|
|
59
|
-
return
|
62
|
+
return response
|
60
63
|
end
|
61
64
|
|
62
|
-
[404, {
|
65
|
+
[404, { Constants::X_CASCADE => "pass" }, ["Not Found"]]
|
63
66
|
end
|
64
67
|
|
65
68
|
def recognize(rails_req)
|
66
|
-
find_routes(rails_req)
|
69
|
+
find_routes(rails_req) do |match, parameters, route|
|
67
70
|
unless route.path.anchored
|
68
71
|
rails_req.script_name = match.to_s
|
69
72
|
rails_req.path_info = match.post_match
|
@@ -120,14 +123,14 @@ module ActionDispatch
|
|
120
123
|
|
121
124
|
routes.sort_by!(&:precedence)
|
122
125
|
|
123
|
-
routes.
|
126
|
+
routes.each { |r|
|
124
127
|
match_data = r.path.match(path_info)
|
125
128
|
path_parameters = {}
|
126
129
|
match_data.names.each_with_index { |name, i|
|
127
130
|
val = match_data[i + 1]
|
128
131
|
path_parameters[name.to_sym] = Utils.unescape_uri(val) if val
|
129
132
|
}
|
130
|
-
[match_data, path_parameters, r]
|
133
|
+
yield [match_data, path_parameters, r]
|
131
134
|
}
|
132
135
|
end
|
133
136
|
|
@@ -1,16 +1,18 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# :markup: markdown
|
4
|
+
|
3
5
|
module ActionDispatch
|
4
6
|
module Journey # :nodoc:
|
5
|
-
# The Routing table. Contains all routes for a system. Routes can be
|
6
|
-
#
|
7
|
+
# The Routing table. Contains all routes for a system. Routes can be added to
|
8
|
+
# the table by calling Routes#add_route.
|
7
9
|
class Routes # :nodoc:
|
8
10
|
include Enumerable
|
9
11
|
|
10
12
|
attr_reader :routes, :custom_routes, :anchored_routes
|
11
13
|
|
12
|
-
def initialize
|
13
|
-
@routes =
|
14
|
+
def initialize(routes = [])
|
15
|
+
@routes = routes
|
14
16
|
@ast = nil
|
15
17
|
@anchored_routes = []
|
16
18
|
@custom_routes = []
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# :markup: markdown
|
4
|
+
|
3
5
|
require "strscan"
|
4
6
|
|
5
7
|
module ActionDispatch
|
@@ -33,8 +35,8 @@ module ActionDispatch
|
|
33
35
|
end
|
34
36
|
|
35
37
|
private
|
36
|
-
# takes advantage of String @- deduping capabilities in Ruby 2.5 upwards
|
37
|
-
#
|
38
|
+
# takes advantage of String @- deduping capabilities in Ruby 2.5 upwards see:
|
39
|
+
# https://bugs.ruby-lang.org/issues/13077
|
38
40
|
def dedup_scan(regex)
|
39
41
|
r = @ss.scan(regex)
|
40
42
|
r ? -r : nil
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# :markup: markdown
|
4
|
+
|
5
|
+
module ActionDispatch
|
6
|
+
class LogSubscriber < ActiveSupport::LogSubscriber
|
7
|
+
def redirect(event)
|
8
|
+
payload = event.payload
|
9
|
+
|
10
|
+
info { "Redirected to #{payload[:location]}" }
|
11
|
+
|
12
|
+
info do
|
13
|
+
status = payload[:status]
|
14
|
+
|
15
|
+
message = +"Completed #{status} #{Rack::Utils::HTTP_STATUS_CODES[status]} in #{event.duration.round}ms"
|
16
|
+
message << "\n\n" if defined?(Rails.env) && Rails.env.development?
|
17
|
+
|
18
|
+
message
|
19
|
+
end
|
20
|
+
end
|
21
|
+
subscribe_log_level :redirect, :info
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
ActionDispatch::LogSubscriber.attach_to :action_dispatch
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
# :markup: markdown
|
4
|
+
|
4
5
|
require "uri"
|
5
6
|
require "active_support/actionable_error"
|
6
7
|
|
@@ -30,15 +31,15 @@ module ActionDispatch
|
|
30
31
|
uri = URI.parse location
|
31
32
|
|
32
33
|
if uri.relative? || uri.scheme == "http" || uri.scheme == "https"
|
33
|
-
body = "
|
34
|
+
body = ""
|
34
35
|
else
|
35
|
-
return [400, {
|
36
|
+
return [400, { Rack::CONTENT_TYPE => "text/plain; charset=utf-8" }, ["Invalid redirection URI"]]
|
36
37
|
end
|
37
38
|
|
38
39
|
[302, {
|
39
|
-
|
40
|
-
|
41
|
-
|
40
|
+
Rack::CONTENT_TYPE => "text/html; charset=#{Response.default_charset}",
|
41
|
+
Rack::CONTENT_LENGTH => body.bytesize.to_s,
|
42
|
+
ActionDispatch::Constants::LOCATION => location,
|
42
43
|
}, [body]]
|
43
44
|
end
|
44
45
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# :markup: markdown
|
4
|
+
|
5
|
+
module ActionDispatch
|
6
|
+
# # Action Dispatch AssumeSSL
|
7
|
+
#
|
8
|
+
# When proxying through a load balancer that terminates SSL, the forwarded
|
9
|
+
# request will appear as though it's HTTP instead of HTTPS to the application.
|
10
|
+
# This makes redirects and cookie security target HTTP instead of HTTPS. This
|
11
|
+
# middleware makes the server assume that the proxy already terminated SSL, and
|
12
|
+
# that the request really is HTTPS.
|
13
|
+
class AssumeSSL
|
14
|
+
def initialize(app)
|
15
|
+
@app = app
|
16
|
+
end
|
17
|
+
|
18
|
+
def call(env)
|
19
|
+
env["HTTPS"] = "on"
|
20
|
+
env["HTTP_X_FORWARDED_PORT"] = "443"
|
21
|
+
env["HTTP_X_FORWARDED_PROTO"] = "https"
|
22
|
+
env["rack.url_scheme"] = "https"
|
23
|
+
|
24
|
+
@app.call(env)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|