actionpack 7.0.8.6 → 7.1.0.beta1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of actionpack might be problematic. Click here for more details.

Files changed (135) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +318 -423
  3. data/MIT-LICENSE +1 -1
  4. data/README.rdoc +2 -2
  5. data/lib/abstract_controller/base.rb +19 -10
  6. data/lib/abstract_controller/caching/fragments.rb +2 -0
  7. data/lib/abstract_controller/callbacks.rb +31 -6
  8. data/lib/abstract_controller/deprecator.rb +7 -0
  9. data/lib/abstract_controller/helpers.rb +61 -18
  10. data/lib/abstract_controller/railties/routes_helpers.rb +1 -16
  11. data/lib/abstract_controller/rendering.rb +3 -3
  12. data/lib/abstract_controller/translation.rb +1 -27
  13. data/lib/abstract_controller/url_for.rb +2 -0
  14. data/lib/abstract_controller.rb +6 -0
  15. data/lib/action_controller/api.rb +5 -3
  16. data/lib/action_controller/base.rb +3 -17
  17. data/lib/action_controller/caching.rb +2 -0
  18. data/lib/action_controller/deprecator.rb +7 -0
  19. data/lib/action_controller/form_builder.rb +2 -0
  20. data/lib/action_controller/log_subscriber.rb +16 -4
  21. data/lib/action_controller/metal/content_security_policy.rb +1 -1
  22. data/lib/action_controller/metal/data_streaming.rb +2 -0
  23. data/lib/action_controller/metal/default_headers.rb +2 -0
  24. data/lib/action_controller/metal/etag_with_flash.rb +2 -0
  25. data/lib/action_controller/metal/etag_with_template_digest.rb +2 -0
  26. data/lib/action_controller/metal/exceptions.rb +8 -0
  27. data/lib/action_controller/metal/head.rb +8 -6
  28. data/lib/action_controller/metal/helpers.rb +3 -14
  29. data/lib/action_controller/metal/http_authentication.rb +10 -4
  30. data/lib/action_controller/metal/implicit_render.rb +5 -3
  31. data/lib/action_controller/metal/instrumentation.rb +8 -1
  32. data/lib/action_controller/metal/live.rb +24 -0
  33. data/lib/action_controller/metal/mime_responds.rb +2 -2
  34. data/lib/action_controller/metal/params_wrapper.rb +3 -1
  35. data/lib/action_controller/metal/permissions_policy.rb +1 -1
  36. data/lib/action_controller/metal/redirecting.rb +6 -6
  37. data/lib/action_controller/metal/renderers.rb +2 -2
  38. data/lib/action_controller/metal/rendering.rb +0 -7
  39. data/lib/action_controller/metal/request_forgery_protection.rb +138 -50
  40. data/lib/action_controller/metal/rescue.rb +2 -0
  41. data/lib/action_controller/metal/streaming.rb +70 -30
  42. data/lib/action_controller/metal/strong_parameters.rb +89 -50
  43. data/lib/action_controller/metal/url_for.rb +7 -0
  44. data/lib/action_controller/metal.rb +79 -21
  45. data/lib/action_controller/railtie.rb +22 -9
  46. data/lib/action_controller/renderer.rb +98 -65
  47. data/lib/action_controller/test_case.rb +15 -5
  48. data/lib/action_controller.rb +8 -1
  49. data/lib/action_dispatch/constants.rb +32 -0
  50. data/lib/action_dispatch/deprecator.rb +7 -0
  51. data/lib/action_dispatch/http/cache.rb +1 -3
  52. data/lib/action_dispatch/http/content_security_policy.rb +9 -8
  53. data/lib/action_dispatch/http/filter_parameters.rb +15 -14
  54. data/lib/action_dispatch/http/headers.rb +2 -0
  55. data/lib/action_dispatch/http/mime_negotiation.rb +21 -21
  56. data/lib/action_dispatch/http/mime_type.rb +35 -12
  57. data/lib/action_dispatch/http/mime_types.rb +3 -1
  58. data/lib/action_dispatch/http/parameters.rb +1 -1
  59. data/lib/action_dispatch/http/permissions_policy.rb +44 -15
  60. data/lib/action_dispatch/http/rack_cache.rb +2 -0
  61. data/lib/action_dispatch/http/request.rb +48 -14
  62. data/lib/action_dispatch/http/response.rb +78 -59
  63. data/lib/action_dispatch/http/upload.rb +2 -0
  64. data/lib/action_dispatch/journey/formatter.rb +8 -2
  65. data/lib/action_dispatch/journey/path/pattern.rb +14 -14
  66. data/lib/action_dispatch/journey/route.rb +3 -2
  67. data/lib/action_dispatch/journey/router.rb +5 -4
  68. data/lib/action_dispatch/journey/routes.rb +2 -2
  69. data/lib/action_dispatch/log_subscriber.rb +23 -0
  70. data/lib/action_dispatch/middleware/actionable_exceptions.rb +5 -6
  71. data/lib/action_dispatch/middleware/assume_ssl.rb +24 -0
  72. data/lib/action_dispatch/middleware/callbacks.rb +2 -0
  73. data/lib/action_dispatch/middleware/cookies.rb +81 -98
  74. data/lib/action_dispatch/middleware/debug_exceptions.rb +26 -25
  75. data/lib/action_dispatch/middleware/debug_locks.rb +4 -1
  76. data/lib/action_dispatch/middleware/debug_view.rb +7 -2
  77. data/lib/action_dispatch/middleware/exception_wrapper.rb +181 -27
  78. data/lib/action_dispatch/middleware/executor.rb +1 -1
  79. data/lib/action_dispatch/middleware/flash.rb +7 -0
  80. data/lib/action_dispatch/middleware/host_authorization.rb +6 -3
  81. data/lib/action_dispatch/middleware/public_exceptions.rb +5 -3
  82. data/lib/action_dispatch/middleware/reloader.rb +7 -5
  83. data/lib/action_dispatch/middleware/remote_ip.rb +17 -16
  84. data/lib/action_dispatch/middleware/request_id.rb +2 -0
  85. data/lib/action_dispatch/middleware/server_timing.rb +4 -4
  86. data/lib/action_dispatch/middleware/session/abstract_store.rb +5 -0
  87. data/lib/action_dispatch/middleware/session/cache_store.rb +2 -0
  88. data/lib/action_dispatch/middleware/session/cookie_store.rb +11 -5
  89. data/lib/action_dispatch/middleware/session/mem_cache_store.rb +3 -1
  90. data/lib/action_dispatch/middleware/show_exceptions.rb +19 -15
  91. data/lib/action_dispatch/middleware/ssl.rb +18 -6
  92. data/lib/action_dispatch/middleware/stack.rb +7 -2
  93. data/lib/action_dispatch/middleware/static.rb +12 -8
  94. data/lib/action_dispatch/middleware/templates/rescues/_actions.html.erb +2 -2
  95. data/lib/action_dispatch/middleware/templates/rescues/_message_and_suggestions.html.erb +4 -4
  96. data/lib/action_dispatch/middleware/templates/rescues/_source.html.erb +8 -1
  97. data/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb +7 -7
  98. data/lib/action_dispatch/middleware/templates/rescues/diagnostics.text.erb +2 -2
  99. data/lib/action_dispatch/middleware/templates/rescues/layout.erb +17 -0
  100. data/lib/action_dispatch/middleware/templates/rescues/missing_exact_template.html.erb +16 -12
  101. data/lib/action_dispatch/middleware/templates/rescues/missing_template.html.erb +1 -1
  102. data/lib/action_dispatch/middleware/templates/rescues/routing_error.html.erb +3 -3
  103. data/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb +4 -4
  104. data/lib/action_dispatch/middleware/templates/rescues/unknown_action.html.erb +1 -1
  105. data/lib/action_dispatch/middleware/templates/rescues/unknown_action.text.erb +1 -1
  106. data/lib/action_dispatch/middleware/templates/routes/_route.html.erb +3 -0
  107. data/lib/action_dispatch/middleware/templates/routes/_table.html.erb +46 -37
  108. data/lib/action_dispatch/railtie.rb +14 -4
  109. data/lib/action_dispatch/request/session.rb +16 -6
  110. data/lib/action_dispatch/request/utils.rb +8 -3
  111. data/lib/action_dispatch/routing/inspector.rb +54 -6
  112. data/lib/action_dispatch/routing/mapper.rb +26 -14
  113. data/lib/action_dispatch/routing/polymorphic_routes.rb +2 -0
  114. data/lib/action_dispatch/routing/redirection.rb +15 -6
  115. data/lib/action_dispatch/routing/route_set.rb +52 -22
  116. data/lib/action_dispatch/routing/routes_proxy.rb +1 -1
  117. data/lib/action_dispatch/routing/url_for.rb +5 -1
  118. data/lib/action_dispatch/routing.rb +4 -4
  119. data/lib/action_dispatch/system_test_case.rb +3 -3
  120. data/lib/action_dispatch/system_testing/browser.rb +5 -6
  121. data/lib/action_dispatch/system_testing/driver.rb +13 -21
  122. data/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb +27 -16
  123. data/lib/action_dispatch/testing/assertions/response.rb +13 -6
  124. data/lib/action_dispatch/testing/assertions/routing.rb +67 -28
  125. data/lib/action_dispatch/testing/assertions.rb +3 -1
  126. data/lib/action_dispatch/testing/integration.rb +27 -17
  127. data/lib/action_dispatch/testing/request_encoder.rb +4 -1
  128. data/lib/action_dispatch/testing/test_process.rb +4 -3
  129. data/lib/action_dispatch/testing/test_request.rb +1 -1
  130. data/lib/action_dispatch/testing/test_response.rb +23 -9
  131. data/lib/action_dispatch.rb +37 -4
  132. data/lib/action_pack/gem_version.rb +4 -4
  133. data/lib/action_pack/version.rb +1 -1
  134. data/lib/action_pack.rb +1 -1
  135. metadata +55 -33
