actionpack 7.0.8.4 → 7.1.3.4

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