Skip to content

Commit 530b6b5

Browse files
authored
Merge pull request #296 from anujdas/fix_secure_cookies
Set secure cookies on interleaved http/https calls correctly
2 parents df03646 + 57e77b7 commit 530b6b5

File tree

3 files changed

+14
-2
lines changed

3 files changed

+14
-2
lines changed

.ruby-version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2.2.3
1+
2.2.5

lib/secure_headers/configuration.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ def initialize(&block)
140140
# Returns a deep-dup'd copy of this configuration.
141141
def dup
142142
copy = self.class.new
143-
copy.cookies = @cookies
143+
copy.cookies = self.class.send(:deep_copy_if_hash, @cookies)
144144
copy.csp = @csp.dup if @csp
145145
copy.csp_report_only = @csp_report_only.dup if @csp_report_only
146146
copy.cached_headers = self.class.send(:deep_copy_if_hash, @cached_headers)

spec/lib/secure_headers/middleware_spec.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,18 @@ module SecureHeaders
105105
_, env = cookie_middleware.call request.env
106106
expect(env['Set-Cookie']).to eq("foo=bar")
107107
end
108+
109+
it "sets the secure cookie flag correctly on interleaved http/https requests" do
110+
Configuration.default { |config| config.cookies = { secure: true } }
111+
112+
request = Rack::Request.new("HTTPS" => "off")
113+
_, env = cookie_middleware.call request.env
114+
expect(env['Set-Cookie']).to eq("foo=bar")
115+
116+
request = Rack::Request.new("HTTPS" => "on")
117+
_, env = cookie_middleware.call request.env
118+
expect(env['Set-Cookie']).to eq("foo=bar; secure")
119+
end
108120
end
109121
end
110122
end

0 commit comments

Comments
 (0)