actionpack 7.1.3 → 7.2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of actionpack might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +82 -501
- data/lib/abstract_controller/asset_paths.rb +2 -0
- data/lib/abstract_controller/base.rb +102 -98
- data/lib/abstract_controller/caching/fragments.rb +50 -53
- data/lib/abstract_controller/caching.rb +2 -0
- data/lib/abstract_controller/callbacks.rb +66 -64
- data/lib/abstract_controller/collector.rb +6 -6
- data/lib/abstract_controller/deprecator.rb +2 -0
- data/lib/abstract_controller/error.rb +2 -0
- data/lib/abstract_controller/helpers.rb +70 -85
- data/lib/abstract_controller/logger.rb +2 -0
- data/lib/abstract_controller/railties/routes_helpers.rb +2 -0
- data/lib/abstract_controller/rendering.rb +13 -12
- data/lib/abstract_controller/translation.rb +15 -7
- data/lib/abstract_controller/url_for.rb +8 -6
- data/lib/abstract_controller.rb +2 -0
- data/lib/action_controller/api/api_rendering.rb +2 -0
- data/lib/action_controller/api.rb +74 -72
- data/lib/action_controller/base.rb +198 -126
- data/lib/action_controller/caching.rb +15 -12
- data/lib/action_controller/deprecator.rb +2 -0
- data/lib/action_controller/form_builder.rb +20 -17
- data/lib/action_controller/log_subscriber.rb +3 -1
- data/lib/action_controller/metal/allow_browser.rb +123 -0
- data/lib/action_controller/metal/basic_implicit_render.rb +2 -0
- data/lib/action_controller/metal/conditional_get.rb +188 -174
- data/lib/action_controller/metal/content_security_policy.rb +25 -24
- data/lib/action_controller/metal/cookies.rb +4 -2
- data/lib/action_controller/metal/data_streaming.rb +64 -55
- data/lib/action_controller/metal/default_headers.rb +5 -3
- data/lib/action_controller/metal/etag_with_flash.rb +3 -1
- data/lib/action_controller/metal/etag_with_template_digest.rb +17 -15
- data/lib/action_controller/metal/exceptions.rb +11 -9
- data/lib/action_controller/metal/flash.rb +12 -10
- data/lib/action_controller/metal/head.rb +12 -10
- data/lib/action_controller/metal/helpers.rb +63 -55
- data/lib/action_controller/metal/http_authentication.rb +210 -205
- data/lib/action_controller/metal/implicit_render.rb +17 -15
- data/lib/action_controller/metal/instrumentation.rb +15 -12
- data/lib/action_controller/metal/live.rb +113 -107
- data/lib/action_controller/metal/logging.rb +6 -4
- data/lib/action_controller/metal/mime_responds.rb +151 -142
- data/lib/action_controller/metal/parameter_encoding.rb +34 -32
- data/lib/action_controller/metal/params_wrapper.rb +57 -59
- data/lib/action_controller/metal/permissions_policy.rb +13 -12
- data/lib/action_controller/metal/rate_limiting.rb +62 -0
- data/lib/action_controller/metal/redirecting.rb +108 -82
- data/lib/action_controller/metal/renderers.rb +50 -49
- data/lib/action_controller/metal/rendering.rb +103 -75
- data/lib/action_controller/metal/request_forgery_protection.rb +162 -133
- data/lib/action_controller/metal/rescue.rb +11 -9
- data/lib/action_controller/metal/streaming.rb +138 -136
- data/lib/action_controller/metal/strong_parameters.rb +525 -480
- data/lib/action_controller/metal/testing.rb +2 -0
- data/lib/action_controller/metal/url_for.rb +17 -15
- data/lib/action_controller/metal.rb +86 -60
- data/lib/action_controller/railtie.rb +3 -0
- data/lib/action_controller/railties/helpers.rb +2 -0
- data/lib/action_controller/renderer.rb +42 -36
- data/lib/action_controller/template_assertions.rb +4 -2
- data/lib/action_controller/test_case.rb +146 -126
- data/lib/action_controller.rb +10 -3
- data/lib/action_dispatch/constants.rb +2 -0
- data/lib/action_dispatch/deprecator.rb +2 -0
- data/lib/action_dispatch/http/cache.rb +27 -26
- data/lib/action_dispatch/http/content_disposition.rb +2 -0
- data/lib/action_dispatch/http/content_security_policy.rb +44 -38
- data/lib/action_dispatch/http/filter_parameters.rb +18 -9
- data/lib/action_dispatch/http/filter_redirect.rb +22 -1
- data/lib/action_dispatch/http/headers.rb +22 -22
- data/lib/action_dispatch/http/mime_negotiation.rb +30 -41
- data/lib/action_dispatch/http/mime_type.rb +31 -24
- data/lib/action_dispatch/http/mime_types.rb +2 -0
- data/lib/action_dispatch/http/parameters.rb +11 -9
- data/lib/action_dispatch/http/permissions_policy.rb +20 -44
- data/lib/action_dispatch/http/rack_cache.rb +2 -0
- data/lib/action_dispatch/http/request.rb +94 -75
- data/lib/action_dispatch/http/response.rb +73 -61
- data/lib/action_dispatch/http/upload.rb +18 -16
- data/lib/action_dispatch/http/url.rb +75 -73
- data/lib/action_dispatch/journey/formatter.rb +13 -6
- data/lib/action_dispatch/journey/gtg/builder.rb +4 -3
- data/lib/action_dispatch/journey/gtg/simulator.rb +2 -0
- data/lib/action_dispatch/journey/gtg/transition_table.rb +10 -8
- data/lib/action_dispatch/journey/nfa/dot.rb +2 -0
- data/lib/action_dispatch/journey/nodes/node.rb +6 -5
- data/lib/action_dispatch/journey/parser.rb +4 -3
- data/lib/action_dispatch/journey/parser_extras.rb +2 -0
- data/lib/action_dispatch/journey/path/pattern.rb +4 -1
- data/lib/action_dispatch/journey/route.rb +9 -7
- data/lib/action_dispatch/journey/router/utils.rb +16 -15
- data/lib/action_dispatch/journey/router.rb +4 -2
- data/lib/action_dispatch/journey/routes.rb +4 -2
- data/lib/action_dispatch/journey/scanner.rb +4 -2
- data/lib/action_dispatch/journey/visitors.rb +2 -0
- data/lib/action_dispatch/journey.rb +2 -0
- data/lib/action_dispatch/log_subscriber.rb +2 -0
- data/lib/action_dispatch/middleware/actionable_exceptions.rb +2 -0
- data/lib/action_dispatch/middleware/assume_ssl.rb +8 -5
- data/lib/action_dispatch/middleware/callbacks.rb +3 -1
- data/lib/action_dispatch/middleware/cookies.rb +119 -104
- data/lib/action_dispatch/middleware/debug_exceptions.rb +13 -5
- data/lib/action_dispatch/middleware/debug_locks.rb +15 -13
- data/lib/action_dispatch/middleware/debug_view.rb +2 -0
- data/lib/action_dispatch/middleware/exception_wrapper.rb +6 -11
- data/lib/action_dispatch/middleware/executor.rb +8 -0
- data/lib/action_dispatch/middleware/flash.rb +63 -51
- data/lib/action_dispatch/middleware/host_authorization.rb +17 -15
- data/lib/action_dispatch/middleware/public_exceptions.rb +8 -6
- data/lib/action_dispatch/middleware/reloader.rb +5 -3
- data/lib/action_dispatch/middleware/remote_ip.rb +77 -72
- data/lib/action_dispatch/middleware/request_id.rb +14 -9
- data/lib/action_dispatch/middleware/server_timing.rb +4 -2
- data/lib/action_dispatch/middleware/session/abstract_store.rb +2 -0
- data/lib/action_dispatch/middleware/session/cache_store.rb +13 -8
- data/lib/action_dispatch/middleware/session/cookie_store.rb +27 -26
- data/lib/action_dispatch/middleware/session/mem_cache_store.rb +7 -3
- data/lib/action_dispatch/middleware/show_exceptions.rb +31 -21
- data/lib/action_dispatch/middleware/ssl.rb +43 -40
- data/lib/action_dispatch/middleware/stack.rb +11 -10
- data/lib/action_dispatch/middleware/static.rb +33 -31
- data/lib/action_dispatch/middleware/templates/rescues/_source.html.erb +1 -1
- data/lib/action_dispatch/middleware/templates/rescues/missing_exact_template.html.erb +1 -1
- data/lib/action_dispatch/middleware/templates/routes/_table.html.erb +1 -1
- data/lib/action_dispatch/railtie.rb +2 -4
- data/lib/action_dispatch/request/session.rb +23 -21
- data/lib/action_dispatch/request/utils.rb +2 -0
- data/lib/action_dispatch/routing/endpoint.rb +2 -0
- data/lib/action_dispatch/routing/inspector.rb +5 -3
- data/lib/action_dispatch/routing/mapper.rb +671 -636
- data/lib/action_dispatch/routing/polymorphic_routes.rb +69 -62
- data/lib/action_dispatch/routing/redirection.rb +37 -32
- data/lib/action_dispatch/routing/route_set.rb +59 -45
- data/lib/action_dispatch/routing/routes_proxy.rb +6 -4
- data/lib/action_dispatch/routing/url_for.rb +130 -125
- data/lib/action_dispatch/routing.rb +150 -148
- data/lib/action_dispatch/system_test_case.rb +91 -81
- data/lib/action_dispatch/system_testing/browser.rb +10 -3
- data/lib/action_dispatch/system_testing/driver.rb +3 -1
- data/lib/action_dispatch/system_testing/server.rb +2 -0
- data/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb +32 -21
- data/lib/action_dispatch/system_testing/test_helpers/setup_and_teardown.rb +2 -0
- data/lib/action_dispatch/testing/assertion_response.rb +8 -6
- data/lib/action_dispatch/testing/assertions/response.rb +26 -23
- data/lib/action_dispatch/testing/assertions/routing.rb +153 -84
- data/lib/action_dispatch/testing/assertions.rb +2 -0
- data/lib/action_dispatch/testing/integration.rb +223 -222
- data/lib/action_dispatch/testing/request_encoder.rb +2 -0
- data/lib/action_dispatch/testing/test_helpers/page_dump_helper.rb +35 -0
- data/lib/action_dispatch/testing/test_process.rb +12 -8
- data/lib/action_dispatch/testing/test_request.rb +3 -1
- data/lib/action_dispatch/testing/test_response.rb +27 -26
- data/lib/action_dispatch.rb +22 -28
- data/lib/action_pack/gem_version.rb +6 -4
- data/lib/action_pack/version.rb +3 -1
- data/lib/action_pack.rb +17 -16
- metadata +39 -16
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# :markup: markdown
|
4
|
+
|
3
5
|
require "action_dispatch/journey/gtg/transition_table"
|
4
6
|
|
5
7
|
module ActionDispatch
|
@@ -66,9 +68,8 @@ module ActionDispatch
|
|
66
68
|
when Nodes::Group
|
67
69
|
true
|
68
70
|
when Nodes::Star
|
69
|
-
# the default star regex is /(.+)/ which is NOT nullable
|
70
|
-
#
|
71
|
-
# actually check if this is the case or not.
|
71
|
+
# the default star regex is /(.+)/ which is NOT nullable but since different
|
72
|
+
# constraints can be provided we must actually check if this is the case or not.
|
72
73
|
node.regexp.match?("")
|
73
74
|
when Nodes::Or
|
74
75
|
node.children.any? { |c| nullable?(c) }
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# :markup: markdown
|
4
|
+
|
3
5
|
require "action_dispatch/journey/nfa/dot"
|
4
6
|
|
5
7
|
module ActionDispatch
|
@@ -55,8 +57,8 @@ module ActionDispatch
|
|
55
57
|
|
56
58
|
t.each { |s, previous_start|
|
57
59
|
if previous_start.nil?
|
58
|
-
# In the simple case of a "default" param regex do this fast-path
|
59
|
-
#
|
60
|
+
# In the simple case of a "default" param regex do this fast-path and add all
|
61
|
+
# next states.
|
60
62
|
if token_matches_default_component && states = @stdparam_states[s]
|
61
63
|
states.each { |re, v| next_states << [v, nil].freeze if !v.nil? }
|
62
64
|
end
|
@@ -67,10 +69,10 @@ module ActionDispatch
|
|
67
69
|
end
|
68
70
|
end
|
69
71
|
|
70
|
-
# For regexes that aren't the "default" style, they may potentially
|
71
|
-
#
|
72
|
-
#
|
73
|
-
#
|
72
|
+
# For regexes that aren't the "default" style, they may potentially not be
|
73
|
+
# terminated by the first "token" [./?], so we need to continue to attempt to
|
74
|
+
# match this regexp as well as any successful paths that continue out of it.
|
75
|
+
# both paths could be valid.
|
74
76
|
if states = @regexp_states[s]
|
75
77
|
slice_start = if previous_start.nil?
|
76
78
|
start_index
|
@@ -86,8 +88,8 @@ module ActionDispatch
|
|
86
88
|
next_states << [v, nil].freeze if !v.nil? && re.match?(curr_slice)
|
87
89
|
}
|
88
90
|
|
89
|
-
# and regardless, we must continue accepting tokens and retrying this regexp.
|
90
|
-
#
|
91
|
+
# and regardless, we must continue accepting tokens and retrying this regexp. we
|
92
|
+
# need to remember where we started as well so we can take bigger slices.
|
91
93
|
next_states << [s, slice_start].freeze
|
92
94
|
end
|
93
95
|
}
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# :markup: markdown
|
4
|
+
|
3
5
|
require "action_dispatch/journey/visitors"
|
4
6
|
|
5
7
|
module ActionDispatch
|
@@ -21,9 +23,8 @@ module ActionDispatch
|
|
21
23
|
end
|
22
24
|
|
23
25
|
def requirements=(requirements)
|
24
|
-
# inject any regexp requirements for `star` nodes so they can be
|
25
|
-
#
|
26
|
-
# empty string.
|
26
|
+
# inject any regexp requirements for `star` nodes so they can be determined
|
27
|
+
# nullable, which requires knowing if the regex accepts an empty string.
|
27
28
|
(symbols + stars).each do |node|
|
28
29
|
re = requirements[node.to_sym]
|
29
30
|
node.regexp = re if re
|
@@ -51,8 +52,8 @@ module ActionDispatch
|
|
51
52
|
stars << node
|
52
53
|
|
53
54
|
if formatted != false
|
54
|
-
# Add a constraint for wildcard route to make it non-greedy and
|
55
|
-
#
|
55
|
+
# Add a constraint for wildcard route to make it non-greedy and match the
|
56
|
+
# optional format part of the route by default.
|
56
57
|
wildcard_options[node.name.to_sym] ||= /.+?/m
|
57
58
|
end
|
58
59
|
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# :markup: markdown
|
4
|
+
|
3
5
|
module ActionDispatch
|
4
6
|
module Journey # :nodoc:
|
5
7
|
module Path # :nodoc:
|
@@ -32,7 +34,8 @@ module ActionDispatch
|
|
32
34
|
end
|
33
35
|
|
34
36
|
def requirements_anchored?
|
35
|
-
# each required param must not be surrounded by a literal, otherwise it isn't
|
37
|
+
# each required param must not be surrounded by a literal, otherwise it isn't
|
38
|
+
# simple to chunk-match the url piecemeal
|
36
39
|
terminals = ast.terminals
|
37
40
|
|
38
41
|
terminals.each_with_index { |s, index|
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# :markup: markdown
|
4
|
+
|
3
5
|
module ActionDispatch
|
4
6
|
# :stopdoc:
|
5
7
|
module Journey
|
@@ -52,7 +54,7 @@ module ActionDispatch
|
|
52
54
|
|
53
55
|
##
|
54
56
|
# +path+ is a path constraint.
|
55
|
-
#
|
57
|
+
# `constraints` is a hash of constraints to be applied to this route.
|
56
58
|
def initialize(name:, app: nil, path:, constraints: {}, required_defaults: [], defaults: {}, request_method_match: nil, precedence: 0, scope_options: {}, internal: false, source_location: nil)
|
57
59
|
@name = name
|
58
60
|
@app = app
|
@@ -82,14 +84,14 @@ module ActionDispatch
|
|
82
84
|
nil
|
83
85
|
end
|
84
86
|
|
85
|
-
# Needed for `bin/rails routes`. Picks up succinctly defined requirements
|
86
|
-
#
|
87
|
+
# Needed for `bin/rails routes`. Picks up succinctly defined requirements for a
|
88
|
+
# route, for example route
|
87
89
|
#
|
88
|
-
#
|
89
|
-
#
|
90
|
+
# get 'photo/:id', :controller => 'photos', :action => 'show',
|
91
|
+
# :id => /[A-Z]\d{5}/
|
90
92
|
#
|
91
|
-
# will have {:controller=>"photos", :action=>"show", :id=>/
|
92
|
-
#
|
93
|
+
# will have {:controller=>"photos", :action=>"show", :[id=>/](A-Z){5}/} as
|
94
|
+
# requirements.
|
93
95
|
def requirements
|
94
96
|
@defaults.merge(path.requirements).delete_if { |_, v|
|
95
97
|
/.+?/m == v
|
@@ -1,19 +1,21 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# :markup: markdown
|
4
|
+
|
3
5
|
module ActionDispatch
|
4
6
|
module Journey # :nodoc:
|
5
7
|
class Router # :nodoc:
|
6
8
|
class Utils # :nodoc:
|
7
9
|
# Normalizes URI path.
|
8
10
|
#
|
9
|
-
# Strips off trailing slash and ensures there is a leading slash.
|
10
|
-
#
|
11
|
+
# Strips off trailing slash and ensures there is a leading slash. Also converts
|
12
|
+
# downcase URL encoded string to uppercase.
|
11
13
|
#
|
12
|
-
#
|
13
|
-
#
|
14
|
-
#
|
15
|
-
#
|
16
|
-
#
|
14
|
+
# normalize_path("/foo") # => "/foo"
|
15
|
+
# normalize_path("/foo/") # => "/foo"
|
16
|
+
# normalize_path("foo") # => "/foo"
|
17
|
+
# normalize_path("") # => "/"
|
18
|
+
# normalize_path("/%ab") # => "/%AB"
|
17
19
|
def self.normalize_path(path)
|
18
20
|
path ||= ""
|
19
21
|
encoding = path.encoding
|
@@ -28,8 +30,7 @@ module ActionDispatch
|
|
28
30
|
path.force_encoding(encoding)
|
29
31
|
end
|
30
32
|
|
31
|
-
# URI path and fragment escaping
|
32
|
-
# https://tools.ietf.org/html/rfc3986
|
33
|
+
# URI path and fragment escaping https://tools.ietf.org/html/rfc3986
|
33
34
|
class UriEncoder # :nodoc:
|
34
35
|
ENCODE = "%%%02X"
|
35
36
|
US_ASCII = Encoding::US_ASCII
|
@@ -42,11 +43,11 @@ module ActionDispatch
|
|
42
43
|
UNRESERVED = "#{ALPHA}#{DIGIT}\\-\\._~"
|
43
44
|
SUB_DELIMS = "!\\$&'\\(\\)\\*\\+,;="
|
44
45
|
|
45
|
-
ESCAPED = /%[a-zA-Z0-9]{2}
|
46
|
+
ESCAPED = /%[a-zA-Z0-9]{2}/
|
46
47
|
|
47
|
-
FRAGMENT = /[^#{UNRESERVED}#{SUB_DELIMS}:@\/?]
|
48
|
-
SEGMENT = /[^#{UNRESERVED}#{SUB_DELIMS}:@]
|
49
|
-
PATH = /[^#{UNRESERVED}#{SUB_DELIMS}:@\/]
|
48
|
+
FRAGMENT = /[^#{UNRESERVED}#{SUB_DELIMS}:@\/?]/
|
49
|
+
SEGMENT = /[^#{UNRESERVED}#{SUB_DELIMS}:@]/
|
50
|
+
PATH = /[^#{UNRESERVED}#{SUB_DELIMS}:@\/]/
|
50
51
|
|
51
52
|
def escape_fragment(fragment)
|
52
53
|
escape(fragment, FRAGMENT)
|
@@ -93,8 +94,8 @@ module ActionDispatch
|
|
93
94
|
|
94
95
|
# Replaces any escaped sequences with their unescaped representations.
|
95
96
|
#
|
96
|
-
#
|
97
|
-
#
|
97
|
+
# uri = "/topics?title=Ruby%20on%20Rails"
|
98
|
+
# unescape_uri(uri) #=> "/topics?title=Ruby on Rails"
|
98
99
|
def self.unescape_uri(uri)
|
99
100
|
ENCODER.unescape_uri(uri)
|
100
101
|
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# :markup: markdown
|
4
|
+
|
3
5
|
require "action_dispatch/journey/router/utils"
|
4
6
|
require "action_dispatch/journey/routes"
|
5
7
|
require "action_dispatch/journey/formatter"
|
@@ -22,8 +24,8 @@ module ActionDispatch
|
|
22
24
|
end
|
23
25
|
|
24
26
|
def eager_load!
|
25
|
-
# Eagerly trigger the simulator's initialization so
|
26
|
-
#
|
27
|
+
# Eagerly trigger the simulator's initialization so it doesn't happen during a
|
28
|
+
# request cycle.
|
27
29
|
simulator
|
28
30
|
nil
|
29
31
|
end
|
@@ -1,9 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# :markup: markdown
|
4
|
+
|
3
5
|
module ActionDispatch
|
4
6
|
module Journey # :nodoc:
|
5
|
-
# The Routing table. Contains all routes for a system. Routes can be
|
6
|
-
#
|
7
|
+
# The Routing table. Contains all routes for a system. Routes can be added to
|
8
|
+
# the table by calling Routes#add_route.
|
7
9
|
class Routes # :nodoc:
|
8
10
|
include Enumerable
|
9
11
|
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# :markup: markdown
|
4
|
+
|
3
5
|
require "strscan"
|
4
6
|
|
5
7
|
module ActionDispatch
|
@@ -33,8 +35,8 @@ module ActionDispatch
|
|
33
35
|
end
|
34
36
|
|
35
37
|
private
|
36
|
-
# takes advantage of String @- deduping capabilities in Ruby 2.5 upwards
|
37
|
-
#
|
38
|
+
# takes advantage of String @- deduping capabilities in Ruby 2.5 upwards see:
|
39
|
+
# https://bugs.ruby-lang.org/issues/13077
|
38
40
|
def dedup_scan(regex)
|
39
41
|
r = @ss.scan(regex)
|
40
42
|
r ? -r : nil
|
@@ -1,12 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# :markup: markdown
|
4
|
+
|
3
5
|
module ActionDispatch
|
4
|
-
#
|
6
|
+
# # Action Dispatch AssumeSSL
|
5
7
|
#
|
6
|
-
# When proxying through a load balancer that terminates SSL, the forwarded
|
7
|
-
# as though it's HTTP instead of HTTPS to the application.
|
8
|
-
# security target HTTP instead of HTTPS. This
|
9
|
-
#
|
8
|
+
# When proxying through a load balancer that terminates SSL, the forwarded
|
9
|
+
# request will appear as though it's HTTP instead of HTTPS to the application.
|
10
|
+
# This makes redirects and cookie security target HTTP instead of HTTPS. This
|
11
|
+
# middleware makes the server assume that the proxy already terminated SSL, and
|
12
|
+
# that the request really is HTTPS.
|
10
13
|
class AssumeSSL
|
11
14
|
def initialize(app)
|
12
15
|
@app = app
|