File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -9,7 +9,12 @@ def initialize(app)
99 def call ( env )
1010 req = Rack ::Request . new ( env )
1111 status , headers , response = @app . call ( env )
12- headers = Rack ::Headers [ headers ]
12+
13+ # Rack::Headers is available in Rack 3.x and later
14+ # So we should pull the headers into that structure if possible
15+ if defined? ( Rack ::Headers )
16+ headers = Rack ::Headers [ headers ]
17+ end
1318
1419 config = SecureHeaders . config_for ( req )
1520 flag_cookies! ( headers , override_secure ( env , config . cookies ) ) unless config . cookies == OPT_OUT
Original file line number Diff line number Diff line change @@ -36,6 +36,27 @@ module SecureHeaders
3636 expect ( env [ ContentSecurityPolicyConfig ::HEADER_NAME ] ) . to match ( "example.org" )
3737 end
3838
39+ context "Rack::Headers conversion" do
40+ it "converts headers to Rack::Headers when Rack::Headers is defined" do
41+ if defined? ( Rack ::Headers )
42+ _ , headers , = middleware . call ( Rack ::MockRequest . env_for ( "https://localhost" , { } ) )
43+ expect ( headers . is_a? ( Rack ::Headers ) ) . to be true
44+ else
45+ skip "Rack::Headers is not defined in this version of Rack"
46+ end
47+ end
48+
49+ it "keeps headers as a hash when Rack::Headers is not defined" do
50+ # Temporarily hide the Rack::Headers constant if it exists
51+ if defined? ( Rack ::Headers )
52+ hide_const ( "Rack::Headers" )
53+ end
54+
55+ _ , headers , = middleware . call ( Rack ::MockRequest . env_for ( "https://localhost" , { } ) )
56+ expect ( headers . is_a? ( Hash ) ) . to be true
57+ end
58+ end
59+
3960 context "cookies" do
4061 before ( :each ) do
4162 reset_config
You can’t perform that action at this time.
0 commit comments