data/CHANGELOG.md CHANGED
@@ -1,629 +1,524 @@
1
- ## Rails 7.0.8.6 (October 23, 2024) ##
1
+ ## Rails 7.1.0.beta1 (September 13, 2023) ##
2
2
 
3
- * No changes.
3
+ * `AbstractController::Translation.raise_on_missing_translations` removed
4
4
 
5
+ This was a private API, and has been removed in favour of a more broadly applicable
6
+ `config.i18n.raise_on_missing_translations`. See the upgrading guide for more information.
5
7
 
6
- ## Rails 7.0.8.5 (October 15, 2024) ##
7
-
8
- * Avoid regex backtracking in HTTP Token authentication
9
-
10
- [CVE-2024-47887]
11
-
12
- * Avoid regex backtracking in query parameter filtering
13
-
14
- [CVE-2024-41128]
15
-
16
-
17
- ## Rails 7.0.8.4 (June 04, 2024) ##
18
-
19
- * Include the HTTP Permissions-Policy on non-HTML Content-Types
20
- [CVE-2024-28103]
21
-
22
-
23
- ## Rails 7.0.8.3 (May 17, 2024) ##
24
-
25
- * No changes.
8
+ *Alex Ghiculescu*
26
9
 
10
+ * Add `ActionController::Parameters#extract_value` method to allow extracting serialized values from params
27
11
 
28
- ## Rails 7.0.8.2 (May 16, 2024) ##
12
+ ```ruby
13
+ params = ActionController::Parameters.new(id: "1_123", tags: "ruby,rails")
14
+ params.extract_value(:id) # => ["1", "123"]
15
+ params.extract_value(:tags, delimiter: ",") # => ["ruby", "rails"]
16
+ ```
29
17
 
30
- * No changes.
18
+ *Nikita Vasilevsky*
31
19
 
20
+ * Parse JSON `response.parsed_body` with `ActiveSupport::HashWithIndifferentAccess`
32
21
 
33
- ## Rails 7.0.8.1 (February 21, 2024) ##
22
+ Integrate with Minitest's new `assert_pattern` by parsing the JSON contents
23
+ of `response.parsed_body` with `ActiveSupport::HashWithIndifferentAccess`, so
24
+ that it's pattern-matching compatible.
34
25
 
35
- * Fix possible XSS vulnerability with the `translate` method in controllers
26
+ *Sean Doyle*
36
27
 
37
- CVE-2024-26143
28
+ * Add support for Playwright as a driver for system tests.
38
29
 
39
- ## Rails 7.0.8 (September 09, 2023) ##
30
+ *Yuki Nishijima*
40
31
 
41
32
  * Fix `HostAuthorization` potentially displaying the value of the
42
33
  X_FORWARDED_HOST header when the HTTP_HOST header is being blocked.
43
34
 
44
35
  *Hartley McGuire*, *Daniel Schlosser*
45
36
 
37
+ * Rename `fixture_file_upload` method to `file_fixture_upload`
46
38
 
