Skip to content

Commit

Permalink
Don't assume the existance of add_cookie_to_header and related meth…
Browse files Browse the repository at this point in the history
…ods.

Rack 3 deprecates some of these clunky methods, and the only compatible
methods between Rack 2 and Rack 3 is to use `Rack::Response` which
includes `set_cookie` and `delete_cookie`.
  • Loading branch information
ioquatix committed Jan 20, 2023
1 parent 5b9a246 commit 706fb10
Showing 1 changed file with 14 additions and 24 deletions.
38 changes: 14 additions & 24 deletions actionpack/lib/action_dispatch/middleware/cookies.rb
Expand Up @@ -407,9 +407,15 @@ def clear(options = {})
@cookies.each_key { |k| delete(k, options) }
end

def write(headers)
if header = make_set_cookie_header(headers[HTTP_HEADER])
headers[HTTP_HEADER] = header
def write(response)
@set_cookies.each do |name, value|
if write_cookie?(value)
response.set_cookie(name, value)
end
end

@delete_cookies.each do |name, value|
response.delete_cookie(name, value)
end
end

Expand All @@ -420,19 +426,6 @@ def escape(string)
::Rack::Utils.escape(string)
end

def make_set_cookie_header(header)
header = @set_cookies.inject(header) { |m, (k, v)|
if write_cookie?(v)
::Rack::Utils.add_cookie_to_header(m, k, v)
else
m
end
}
@delete_cookies.inject(header) { |m, (k, v)|
::Rack::Utils.add_remove_cookie_to_header(m, k, v)
}
end

def write_cookie?(cookie)
request.ssl? || !cookie[:secure] || always_write_cookie || request.host.end_with?(".onion")
end
Expand Down Expand Up @@ -714,21 +707,18 @@ def initialize(app)
end

def call(env)
request = ActionDispatch::Request.new env

_, headers, _ = response = @app.call(env)
request = ActionDispatch::Request.new(env)
response = @app.call(env)

if request.have_cookie_jar?
cookie_jar = request.cookie_jar
unless cookie_jar.committed?
cookie_jar.write(headers)
if headers[HTTP_HEADER].respond_to?(:join)
headers[HTTP_HEADER] = headers[HTTP_HEADER].join("\n")
end
response = Rack::Response[*response]
cookie_jar.write(response)
end
end

response
response.to_a
end
end
end

0 comments on commit 706fb10

Please sign in to comment.