apill 4.0.0 → 4.0.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.
- checksums.yaml +4 -4
- data/lib/apill/matchers/accept_header.rb +3 -1
- data/lib/apill/matchers/generic.rb +12 -4
- data/lib/apill/matchers/subdomain.rb +7 -5
- data/lib/apill/matchers/version.rb +3 -1
- data/lib/apill/middleware/api_request.rb +5 -5
- data/lib/apill/version.rb +1 -1
- data/spec/apill/matchers/accept_header_spec.rb +14 -14
- data/spec/apill/matchers/subdomain_spec.rb +16 -20
- data/spec/apill/matchers/version_spec.rb +10 -15
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 03e1a8c3d7621029eab5a87a4180786a121230f9
|
4
|
+
data.tar.gz: 434bd913e8c60b006c33f4144a22a5ac5917ae28
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b9ac29a6cc63975df8d0b54b3b369fd54be33c675a81fad922221877c65812cf681d40346363c4b249341e3b91e78d8bc0b012c25e095a9be01a2d8a3340995a
|
7
|
+
data.tar.gz: 79b641b0689d7ae9e4c2ed79f17c370b212ac775ae09a701e5c6563901d291088b9f8be4ce63cd19dc7052d1f72d3730467b503ecda8e25bf6f433b24be095ff
|
@@ -5,14 +5,22 @@ module Generic
|
|
5
5
|
:accept_header,
|
6
6
|
:request
|
7
7
|
|
8
|
-
def initialize(
|
8
|
+
def initialize(**args)
|
9
9
|
args.each do |variable, value|
|
10
10
|
__send__("#{variable}=", value)
|
11
11
|
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def matches?(request)
|
15
|
+
self.request = request
|
16
|
+
end
|
17
|
+
|
18
|
+
def application
|
19
|
+
request.application_name
|
20
|
+
end
|
12
21
|
|
13
|
-
|
14
|
-
|
15
|
-
self.accept_header = request.accept_header
|
22
|
+
def accept_header
|
23
|
+
request.accept_header
|
16
24
|
end
|
17
25
|
end
|
18
26
|
end
|
@@ -2,19 +2,21 @@ module Apill
|
|
2
2
|
module Matchers
|
3
3
|
class Subdomain
|
4
4
|
def initialize(allowed_subdomains: Apill.configuration.allowed_subdomains,
|
5
|
-
allowed_api_subdomains: Apill.configuration.allowed_api_subdomains
|
6
|
-
request:)
|
5
|
+
allowed_api_subdomains: Apill.configuration.allowed_api_subdomains)
|
7
6
|
|
8
7
|
self.allowed_subdomains = Array(allowed_subdomains)
|
9
8
|
self.allowed_api_subdomains = Array(allowed_api_subdomains)
|
10
|
-
self.request = request
|
11
9
|
end
|
12
10
|
|
13
|
-
def matches?
|
11
|
+
def matches?(request)
|
12
|
+
self.request = request
|
13
|
+
|
14
14
|
allowed_subdomains.include? request.subdomain
|
15
15
|
end
|
16
16
|
|
17
|
-
def matches_api_subdomain?
|
17
|
+
def matches_api_subdomain?(request)
|
18
|
+
self.request = request
|
19
|
+
|
18
20
|
allowed_api_subdomains.include? request.subdomain
|
19
21
|
end
|
20
22
|
|
@@ -19,13 +19,13 @@ class ApiRequest
|
|
19
19
|
env['HTTP_X_APPLICATION_NAME'] = Apill.configuration.application_name
|
20
20
|
|
21
21
|
request = Requests::Base.resolve(env)
|
22
|
-
subdomain_matcher = Matchers::Subdomain.new
|
23
|
-
accept_header_matcher = Matchers::AcceptHeader.new
|
22
|
+
subdomain_matcher = Matchers::Subdomain.new
|
23
|
+
accept_header_matcher = Matchers::AcceptHeader.new
|
24
24
|
token = request.authorization_token
|
25
25
|
|
26
|
-
return Responses::InvalidSubdomain.call(env) unless subdomain_matcher.matches?
|
27
|
-
return Responses::InvalidApiRequest.call(env) unless !subdomain_matcher.matches_api_subdomain? ||
|
28
|
-
accept_header_matcher.matches?
|
26
|
+
return Responses::InvalidSubdomain.call(env) unless subdomain_matcher.matches?(request)
|
27
|
+
return Responses::InvalidApiRequest.call(env) unless !subdomain_matcher.matches_api_subdomain?(request) ||
|
28
|
+
accept_header_matcher.matches?(request)
|
29
29
|
return Responses::InvalidToken.call(env) unless token.valid?
|
30
30
|
|
31
31
|
env['HTTP_X_JSON_WEB_TOKEN'] = token.to_h
|
data/lib/apill/version.rb
CHANGED
@@ -12,9 +12,9 @@ describe AcceptHeader do
|
|
12
12
|
}
|
13
13
|
request = Requests::Base.resolve(env)
|
14
14
|
|
15
|
-
matcher = AcceptHeader.new
|
15
|
+
matcher = AcceptHeader.new
|
16
16
|
|
17
|
-
expect(matcher).to
|
17
|
+
expect(matcher.matches?(request)).to be_a TrueClass
|
18
18
|
end
|
19
19
|
|
20
20
|
it 'matches if the subdomain is API and the accept header is passed in as ' \
|
@@ -26,9 +26,9 @@ describe AcceptHeader do
|
|
26
26
|
}
|
27
27
|
request = Requests::Base.resolve(env)
|
28
28
|
|
29
|
-
matcher = AcceptHeader.new
|
29
|
+
matcher = AcceptHeader.new
|
30
30
|
|
31
|
-
expect(matcher).to
|
31
|
+
expect(matcher.matches?(request)).to be_a TrueClass
|
32
32
|
end
|
33
33
|
|
34
34
|
it 'matches if the subdomain is API and the accept header is passed in as a ' \
|
@@ -41,9 +41,9 @@ describe AcceptHeader do
|
|
41
41
|
}
|
42
42
|
request = Requests::Base.resolve(env)
|
43
43
|
|
44
|
-
matcher = AcceptHeader.new
|
44
|
+
matcher = AcceptHeader.new
|
45
45
|
|
46
|
-
expect(matcher).to
|
46
|
+
expect(matcher.matches?(request)).to be_a TrueClass
|
47
47
|
end
|
48
48
|
|
49
49
|
it 'matches the header accept header if the subdomain is API and the accept header ' \
|
@@ -56,8 +56,8 @@ describe AcceptHeader do
|
|
56
56
|
}
|
57
57
|
request = Requests::Base.resolve(env)
|
58
58
|
|
59
|
-
matcher = AcceptHeader.new
|
60
|
-
matcher.matches?
|
59
|
+
matcher = AcceptHeader.new
|
60
|
+
matcher.matches?(request)
|
61
61
|
|
62
62
|
expect(matcher.accept_header.version).to eql '1.0.0'
|
63
63
|
end
|
@@ -72,8 +72,8 @@ describe AcceptHeader do
|
|
72
72
|
}
|
73
73
|
request = Requests::Base.resolve(env)
|
74
74
|
|
75
|
-
matcher = AcceptHeader.new
|
76
|
-
matcher.matches?
|
75
|
+
matcher = AcceptHeader.new
|
76
|
+
matcher.matches?(request)
|
77
77
|
|
78
78
|
expect(matcher.accept_header.version).to eql '2.0.0'
|
79
79
|
end
|
@@ -88,8 +88,8 @@ describe AcceptHeader do
|
|
88
88
|
}
|
89
89
|
request = Requests::Base.resolve(env)
|
90
90
|
|
91
|
-
matcher = AcceptHeader.new
|
92
|
-
matcher.matches?
|
91
|
+
matcher = AcceptHeader.new
|
92
|
+
matcher.matches?(request)
|
93
93
|
|
94
94
|
expect(matcher.accept_header.raw_accept_header).to eql \
|
95
95
|
'application/vndmatrix+zion;version=1.0.0'
|
@@ -103,9 +103,9 @@ describe AcceptHeader do
|
|
103
103
|
}
|
104
104
|
request = Requests::Base.resolve(env)
|
105
105
|
|
106
|
-
matcher = AcceptHeader.new
|
106
|
+
matcher = AcceptHeader.new
|
107
107
|
|
108
|
-
expect(matcher).
|
108
|
+
expect(matcher.matches?(request)).to be_a FalseClass
|
109
109
|
end
|
110
110
|
end
|
111
111
|
end
|
@@ -14,67 +14,63 @@ describe Subdomain do
|
|
14
14
|
it 'matches if the subdomain is API' do
|
15
15
|
env = { 'HTTP_HOST' => 'api.example.com' }
|
16
16
|
request = Requests::Base.resolve(env)
|
17
|
-
matcher = Subdomain.new
|
17
|
+
matcher = Subdomain.new
|
18
18
|
|
19
|
-
expect(matcher.matches?).to be_a TrueClass
|
19
|
+
expect(matcher.matches?(request)).to be_a TrueClass
|
20
20
|
end
|
21
21
|
|
22
22
|
it 'matches if the first subdomain is API' do
|
23
23
|
env = { 'HTTP_HOST' => 'api.matrix.example.com' }
|
24
24
|
request = Requests::Base.resolve(env)
|
25
|
-
matcher = Subdomain.new
|
25
|
+
matcher = Subdomain.new
|
26
26
|
|
27
|
-
expect(matcher.matches?).to be_a TrueClass
|
27
|
+
expect(matcher.matches?(request)).to be_a TrueClass
|
28
28
|
end
|
29
29
|
|
30
30
|
it 'does not match if the first subdomain is not API' do
|
31
31
|
env = { 'HTTP_HOST' => 'matrix.example.com' }
|
32
32
|
request = Requests::Base.resolve(env)
|
33
|
-
matcher = Subdomain.new
|
33
|
+
matcher = Subdomain.new
|
34
34
|
|
35
|
-
expect(matcher.matches?).to be_a FalseClass
|
35
|
+
expect(matcher.matches?(request)).to be_a FalseClass
|
36
36
|
end
|
37
37
|
|
38
38
|
it 'allows the matched subdomain to be specified' do
|
39
39
|
env = { 'HTTP_HOST' => 'matrix.example.com' }
|
40
40
|
request = Requests::Base.resolve(env)
|
41
|
-
matcher = Subdomain.new(allowed_subdomains: 'matrix'
|
42
|
-
request: request)
|
41
|
+
matcher = Subdomain.new(allowed_subdomains: 'matrix')
|
43
42
|
|
44
|
-
expect(matcher.matches?).to be_a TrueClass
|
43
|
+
expect(matcher.matches?(request)).to be_a TrueClass
|
45
44
|
end
|
46
45
|
|
47
46
|
it 'allows more than one subdomain to be matched' do
|
48
47
|
env = { 'HTTP_HOST' => 'matrix.example.com' }
|
49
48
|
request = Requests::Base.resolve(env)
|
50
|
-
matcher = Subdomain.new(allowed_subdomains: %w{api matrix}
|
51
|
-
request: request)
|
49
|
+
matcher = Subdomain.new(allowed_subdomains: %w{api matrix})
|
52
50
|
|
53
|
-
expect(matcher.matches?).to be_a TrueClass
|
51
|
+
expect(matcher.matches?(request)).to be_a TrueClass
|
54
52
|
|
55
53
|
env = { 'HTTP_HOST' => 'api.example.com' }
|
56
54
|
request = Requests::Base.resolve(env)
|
57
|
-
matcher = Subdomain.new(allowed_subdomains: %w{api matrix}
|
58
|
-
request: request)
|
55
|
+
matcher = Subdomain.new(allowed_subdomains: %w{api matrix})
|
59
56
|
|
60
|
-
expect(matcher.matches?).to be_a TrueClass
|
57
|
+
expect(matcher.matches?(request)).to be_a TrueClass
|
61
58
|
end
|
62
59
|
|
63
60
|
it 'can match only the api subdomain' do
|
64
61
|
env = { 'HTTP_HOST' => 'matrix.example.com' }
|
65
62
|
request = Requests::Base.resolve(env)
|
66
|
-
matcher = Subdomain.new(allowed_api_subdomains: %w{matrix}
|
67
|
-
request: request)
|
63
|
+
matcher = Subdomain.new(allowed_api_subdomains: %w{matrix})
|
68
64
|
|
69
|
-
expect(matcher.matches_api_subdomain?).to be_a TrueClass
|
65
|
+
expect(matcher.matches_api_subdomain?(request)).to be_a TrueClass
|
70
66
|
end
|
71
67
|
|
72
68
|
it 'matches "api" as an api subdomain by default' do
|
73
69
|
env = { 'HTTP_HOST' => 'api.example.com' }
|
74
70
|
request = Requests::Base.resolve(env)
|
75
|
-
matcher = Subdomain.new
|
71
|
+
matcher = Subdomain.new
|
76
72
|
|
77
|
-
expect(matcher.matches_api_subdomain?).to be_a TrueClass
|
73
|
+
expect(matcher.matches_api_subdomain?(request)).to be_a TrueClass
|
78
74
|
end
|
79
75
|
end
|
80
76
|
end
|
@@ -15,10 +15,9 @@ describe Version do
|
|
15
15
|
}
|
16
16
|
request = Requests::Base.resolve(env)
|
17
17
|
|
18
|
-
matcher = Version.new(
|
19
|
-
version_constraint: '10.1')
|
18
|
+
matcher = Version.new(version_constraint: '10.1')
|
20
19
|
|
21
|
-
expect(matcher).
|
20
|
+
expect(matcher.matches?(request)).to be_a FalseClass
|
22
21
|
end
|
23
22
|
|
24
23
|
it 'does match if the subdomain is API and the requested version equals the ' \
|
@@ -30,10 +29,9 @@ describe Version do
|
|
30
29
|
}
|
31
30
|
request = Requests::Base.resolve(env)
|
32
31
|
|
33
|
-
matcher = Version.new(
|
34
|
-
version_constraint: '10.0')
|
32
|
+
matcher = Version.new(version_constraint: '10.0')
|
35
33
|
|
36
|
-
expect(matcher).to
|
34
|
+
expect(matcher.matches?(request)).to be_a TrueClass
|
37
35
|
end
|
38
36
|
end
|
39
37
|
|
@@ -47,11 +45,10 @@ describe Version do
|
|
47
45
|
}
|
48
46
|
request = Requests::Base.resolve(env)
|
49
47
|
|
50
|
-
matcher = Version.new(
|
51
|
-
version_constraint: '10.1',
|
48
|
+
matcher = Version.new(version_constraint: '10.1',
|
52
49
|
default_version: '10.0')
|
53
50
|
|
54
|
-
expect(matcher).
|
51
|
+
expect(matcher.matches?(request)).to be_a FalseClass
|
55
52
|
end
|
56
53
|
|
57
54
|
it 'does match if the subdomain is API and the requested version equals the ' \
|
@@ -63,11 +60,10 @@ describe Version do
|
|
63
60
|
}
|
64
61
|
request = Requests::Base.resolve(env)
|
65
62
|
|
66
|
-
matcher = Version.new(
|
67
|
-
version_constraint: '10.0',
|
63
|
+
matcher = Version.new(version_constraint: '10.0',
|
68
64
|
default_version: '10.0')
|
69
65
|
|
70
|
-
expect(matcher).to
|
66
|
+
expect(matcher.matches?(request)).to be_a TrueClass
|
71
67
|
end
|
72
68
|
end
|
73
69
|
|
@@ -80,10 +76,9 @@ describe Version do
|
|
80
76
|
}
|
81
77
|
request = Requests::Base.resolve(env)
|
82
78
|
|
83
|
-
matcher = Version.new(
|
84
|
-
version_constraint: '100.0')
|
79
|
+
matcher = Version.new(version_constraint: '100.0')
|
85
80
|
|
86
|
-
expect(matcher).to
|
81
|
+
expect(matcher.matches?(request)).to be_a TrueClass
|
87
82
|
end
|
88
83
|
end
|
89
84
|
end
|