47
- ## Rails 7.0.7.2 (August 22, 2023) ##
48
-
49
- * No changes.
50
-
51
-
52
- ## Rails 7.0.7.1 (August 22, 2023) ##
53
-
54
- * No changes.
55
-
56
-
57
- ## Rails 7.0.7 (August 09, 2023) ##
58
-
59
- * No changes.
60
-
61
-
62
- ## Rails 7.0.6 (June 29, 2023) ##
63
-
64
- * No changes.
65
-
66
-
67
- ## Rails 7.0.5.1 (June 26, 2023) ##
68
-
69
- * Raise an exception if illegal characters are provide to redirect_to
70
- [CVE-2023-28362]
71
-
72
- *Zack Deveau*
73
-
74
- ## Rails 7.0.5 (May 24, 2023) ##
75
-
76
- * Do not return CSP headers for 304 Not Modified responses.
77
-
78
- *Tobias Kraze*
79
-
80
- * Fix `EtagWithFlash` when there is no `Flash` middleware available.
81
-
82
- *fatkodima*
83
-
84
- * Fix content-type header with `send_stream`.
85
-
86
- *Elliot Crosby-McCullough*
87
-
88
- * Address Selenium `:capabilities` deprecation warning.
89
-
90
- *Ron Shinall*
91
-
92
- * Fix cookie domain for domain: all on two letter single level TLD.
93
-
94
- *John Hawthorn*
95
-
96
- * Don't double log the `controller`, `action`, or `namespaced_controller` when using `ActiveRecord::QueryLog`
97
-
98
- Previously if you set `config.active_record.query_log_tags` to an array that included
99
- `:controller`, `:namespaced_controller`, or `:action`, that item would get logged twice.
100
- This bug has been fixed.
101
-
102
- *Alex Ghiculescu*
103
-
104
- * Rescue `EOFError` exception from `rack` on a multipart request.
105
-
106
- *Nikita Vasilevsky*
107
-
108
- * Rescue `JSON::ParserError` in Cookies json deserializer to discards marshal dumps:
109
-
110
- Without this change, if `action_dispatch.cookies_serializer` is set to `:json` and
111
- the app tries to read a `:marshal` serialized cookie, it would error out which wouldn't
112
- clear the cookie and force app users to manually clear it in their browser.
113
-
114
- (See #45127 for original bug discussion)
115
-
116
- *Nathan Bardoux*
117
-
118
- ## Rails 7.0.4.3 (March 13, 2023) ##
119
-
120
- * No changes.
121
-
39
+ Declare an alias to preserve the backwards compatibility of `fixture_file_upload`
122
40
 
123
- ## Rails 7.0.4.2 (January 24, 2023) ##
41
+ *Sean Doyle*
124
42
 
125
- * Fix `domain: :all` for two letter TLD
43
+ * `ActionDispatch::SystemTesting::TestHelpers::ScreenshotHelper` saves the screenshot path in test metadata on failure.
126
44
 
127
- This fixes a compatibility issue introduced in our previous security
128
- release when using `domain: :all` with a two letter but single level top
129
- level domain domain (like `.ca`, rather than `.co.uk`).
45
+ *Matija Čupić*
130
46
 
47
+ * `config.dom_testing_default_html_version` controls the HTML parser used by
48
+ `ActionDispatch::Assertions#html_document`.
131
49
 
132
- ## Rails 7.0.4.1 (January 17, 2023) ##
50
+ The Rails 7.1 default configuration opts into the HTML5 parser when it is supported, to better
51
+ represent what the DOM would be in a browser user agent. Previously this test helper always used
52
+ Nokogiri's HTML4 parser.
133
53
 
134
- * Fix sec issue with _url_host_allowed?
54
+ *Mike Dalessio*
135
55
 
136
- Disallow certain strings from `_url_host_allowed?` to avoid a redirect
137
- to malicious sites.
138
-
139
- [CVE-2023-22797]
140
-
141
- * Avoid regex backtracking on If-None-Match header
142
-
143
- [CVE-2023-22795]
144
-
145
- * Use string#split instead of regex for domain parts
146
-
147
- [CVE-2023-22792]
148
-
149
- ## Rails 7.0.4 (September 09, 2022) ##
150
-
151
- * Prevent `ActionDispatch::ServerTiming` from overwriting existing values in `Server-Timing`.
152
-
153
- Previously, if another middleware down the chain set `Server-Timing` header,
154
- it would overwritten by `ActionDispatch::ServerTiming`.
155
-
156
- *Jakub Malinowski*
56
+ * The `with_routing` helper can now be called at the class level. When called at the class level, the routes will
57
+ be setup before each test, and reset after every test. For example:
157
58
 
59
+ ```ruby
60
+ class RoutingTest < ActionController::TestCase
61
+ with_routing do |routes|
62
+ routes.draw do
63
+ resources :articles
64
+ resources :authors
65
+ end
66
+ end
158
67
 
159
- ## Rails 7.0.3.1 (July 12, 2022) ##
68
+ def test_articles_route
69
+ assert_routing("/articles", controller: "articles", action: "index")
70
+ end
160
71
 
161
- * No changes.
72
+ def test_authors_route
73
+ assert_routing("/authors", controller: "authors", action: "index")
74
+ end
75
+ end
76
+ ```
162
77
 
78
+ *Andrew Novoselac*
163
79
 
164
- ## Rails 7.0.3 (May 09, 2022) ##
80
+ * The `Mime::Type` now supports handling types with parameters and correctly handles quotes.
81
+ When parsing the accept header, the parameters before the q-parameter are kept and if a matching mime-type exists it is used.
82
+ To keep the current functionality, a fallback is created to look for the media-type without the parameters.
165
83
 
166
- * Allow relative redirects when `raise_on_open_redirects` is enabled.
84
+ This change allows for custom MIME-types that are more complex like `application/vnd.api+json; profile="https://jsonapi.org/profiles/ethanresnick/cursor-pagination/" ext="https://jsonapi.org/ext/atomic"` for the [JSON API](https://jsonapi.org/).
167
85
 
168
- *Tom Hughes*
86
+ *Nicolas Erni*
169
87
 
170
- * Fix `authenticate_with_http_basic` to allow for missing password.
88
+ * The url_for helpers now support a new option called `path_params`.
89
+ This is very useful in situations where you only want to add a required param that is part of the route's URL but for other route not append an extraneous query param.
171
90
 
172
- Before Rails 7.0 it was possible to handle basic authentication with only a username.
91
+ Given the following router...
173
92
 
174
93
  ```ruby
175
- authenticate_with_http_basic do |token, _|
176
- ApiClient.authenticate(token)
94
+ Rails.application.routes.draw do
95
+ scope ":account_id" do
96
+ get "dashboard" => "pages#dashboard", as: :dashboard
97
+ get "search/:term" => "search#search", as: :search
98
+ end
99
+ delete "signout" => "sessions#destroy", as: :signout
177
100
  end
178
101
  ```
179
102
 
180
- This ability is restored.
181
-
182
- *Jean Boussier*
183
-
184
- * Fix `content_security_policy` returning invalid directives.
185
-
186
- Directives such as `self`, `unsafe-eval` and few others were not
187
- single quoted when the directive was the result of calling a lambda
188
- returning an array.
103
+ And given the following `ApplicationController`
189
104
 
190
105
  ```ruby
191
- content_security_policy do |policy|
192
- policy.frame_ancestors lambda { [:self, "https://example.com"] }
106
+ class ApplicationController < ActionController::Base
107
+ def default_url_options
108
+ { path_params: { account_id: "foo" } }
109
+ end
193
110
  end
194
111
  ```
195
112
 
196
- With this fix the policy generated from above will now be valid.
197
-
198
- *Edouard Chin*
199
-
200
- * Fix `skip_forgery_protection` to run without raising an error if forgery
201
- protection has not been enabled / `verify_authenticity_token` is not a
202
- defined callback.
203
-
204
- This fix prevents the Rails 7.0 Welcome Page (`/`) from raising an
205
- `ArgumentError` if `default_protect_from_forgery` is false.
206
-
207
- *Brad Trick*
208
-
209
- * Fix `ActionController::Live` to copy the IsolatedExecutionState in the ephemeral thread.
210
-
211
- Since its inception `ActionController::Live` has been copying thread local variables
212
- to keep things such as `CurrentAttributes` set from middlewares working in the controller action.
213
-
214
- With the introduction of `IsolatedExecutionState` in 7.0, some of that global state was lost in
215
- `ActionController::Live` controllers.
216
-
217
- *Jean Boussier*
218
-
219
- * Fix setting `trailing_slash: true` in route definition.
113
+ The standard url_for helper and friends will now behave as follows:
220
114
 
221
115
  ```ruby
222
- get '/test' => "test#index", as: :test, trailing_slash: true
116
+ dashboard_path # => /foo/dashboard
117
+ dashboard_path(account_id: "bar") # => /bar/dashboard
223
118
 
224
- test_path() # => "/test/"
119
+ signout_path # => /signout
120
+ signout_path(account_id: "bar") # => /signout?account_id=bar
121
+ signout_path(account_id: "bar", path_params: { account_id: "baz" }) # => /signout?account_id=bar
122
+ search_path("quin") # => /foo/search/quin
225
123
  ```
226
124
 
227
- *Jean Boussier*
228
-
229
- ## Rails 7.0.2.4 (April 26, 2022) ##
230
-
231
- * Allow Content Security Policy DSL to generate for API responses.
232
-
233
- *Tim Wade*
234
-
235
- ## Rails 7.0.2.3 (March 08, 2022) ##
236
-
237
- * No changes.
238
-
239
-
240
- ## Rails 7.0.2.2 (February 11, 2022) ##
241
-
242
- * No changes.
243
-
244
-
245
- ## Rails 7.0.2.1 (February 11, 2022) ##
246
-
247
- * Under certain circumstances, the middleware isn't informed that the
248
- response body has been fully closed which result in request state not
249
- being fully reset before the next request
125
+ *Jason Meller, Jeremy Beker*
250
126
 
251
- [CVE-2022-23633]
127
+ * Change `action_dispatch.show_exceptions` to one of `:all`, `:rescuable`, or
128
+ `:none`. `:all` and `:none` behave the same as the previous `true` and
129
+ `false` respectively. The new `:rescuable` option will only show exceptions
130
+ that can be rescued (e.g. `ActiveRecord::RecordNotFound`). `:rescuable` is
131
+ now the default for the test environment.
252
132
 
133
+ *Jon Dufresne*
253
134
 
254
- ## Rails 7.0.2 (February 08, 2022) ##
135
+ * `config.action_dispatch.cookies_serializer` now accepts `:message_pack` and
136
+ `:message_pack_allow_marshal` as serializers. These serializers require the
137
+ [`msgpack` gem](https://rubygems.org/gems/msgpack) (>= 1.7.0).
255
138
 
256
- * No changes.
139
+ The Message Pack format can provide improved performance and smaller payload
140
+ sizes. It also supports roundtripping some Ruby types that are not supported
141
+ by JSON. For example:
257
142
 
143
+ ```ruby
144
+ cookies.encrypted[:foo] = [{ a: 1 }, { b: 2 }.with_indifferent_access, 1.to_d, Time.at(0, 123)]
258
145
 
259
- ## Rails 7.0.1 (January 06, 2022) ##
146
+ # BEFORE with config.action_dispatch.cookies_serializer = :json
147
+ cookies.encrypted[:foo]
148
+ # => [{"a"=>1}, {"b"=>2}, "1.0", "1969-12-31T18:00:00.000-06:00"]
149
+ cookies.encrypted[:foo].map(&:class)
150
+ # => [Hash, Hash, String, String]
260
151
 
261
- * Fix `ActionController::Parameters` methods to keep the original logger context when creating a new copy
262
- of the original object.
152
+ # AFTER with config.action_dispatch.cookies_serializer = :message_pack
153
+ cookies.encrypted[:foo]
154
+ # => [{:a=>1}, {"b"=>2}, 0.1e1, 1969-12-31 18:00:00.000123 -0600]
155
+ cookies.encrypted[:foo].map(&:class)
156
+ # => [Hash, ActiveSupport::HashWithIndifferentAccess, BigDecimal, Time]
157
+ ```
263
158
 
264
- *Yutaka Kamei*
159
+ The `:message_pack` serializer can fall back to deserializing with
160
+ `ActiveSupport::JSON` when necessary, and the `:message_pack_allow_marshal`
161
+ serializer can fall back to deserializing with `Marshal` as well as
162
+ `ActiveSupport::JSON`. Additionally, the `:marshal`, `:json`, and
163
+ `:json_allow_marshal` (AKA `:hybrid`) serializers can now fall back to
164
+ deserializing with `ActiveSupport::MessagePack` when necessary. These
165
+ behaviors ensure old cookies can still be read so that migration is easier.
265
166
 
167
+ *Jonathan Hefner*
266
168
 
267
- ## Rails 7.0.0 (December 15, 2021) ##
169
+ * Remove leading dot from domains on cookies set with `domain: :all`, to meet RFC6265 requirements
268
170
 
269
- * Deprecate `Rails.application.config.action_controller.urlsafe_csrf_tokens`. This config is now always enabled.
171
+ *Gareth Adams*
270
172
 
271
- *Étienne Barrié*
173
+ * Include source location in routes extended view.
272
174
 
273
- * Instance variables set in requests in a `ActionController::TestCase` are now cleared before the next request
175
+ ```bash
176
+ $ bin/rails routes --expanded
274
177
 
275
- This means if you make multiple requests in the same test, instance variables set in the first request will
276
- not persist into the second one. (It's not recommended to make multiple requests in the same test.)
277
-
278
- *Alex Ghiculescu*
279
-
280
-
281
- ## Rails 7.0.0.rc3 (December 14, 2021) ##
282
-
283
- * No changes.
284
-
285
-
286
- ## Rails 7.0.0.rc2 (December 14, 2021) ##
287
-
288
- * Fix X_FORWARDED_HOST protection. [CVE-2021-44528]
289
-
290
-
291
- ## Rails 7.0.0.rc1 (December 06, 2021) ##
292
-
293
- * `Rails.application.executor` hooks can now be called around every request in a `ActionController::TestCase`
294
-
295
- This helps to better simulate request or job local state being reset between requests and prevent state
296
- leaking from one request to another.
297
-
298
- To enable this, set `config.active_support.executor_around_test_case = true` (this is the default in Rails 7).
178
+ ...
179
+ --[ Route 14 ]----------
180
+ Prefix | new_gist
181
+ Verb | GET
182
+ URI | /gist(.:format)
183
+ Controller#Action | gists/gists#new
184
+ Source Location | config/routes/gist.rb:3
185
+ ```
299
186
 
300
- *Alex Ghiculescu*
187
+ *Luan Vieira, John Hawthorn and Daniel Colson*
301
188
 
302
- * Consider onion services secure for cookies.
189
+ * Add `without` as an alias of `except` on `ActiveController::Parameters`.
303
190
 
304
- *Justin Tracey*
191
+ *Hidde-Jan Jongsma*
305
192
 
306
- * Remove deprecated `Rails.config.action_view.raise_on_missing_translations`.
193
+ * Expand search field on `rails/info/routes` to also search **route name**, **http verb** and **controller#action**.
307
194
 
308
- *Rafael Mendonça França*
195
+ *Jason Kotchoff*
309
196
 
310
- * Remove deprecated support to passing a path to `fixture_file_upload` relative to `fixture_path`.
197
+ * Remove deprecated `poltergeist` and `webkit` (capybara-webkit) driver registration for system testing.
311
198
 
312
199
  *Rafael Mendonça França*
313
200
 
314
- * Remove deprecated `ActionDispatch::SystemTestCase#host!`.
201
+ * Remove deprecated ability to assign a single value to `config.action_dispatch.trusted_proxies`.
315
202
 
316
203
  *Rafael Mendonça França*
317
204
 
318
- * Remove deprecated `Rails.config.action_dispatch.hosts_response_app`.
205
+ * Deprecate `config.action_dispatch.return_only_request_media_type_on_content_type`.
319
206
 
320
207
  *Rafael Mendonça França*
321
208
 
322
- * Remove deprecated `ActionDispatch::Response.return_only_media_type_on_content_type`.
209
+ * Remove deprecated behavior on `Request#content_type`.
323
210
 
324
211
  *Rafael Mendonça França*
325
212
 
326
- * Raise `ActionController::Redirecting::UnsafeRedirectError` for unsafe `redirect_to` redirects.
327
-
328
- This allows `rescue_from` to be used to add a default fallback route:
213
+ * Change `ActionController::Instrumentation` to pass `filtered_path` instead of `fullpath` in the event payload to filter sensitive query params
329
214
 
330
215
  ```ruby
331
- rescue_from ActionController::Redirecting::UnsafeRedirectError do
332
- redirect_to root_url
333
- end
216
+ get "/posts?password=test"
217
+ request.fullpath # => "/posts?password=test"
218
+ request.filtered_path # => "/posts?password=[FILTERED]"
334
219
  ```
335
220
 
336
- *Kasper Timm Hansen*, *Chris Oliver*
221
+ *Ritikesh G*
222
+
223
+ * Deprecate `AbstractController::Helpers::MissingHelperError`
337
224
 
338
- * Add `url_from` to verify a redirect location is internal.
225
+ *Hartley McGuire*
339
226
 
340
- Takes the open redirect protection from `redirect_to` so users can wrap a
341
- param, and fall back to an alternate redirect URL when the param provided
342
- one is unsafe.
227
+ * Change `ActionDispatch::Testing::TestResponse#parsed_body` to parse HTML as
228
+ a Nokogiri document
343
229
 
344
230
  ```ruby
345
- def create
346
- redirect_to url_from(params[:redirect_url]) || root_url
347
- end
231
+ get "/posts"
232
+ response.content_type # => "text/html; charset=utf-8"
233
+ response.parsed_body.class # => Nokogiri::HTML5::Document
234
+ response.parsed_body.to_html # => "<!DOCTYPE html>\n<html>\n..."
348
235
  ```
349
236
 
350
- *dmcge*, *Kasper Timm Hansen*
351
-
352
- * Allow Capybara driver name overrides in `SystemTestCase::driven_by`
237
+ *Sean Doyle*
353
238
 
354
- Allow users to prevent conflicts among drivers that use the same driver
355
- type (selenium, poltergeist, webkit, rack test).
239
+ * Deprecate `ActionDispatch::IllegalStateError`.
356
240
 
357
- Fixes #42502
241
+ *Samuel Williams*
358
242
 
359
- *Chris LaRose*
243
+ * Add HTTP::Request#route_uri_pattern that returns URI pattern of matched route.
360
244
 
361
- * Allow multiline to be passed in routes when using wildcard segments.
245
+ *Joel Hawksley*, *Kate Higa*
362
246
 
363
- Previously routes with newlines weren't detected when using wildcard segments, returning
364
- a `No route matches` error.
365
- After this change, routes with newlines are detected on wildcard segments. Example
366
-
367
- ```ruby
368
- draw do
369
- get "/wildcard/*wildcard_segment", to: SimpleApp.new("foo#index"), as: :wildcard
370
- end
247
+ * Add `ActionDispatch::AssumeSSL` middleware that can be turned on via `config.assume_ssl`.
248
+ It makes the application believe that all requests are arriving over SSL. This is useful
249
+ when proxying through a load balancer that terminates SSL, the forwarded request will appear
250
+ as though its HTTP instead of HTTPS to the application. This makes redirects and cookie
251
+ security target HTTP instead of HTTPS. This middleware makes the server assume that the
252
+ proxy already terminated SSL, and that the request really is HTTPS.
371
253
 
372
- # After the change, the path matches.
373
- assert_equal "/wildcard/a%0Anewline", url_helpers.wildcard_path(wildcard_segment: "a\nnewline")
374
- ```
254
+ *DHH*
375
255
 
376
- Fixes #39103
256
+ * Only use HostAuthorization middleware if `config.hosts` is not empty
377
257
 
378
- *Ignacio Chiazzo*
258
+ *Hartley McGuire*
379
259
 
380
- * Treat html suffix in controller translation.
260
+ * Allow raising an error when a callback's only/unless symbols aren't existing methods.
381
261
 
382
- *Rui Onodera*, *Gavin Miller*
262
+ When `before_action :callback, only: :action_name` is declared on a controller that doesn't respond to `action_name`, raise an exception at request time. This is a safety measure to ensure that typos or forgetfulness don't prevent a crucial callback from being run when it should.
383
263
 
384
- * Allow permitting numeric params.
264
+ For new applications, raising an error for undefined actions is turned on by default. If you do not want to opt-in to this behavior set `config.action_pack.raise_on_missing_callback_actions` to `false` in your application configuration. See #43487 for more details.
385
265
 
386
- Previously it was impossible to permit different fields on numeric parameters.
387
- After this change you can specify different fields for each numbered parameter.
388
- For example params like,
389
- ```ruby
390
- book: {
391
- authors_attributes: {
392
- '0': { name: "William Shakespeare", age_of_death: "52" },
393
- '1': { name: "Unattributed Assistant" },
394
- '2': "Not a hash",
395
- 'new_record': { name: "Some name" }
396
- }
397
- }
398
- ```
266
+ *Jess Bees*
399
267
 
400
- Before you could permit name on each author with,
401
- `permit book: { authors_attributes: [ :name ] }`
268
+ * Allow cookie options[:domain] to accept a proc to set the cookie domain on a more flexible per-request basis
402
269
 
403
- After this change you can permit different keys on each numbered element,
404
- `permit book: { authors_attributes: { '1': [ :name ], '0': [ :name, :age_of_death ] } }`
270
+ *RobL*
405
271
 
406
- Fixes #41625
272
+ * When a host is not specified for an `ActionController::Renderer`'s env,
273
+ the host and related options will now be derived from the routes'
274
+ `default_url_options` and `ActionDispatch::Http::URL.secure_protocol`.
407
275
 
408
- *Adam Hess*
276
+ This means that for an application with a configuration like:
409
277
 
410
- * Update `HostAuthorization` middleware to render debug info only
411
- when `config.consider_all_requests_local` is set to true.
278
+ ```ruby
279
+ Rails.application.default_url_options = { host: "rubyonrails.org" }
280
+ Rails.application.config.force_ssl = true
281
+ ```
412
282
 
413
- Also, blocked host info is always logged with level `error`.
283
+ rendering a URL like:
414
284
 
415
- Fixes #42813
285
+ ```ruby
286
+ ApplicationController.renderer.render inline: "<%= blog_url %>"
287
+ ```
416
288
 
417
- *Nikita Vyrko*
289
+ will now return `"https://rubyonrails.org/blog"` instead of
290
+ `"http://example.org/blog"`.
418
291
 
419
- * Add Server-Timing middleware
292
+ *Jonathan Hefner*
420
293
 
421
- Server-Timing specification defines how the server can communicate to browsers performance metrics
422
- about the request it is responding to.
294
+ * Add details of cookie name and size to `CookieOverflow` exception.
423
295
 
424
- The ServerTiming middleware is enabled by default on `development` environment by default using the
425
- `config.server_timing` setting and set the relevant duration metrics in the `Server-Timing` header
296
+ *Andy Waite*
426
297
 
427
- The full specification for Server-Timing header can be found in: https://www.w3.org/TR/server-timing/#dfn-server-timing-header-field
298
+ * Don't double log the `controller`, `action`, or `namespaced_controller` when using `ActiveRecord::QueryLog`
428
299
 
429
- *Sebastian Sogamoso*, *Guillermo Iguaran*
300
+ Previously if you set `config.active_record.query_log_tags` to an array that included
301
+ `:controller`, `:namespaced_controller`, or `:action`, that item would get logged twice.
302
+ This bug has been fixed.
430
303
 
304
+ *Alex Ghiculescu*
431
305
 
432
- ## Rails 7.0.0.alpha2 (September 15, 2021) ##
306
+ * Add the following permissions policy directives: `hid`, `idle-detection`, `screen-wake-lock`,
307
+ `serial`, `sync-xhr`, `web-share`.
433
308
 
434
- * No changes.
309
+ *Guillaume Cabanel*
435
310
 
311
+ * The `speaker`, `vibrate`, and `vr` permissions policy directives are now
312
+ deprecated.
436
313
 
437
- ## Rails 7.0.0.alpha1 (September 15, 2021) ##
314
+ There is no browser support for these directives, and no plan for browser
315
+ support in the future. You can just remove these directives from your
316
+ application.
438
317
 
439
- * Use a static error message when raising `ActionDispatch::Http::Parameters::ParseError`
440
- to avoid inadvertently logging the HTTP request body at the `fatal` level when it contains
441
- malformed JSON.
318
+ *Jonathan Hefner*
442
319
 
443
- Fixes #41145
320
+ * Added the `:status` option to `assert_redirected_to` to specify the precise
321
+ HTTP status of the redirect. Defaults to `:redirect` for backwards
322
+ compatibility.
444
323
 
445
- *Aaron Lahey*
324
+ *Jon Dufresne*
446
325
 
447
- * Add `Middleware#delete!` to delete middleware or raise if not found.
326
+ * Rescue `JSON::ParserError` in Cookies JSON deserializer to discards marshal dumps:
448
327
 
449
- `Middleware#delete!` works just like `Middleware#delete` but will
450
- raise an error if the middleware isn't found.
328
+ Without this change, if `action_dispatch.cookies_serializer` is set to `:json` and
329
+ the app tries to read a `:marshal` serialized cookie, it would error out which wouldn't
330
+ clear the cookie and force app users to manually clear it in their browser.
451
331
 
452
- *Alex Ghiculescu*, *Petrik de Heus*, *Junichi Sato*
332
+ (See #45127 for original bug discussion)
453
333
 
454
- * Raise error on unpermitted open redirects.
334
+ *Nathan Bardoux*
455
335
 
456
- Add `allow_other_host` options to `redirect_to`.
457
- Opt in to this behaviour with `ActionController::Base.raise_on_open_redirects = true`.
336
+ * Add `HTTP_REFERER` when following redirects on integration tests
458
337
 
459
- *Gannon McGibbon*
338
+ This makes `follow_redirect!` a closer simulation of what happens in a real browser
460
339
 
461
- * Deprecate `poltergeist` and `webkit` (capybara-webkit) driver registration for system testing (they will be removed in Rails 7.1). Add `cuprite` instead.
340
+ *Felipe Sateler*
462
341
 
463
- [Poltergeist](https://github.com/teampoltergeist/poltergeist) and [capybara-webkit](https://github.com/thoughtbot/capybara-webkit) are already not maintained. These usage in Rails are removed for avoiding confusing users.
342
+ * Added `exclude?` method to `ActionController::Parameters`.
464
343
 
465
- [Cuprite](https://github.com/rubycdp/cuprite) is a good alternative to Poltergeist. Some guide descriptions are replaced from Poltergeist to Cuprite.
344
+ *Ian Neubert*
466
345
 
467
- *Yusuke Iwaki*
346
+ * Rescue `EOFError` exception from `rack` on a multipart request.
468
347
 
469
- * Exclude additional flash types from `ActionController::Base.action_methods`.
348
+ *Nikita Vasilevsky*
470
349
 
471
- Ensures that additional flash types defined on ActionController::Base subclasses
472
- are not listed as actions on that controller.
350
+ * Log redirects from routes the same way as redirects from controllers.
473
351
 
474
- class MyController < ApplicationController
475
- add_flash_types :hype
476
- end
352
+ *Dennis Paagman*
477
353
 
478
- MyController.action_methods.include?('hype') # => false
354
+ * Prevent `ActionDispatch::ServerTiming` from overwriting existing values in `Server-Timing`.
355
+ Previously, if another middleware down the chain set `Server-Timing` header,
356
+ it would overwritten by `ActionDispatch::ServerTiming`.
479
357
 
480
- *Gavin Morrice*
358
+ *Jakub Malinowski*
481
359
 
482
- * OpenSSL constants are now used for Digest computations.
360
+ * Allow opting out of the `SameSite` cookie attribute when setting a cookie.
483
361
 
484
- *Dirkjan Bussink*
362
+ You can opt out of `SameSite` by passing `same_site: nil`.
485
363
 
486
- * Remove IE6-7-8 file download related hack/fix from ActionController::DataStreaming module.
364
+ `cookies[:foo] = { value: "bar", same_site: nil }`
487
365
 
488
- Due to the age of those versions of IE this fix is no longer relevant, more importantly it creates an edge-case for unexpected Cache-Control headers.
366
+ Previously, this incorrectly set the `SameSite` attribute to the value of the `cookies_same_site_protection` setting.
489
367
 
490
- *Tadas Sasnauskas*
368
+ *Alex Ghiculescu*
491
369
 
492
- * Configuration setting to skip logging an uncaught exception backtrace when the exception is
493
- present in `rescued_responses`.
370
+ * Allow using `helper_method`s in `content_security_policy` and `permissions_policy`
494
371
 
495
- It may be too noisy to get all backtraces logged for applications that manage uncaught
496
- exceptions via `rescued_responses` and `exceptions_app`.
497
- `config.action_dispatch.log_rescued_responses` (defaults to `true`) can be set to `false` in
498
- this case, so that only exceptions not found in `rescued_responses` will be logged.
372
+ Previously you could access basic helpers (defined in helper modules), but not
373
+ helper methods defined using `helper_method`. Now you can use either.
499
374
 
500
- *Alexander Azarov*, *Mike Dalessio*
375
+ ```ruby
376
+ content_security_policy do |p|
377
+ p.default_src "https://example.com"
378
+ p.script_src "https://example.com" if helpers.script_csp?
379
+ end
380
+ ```
501
381
 
502
- * Ignore file fixtures on `db:fixtures:load`.
382
+ *Alex Ghiculescu*
503
383
 
504
- *Kevin Sjöberg*
384
+ * Reimplement `ActionController::Parameters#has_value?` and `#value?` to avoid parameters and hashes comparison.
505
385
 
506
- * Fix ActionController::Live controller test deadlocks by removing the body buffer size limit for tests.
386
+ Deprecated equality between parameters and hashes is going to be removed in Rails 7.2.
387
+ The new implementation takes care of conversions.
507
388
 
508
- *Dylan Thacker-Smith*
389
+ *Seva Stefkin*
509
390
 
510
- * New `ActionController::ConditionalGet#no_store` method to set HTTP cache control `no-store` directive.
391
+ * Allow only String and Symbol keys in `ActionController::Parameters`.
392
+ Raise `ActionController::InvalidParameterKey` when initializing Parameters
393
+ with keys that aren't strings or symbols.
511
394
 
512
- *Tadas Sasnauskas*
395
+ *Seva Stefkin*
513
396
 
514
- * Drop support for the `SERVER_ADDR` header.
397
+ * Add the ability to use custom logic for storing and retrieving CSRF tokens.
515
398
 
516
- Following up https://github.com/rack/rack/pull/1573 and https://github.com/rails/rails/pull/42349.
399
+ By default, the token will be stored in the session. Custom classes can be
400
+ defined to specify arbitrary behavior, but the ability to store them in
401
+ encrypted cookies is built in.
517
402
 
518
- *Ricardo Díaz*
403
+ *Andrew Kowpak*
519
404
 
520
- * Set session options when initializing a basic session.
405
+ * Make ActionController::Parameters#values cast nested hashes into parameters.
521
406
 
522
407
  *Gannon McGibbon*
523
408
 
524
- * Add `cache_control: {}` option to `fresh_when` and `stale?`.
409
+ * Introduce `html:` and `screenshot:` kwargs for system test screenshot helper
525
410
 
526
- Works as a shortcut to set `response.cache_control` with the above methods.
411
+ Use these as an alternative to the already-available environment variables.
527
412
 
528
- *Jacopo Beschi*
413
+ For example, this will display a screenshot in iTerm, save the HTML, and output
414
+ its path.
529
415
 
530
- * Writing into a disabled session will now raise an error.
416
+ ```ruby
417
+ take_screenshot(html: true, screenshot: "inline")
418
+ ```
531
419
 
532
- Previously when no session store was set, writing into the session would silently fail.
420
+ *Alex Ghiculescu*
533
421
 
534
- *Jean Boussier*
422
+ * Allow `ActionController::Parameters#to_h` to receive a block.
535
423
 
536
- * Add support for 'require-trusted-types-for' and 'trusted-types' headers.
424
+ *Bob Farrell*
537
425
 
538
- Fixes #42034.
426
+ * Allow relative redirects when `raise_on_open_redirects` is enabled
539
427
 
540
- *lfalcao*
428
+ *Tom Hughes*
541
429
 
542
- * Remove inline styles and address basic accessibility issues on rescue templates.
430
+ * Allow Content Security Policy DSL to generate for API responses.
543
431
 
544
- *Jacob Herrington*
432
+ *Tim Wade*
545
433
 
546
- * Add support for 'private, no-store' Cache-Control headers.
434
+ * Fix `authenticate_with_http_basic` to allow for missing password.
547
435
 
548
- Previously, 'no-store' was exclusive; no other directives could be specified.
436
+ Before Rails 7.0 it was possible to handle basic authentication with only a username.
549
437
 
550
- *Alex Smith*
438
+ ```ruby
439
+ authenticate_with_http_basic do |token, _|
440
+ ApiClient.authenticate(token)
441
+ end
442
+ ```
551
443
 
552
- * Expand payload of `unpermitted_parameters.action_controller` instrumentation to allow subscribers to
553
- know which controller action received unpermitted parameters.
444
+ This ability is restored.
554
445
 
555
- *bbuchalter*
446
+ *Jean Boussier*
556
447
 
557
- * Add `ActionController::Live#send_stream` that makes it more convenient to send generated streams:
448
+ * Fix `content_security_policy` returning invalid directives.
558
449
 
559
- ```ruby
560
- send_stream(filename: "subscribers.csv") do |stream|
561
- stream.writeln "email_address,updated_at"
450
+ Directives such as `self`, `unsafe-eval` and few others were not
451
+ single quoted when the directive was the result of calling a lambda
452
+ returning an array.
562
453
 
563
- @subscribers.find_each do |subscriber|
564
- stream.writeln [ subscriber.email_address, subscriber.updated_at ].join(",")
565
- end
454
+ ```ruby
455
+ content_security_policy do |policy|
456
+ policy.frame_ancestors lambda { [:self, "https://example.com"] }
566
457
  end
567
458
  ```
568
459
 
569
- *DHH*
460
+ With this fix the policy generated from above will now be valid.
570
461
 
571
- * Add `ActionController::Live::Buffer#writeln` to write a line to the stream with a newline included.
462
+ *Edouard Chin*
572
463
 
573
- *DHH*
464
+ * Fix `skip_forgery_protection` to run without raising an error if forgery
465
+ protection has not been enabled / `verify_authenticity_token` is not a
466
+ defined callback.
574
467
 
575
- * `ActionDispatch::Request#content_type` now returned Content-Type header as it is.
468
+ This fix prevents the Rails 7.0 Welcome Page (`/`) from raising an
469
+ `ArgumentError` if `default_protect_from_forgery` is false.
576
470
 
577
- Previously, `ActionDispatch::Request#content_type` returned value does NOT contain charset part.
578
- This behavior changed to returned Content-Type header containing charset part as it is.
471
+ *Brad Trick*
579
472
 
580
- If you want just MIME type, please use `ActionDispatch::Request#media_type` instead.
473
+ * Make `redirect_to` return an empty response body.
581
474
 
582
- Before:
475
+ Application controllers that wish to add a response body after calling
476
+ `redirect_to` can continue to do so.
583
477
 
584
- ```ruby
585
- request = ActionDispatch::Request.new("CONTENT_TYPE" => "text/csv; header=present; charset=utf-16", "REQUEST_METHOD" => "GET")
586
- request.content_type #=> "text/csv"
587
- ```
478
+ *Jon Dufresne*
588
479
 
589
- After:
480
+ * Use non-capturing group for subdomain matching in `ActionDispatch::HostAuthorization`
590
481
 
591
- ```ruby
592
- request = ActionDispatch::Request.new("Content-Type" => "text/csv; header=present; charset=utf-16", "REQUEST_METHOD" => "GET")
593
- request.content_type #=> "text/csv; header=present; charset=utf-16"
594
- request.media_type #=> "text/csv"
595
- ```
482
+ Since we do nothing with the captured subdomain group, we can use a non-capturing group instead.
596
483
 
597
- *Rafael Mendonça França*
484
+ *Sam Bostock*
598
485
 
599
- * Change `ActionDispatch::Request#media_type` to return `nil` when the request don't have a `Content-Type` header.
486
+ * Fix `ActionController::Live` to copy the IsolatedExecutionState in the ephemeral thread.
600
487
 
601
- *Rafael Mendonça França*
488
+ Since its inception `ActionController::Live` has been copying thread local variables
489
+ to keep things such as `CurrentAttributes` set from middlewares working in the controller action.
602
490
 
603
- * Fix error in `ActionController::LogSubscriber` that would happen when throwing inside a controller action.
491
+ With the introduction of `IsolatedExecutionState` in 7.0, some of that global state was lost in
492
+ `ActionController::Live` controllers.
604
493
 
605
- *Janko Marohnić*
494
+ *Jean Boussier*
606
495
 
607
- * Allow anything with `#to_str` (like `Addressable::URI`) as a `redirect_to` location.
496
+ * Fix setting `trailing_slash: true` in route definition.
608
497
 
609
- *ojab*
498
+ ```ruby
499
+ get '/test' => "test#index", as: :test, trailing_slash: true
610
500
 
611
- * Change the request method to a `GET` when passing failed requests down to `config.exceptions_app`.
501
+ test_path() # => "/test/"
502
+ ```
612
503
 
613
- *Alex Robbin*
504
+ *Jean Boussier*
614
505
 
615
- * Deprecate the ability to assign a single value to `config.action_dispatch.trusted_proxies`
616
- as `RemoteIp` middleware behaves inconsistently depending on whether this is configured
617
- with a single value or an enumerable.
506
+ * Make `Session#merge!` stringify keys.
618
507
 
619
- Fixes #40772.
508
+ Previously `Session#update` would, but `merge!` wouldn't.
620
509
 
621
- *Christian Sutter*
510
+ *Drew Bragg*
622
511
 
623
- * Add `redirect_back_or_to(fallback_location, **)` as a more aesthetically pleasing version of `redirect_back fallback_location:, **`.
624
- The old method name is retained without explicit deprecation.
512
+ * Add `:unsafe_hashes` mapping for `content_security_policy`
625
513
 
626
- *DHH*
514
+ ```ruby
515
+ # Before
516
+ policy.script_src :strict_dynamic, "'unsafe-hashes'", "'sha256-rRMdkshZyJlCmDX27XnL7g3zXaxv7ei6Sg+yt4R3svU='"
517
+
518
+ # After
519
+ policy.script_src :strict_dynamic, :unsafe_hashes, "'sha256-rRMdkshZyJlCmDX27XnL7g3zXaxv7ei6Sg+yt4R3svU='"
520
+ ```
627
521
 
522
+ *Igor Morozov*
628
523
 
629
- Please check [6-1-stable](https://github.com/rails/rails/blob/6-1-stable/actionpack/CHANGELOG.md) for previous changes.
524
+ Please check [7-0-stable](https://github.com/rails/rails/blob/7-0-stable/actionpack/CHANGELOG.md) for previous changes.