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