rack-cors 1.0.1 → 1.0.2
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 rack-cors might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/lib/rack/cors.rb +14 -6
- data/lib/rack/cors/version.rb +1 -1
- data/test/unit/cors_test.rb +49 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7a4d5e6683440676f486ce61b3c16ff2e7c8f65e
|
4
|
+
data.tar.gz: be95c0c3dce56c965aff4b1cb398f2ad6fb4f6b3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8ae27dfd82bd822e700c476963118b15e68dee7850aaccb8b43a05670903f9f66217c8cd77dcf425f664581ecadf00eb43c1c1926648d97caf07c6d4a4dd0574
|
7
|
+
data.tar.gz: df278b2f1b3e6f0b01305d601fb58f2d41aef0579232d5ae27564be76483afdfb58b9219708d5a944c7db293025d7bacec4924dc63c06aefed2a7df4ad00e9ec
|
data/lib/rack/cors.rb
CHANGED
@@ -23,6 +23,10 @@ module Rack
|
|
23
23
|
|
24
24
|
DEFAULT_VARY_HEADERS = ['Origin'].freeze
|
25
25
|
|
26
|
+
# All CORS routes need to accept CORS simple headers at all times
|
27
|
+
# {https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers}
|
28
|
+
CORS_SIMPLE_HEADERS = ['accept', 'accept-language', 'content-language', 'content-type'].freeze
|
29
|
+
|
26
30
|
def initialize(app, opts={}, &block)
|
27
31
|
@app = app
|
28
32
|
@debug_mode = !!opts[:debug]
|
@@ -134,7 +138,7 @@ module Rack
|
|
134
138
|
@logger_proc = nil
|
135
139
|
logger_proc.call
|
136
140
|
|
137
|
-
elsif defined?(Rails) && Rails.logger
|
141
|
+
elsif defined?(Rails) && Rails.respond_to?(:logger) && Rails.logger
|
138
142
|
Rails.logger
|
139
143
|
|
140
144
|
elsif env[RACK_LOGGER]
|
@@ -155,7 +159,7 @@ module Rack
|
|
155
159
|
resource, error = match_resource(env)
|
156
160
|
unless resource
|
157
161
|
result.miss(error)
|
158
|
-
return {}
|
162
|
+
return {}
|
159
163
|
end
|
160
164
|
|
161
165
|
return resource.process_preflight(env, result)
|
@@ -407,10 +411,14 @@ module Rack
|
|
407
411
|
end
|
408
412
|
|
409
413
|
def allow_headers?(request_headers)
|
410
|
-
|
411
|
-
headers == :any
|
412
|
-
|
413
|
-
|
414
|
+
headers = self.headers || []
|
415
|
+
if headers == :any
|
416
|
+
return true
|
417
|
+
end
|
418
|
+
request_headers = request_headers.split(/,\s*/) if request_headers.kind_of?(String)
|
419
|
+
request_headers.all? do |header|
|
420
|
+
header = header.downcase
|
421
|
+
CORS_SIMPLE_HEADERS.include?(header) || headers.include?(header)
|
414
422
|
end
|
415
423
|
end
|
416
424
|
|
data/lib/rack/cors/version.rb
CHANGED
data/test/unit/cors_test.rb
CHANGED
@@ -16,7 +16,7 @@ end
|
|
16
16
|
Rack::Test::Methods.class_eval do
|
17
17
|
def_delegator :current_session, :options
|
18
18
|
end
|
19
|
-
|
19
|
+
|
20
20
|
module MiniTest::Assertions
|
21
21
|
def assert_cors_success(response)
|
22
22
|
assert !response.headers['Access-Control-Allow-Origin'].nil?, "Expected a successful CORS response"
|
@@ -405,6 +405,54 @@ describe Rack::Cors do
|
|
405
405
|
end
|
406
406
|
end
|
407
407
|
|
408
|
+
describe 'with headers set to nil' do
|
409
|
+
let(:app) do
|
410
|
+
Rack::Builder.new do
|
411
|
+
use Rack::Cors do
|
412
|
+
allow do
|
413
|
+
origins '*'
|
414
|
+
resource '/', headers: nil
|
415
|
+
end
|
416
|
+
end
|
417
|
+
map('/') do
|
418
|
+
run ->(env) { [200, {'Content-Type' => 'text/html'}, ['hello']] }
|
419
|
+
end
|
420
|
+
end
|
421
|
+
end
|
422
|
+
|
423
|
+
it 'should succeed with CORS simple headers' do
|
424
|
+
preflight_request('http://localhost:3000', '/', :headers => 'Accept')
|
425
|
+
last_response.must_render_cors_success
|
426
|
+
end
|
427
|
+
end
|
428
|
+
|
429
|
+
describe 'with custom allowed headers' do
|
430
|
+
let(:app) do
|
431
|
+
Rack::Builder.new do
|
432
|
+
use Rack::Cors do
|
433
|
+
allow do
|
434
|
+
origins '*'
|
435
|
+
resource '/', headers: []
|
436
|
+
end
|
437
|
+
end
|
438
|
+
map('/') do
|
439
|
+
run ->(env) { [200, {'Content-Type' => 'text/html'}, ['hello']] }
|
440
|
+
end
|
441
|
+
end
|
442
|
+
end
|
443
|
+
|
444
|
+
it 'should succeed with CORS simple headers' do
|
445
|
+
preflight_request('http://localhost:3000', '/', :headers => 'Accept')
|
446
|
+
last_response.must_render_cors_success
|
447
|
+
preflight_request('http://localhost:3000', '/', :headers => 'Accept-Language')
|
448
|
+
last_response.must_render_cors_success
|
449
|
+
preflight_request('http://localhost:3000', '/', :headers => 'Content-Type')
|
450
|
+
last_response.must_render_cors_success
|
451
|
+
preflight_request('http://localhost:3000', '/', :headers => 'Content-Language')
|
452
|
+
last_response.must_render_cors_success
|
453
|
+
end
|
454
|
+
end
|
455
|
+
|
408
456
|
protected
|
409
457
|
def cors_request(*args)
|
410
458
|
path = args.first.is_a?(String) ? args.first : '/'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-cors
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Calvin Yu
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-10-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|