apiphobic-middleware 1.5.0 → 1.6.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0750500f56a1bab3de09065d90587daf224be6b84ec881d793e1de4f201b82e0
4
- data.tar.gz: 5869dfd85d4f54cb069f8086e1a3a9a0eb026f223a01b08681884d88152d8da1
3
+ metadata.gz: ffd888d8e92f0fff36741793819ee39bced0b1bf17cb02b0e3b126e5a31790d6
4
+ data.tar.gz: c8dbc8d04954c9b1dfe8a5ef8919fcca36d8cd3f73a24cde2e88b12ef7f5a92e
5
5
  SHA512:
6
- metadata.gz: 897ebe5d9809f845f03ef09e4df3833b1f3c228e1ea45faccc98e4527cd35989fadeae52ee474f18e4dcc291ba92c1246052c3ef86d00f43c6a6744328d48c2c
7
- data.tar.gz: 418bd43b43a873507faaa91e2496c23383ba6e3e3cccba4d665696c2115b5f8c9fd9151816e5d56824ba94beba4d68462a9e6d6959d6dfc0dcf5fc41b4d6080c
6
+ metadata.gz: 78c4f781eaf02ae48f819828bc283cba5407ce879e2b383ab37ed2fa795cbe3776f3d555c48d89feab80a61dc1b5cfe1e8db09c9d9d290bb41daba6462660d8a
7
+ data.tar.gz: 59708e4a55b4c81f5b43fbdf270543fc617517023db6aa3b72fd61c8a7de712306cf1afe4ad26e65a0d9d6380d8d022ca1984704a5a576188aec8c2d02e58e1b
checksums.yaml.gz.sig CHANGED
Binary file
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2010-2016 The Kompanee, Ltd
1
+ Copyright (c) 2010-2019 The Kompanee, Ltd
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  of this software and associated documentation files (the "Software"), to deal
@@ -19,7 +19,7 @@ class InvalidRequestBody < RuntimeError
19
19
 
20
20
  def detail
21
21
  'The information you attempted to send in the request cannot be parsed as ' \
22
- 'a valid JSON document.'
22
+ 'a valid JSON document.'
23
23
  end
24
24
 
25
25
  def source
@@ -24,7 +24,7 @@ module Middleware
24
24
  end
25
25
 
26
26
  def allowed_subdomains
27
- @allowed_subdomains || ['api']
27
+ @allowed_subdomains || %w{api}
28
28
  end
29
29
 
30
30
  def allowed_method_overrides
@@ -32,7 +32,7 @@ module Middleware
32
32
  end
33
33
 
34
34
  def allowed_api_subdomains
35
- @allowed_api_subdomains || ['api']
35
+ @allowed_api_subdomains || %w{api}
36
36
  end
37
37
 
38
38
  def default_api_version
@@ -17,7 +17,7 @@ class RequestMethod
17
17
  @app = app
18
18
  end
19
19
 
20
- def call(env)
20
+ def call(env) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity
21
21
  self.request = Rack::Request.new(env)
22
22
  allowed_overrides = configuration.allowed_method_overrides
23
23
 
@@ -25,7 +25,7 @@ class RequestMethod
25
25
  path_pattern = path_pattern
26
26
  .gsub(':uuid', '[0-9a-f]{8}\\-(?:[0-9a-f]{4}\\-){3}[0-9a-f]{12}')
27
27
 
28
- next unless env['PATH_INFO'] =~ Regexp.new("\\A#{path_pattern}\\z")
28
+ next unless env['PATH_INFO']&.match?(Regexp.new("\\A#{path_pattern}\\z"))
29
29
 
30
30
  method_mappings.each do |from, to|
31
31
  next unless from.include?(env['REQUEST_METHOD'].downcase)
@@ -29,6 +29,7 @@ class AcceptHeader
29
29
 
30
30
  if !subdomain.matches?(subdomain_request) ||
31
31
  accept_header.matches?(accept_header_request)
32
+
32
33
  @app.call(env)
33
34
  else
34
35
  Responses::InvalidAcceptHeader.call(env)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Apiphobic
4
4
  module Middleware
5
- VERSION = '1.5.0'
5
+ VERSION = '1.6.0'
6
6
  end
7
7
  end
@@ -5,7 +5,7 @@ require 'apiphobic/accept_header'
5
5
  module Apiphobic
6
6
  module Requests
7
7
  class AcceptHeader
8
- ACCEPT_PARAM_PATTERN = /(?:\A|&)\_accept=(.+?)(?=\z|&)/
8
+ ACCEPT_PARAM_PATTERN = /(?:\A|&)_accept=(.+?)(?=\z|&)/
9
9
 
10
10
  attr_accessor :request
11
11
 
@@ -14,7 +14,7 @@ class AcceptHeader
14
14
  end
15
15
 
16
16
  def self.resolve(request)
17
- return request if request.class == self
17
+ return request if request.instance_of?(self)
18
18
 
19
19
  new(request)
20
20
  end
@@ -53,7 +53,10 @@ class AcceptHeader
53
53
  if request.respond_to?(:params)
54
54
  request.params['_accept']
55
55
  else
56
- URI.unescape(request['QUERY_STRING'][ACCEPT_PARAM_PATTERN, 1] || '') # rubocop:disable Lint/UriEscapeUnescape
56
+ raw_params_header = (request['QUERY_STRING'][ACCEPT_PARAM_PATTERN, 1] || '')
57
+ .gsub('+', '%2B')
58
+
59
+ CGI.unescape(raw_params_header)
57
60
  end
58
61
  end
59
62
  end
@@ -9,7 +9,7 @@ require 'apiphobic/tokens/json_web_tokens/null'
9
9
  module Apiphobic
10
10
  module Requests
11
11
  class AuthorizationToken
12
- BASE64_PATTERN = %r{[A-Za-z0-9_/\+\=\-\.]}
12
+ BASE64_PATTERN = %r{[A-Za-z0-9_/+=\-.]}
13
13
  BASE64_TOKEN_HEADER_PATTERN = /\A(?:Basic|Bearer)\s+(.*)\z/
14
14
  BASE64_TOKEN_PARAM_NAME = 'token_b64'
15
15
  BASE64_TOKEN_PARAM_PATTERN = /(?:\A|&)#{BASE64_TOKEN_PARAM_NAME}=(.*)(?=\z|&)/
@@ -37,7 +37,7 @@ class AuthorizationToken
37
37
  token_from_header
38
38
  elsif !token_from_params.blank?
39
39
  token_from_params
40
- else
40
+ else # rubocop:disable Lint/DuplicateBranch
41
41
  token_from_header
42
42
  end
43
43
  end
@@ -30,11 +30,11 @@ class TransformJsonApi
30
30
  private
31
31
 
32
32
  def has_content?
33
- request['CONTENT_LENGTH'].to_i.positive?
33
+ request['CONTENT_LENGTH'].to_i > 0
34
34
  end
35
35
 
36
36
  def json?
37
- request['CONTENT_TYPE'] =~ /json/
37
+ request['CONTENT_TYPE'].include?('json')
38
38
  end
39
39
 
40
40
  def content_length
@@ -46,16 +46,17 @@ class TransformJsonApi
46
46
  end
47
47
 
48
48
  def query_string_with_underscored_parameters
49
- @query_string_with_underscored_parameters ||= begin
50
- return query_string unless query_string.respond_to?(:gsub)
51
-
52
- query_string.gsub(/(?<=\A|&|\?)[^=&]+/) do |parameter_name|
53
- unescaped_parameter_name = CGI.unescape(parameter_name)
54
- underscored_parameter_name = unescaped_parameter_name.underscore
55
-
56
- CGI.escape(underscored_parameter_name)
57
- end
58
- end
49
+ @query_string_with_underscored_parameters \
50
+ ||= if query_string.respond_to?(:gsub)
51
+ query_string.gsub(/(?<=\A|&|\?)[^=&]+/) do |parameter_name|
52
+ unescaped_parameter_name = CGI.unescape(parameter_name)
53
+ underscored_parameter_name = unescaped_parameter_name.underscore
54
+
55
+ CGI.escape(underscored_parameter_name)
56
+ end
57
+ else
58
+ query_string
59
+ end
59
60
  end
60
61
 
61
62
  def underscored_request_json
@@ -1,4 +1,3 @@
1
-
2
1
  # frozen_string_literal: true
3
2
 
4
3
  module Apiphobic
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: apiphobic-middleware
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 1.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - thegranddesign
@@ -10,49 +10,55 @@ bindir: bin
10
10
  cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
- MIIDqjCCApKgAwIBAgIBATANBgkqhkiG9w0BAQUFADBNMREwDwYDVQQDDAhydWJ5
14
- Z2VtczEjMCEGCgmSJomT8ixkARkWE2xpdmluZ2hpZ2hvbnRoZWJsb2cxEzARBgoJ
15
- kiaJk/IsZAEZFgNjb20wHhcNMTcwODAyMjI1OTM1WhcNMTgwODAyMjI1OTM1WjBN
16
- MREwDwYDVQQDDAhydWJ5Z2VtczEjMCEGCgmSJomT8ixkARkWE2xpdmluZ2hpZ2hv
17
- bnRoZWJsb2cxEzARBgoJkiaJk/IsZAEZFgNjb20wggEiMA0GCSqGSIb3DQEBAQUA
18
- A4IBDwAwggEKAoIBAQDtLa7+7p49gW15OgOyRZad/F92iZcMdDjZ2kAxZlviXgVe
19
- PCtjfdURobH+YMdt++6eRkE25utIFqHyN51Shxfdc21T3fPQe/ZEoMyiJK4tYzbh
20
- 7VjNJG4ldvKKpS1p7iVz9imnyTxNwb0JaIOsOFCA04T0u6aCQi2acNvAPLviXk0q
21
- xJ/CKjI4QUTZKVrBt8Q1Egrp2yzmEnSNftDuTbBb8m4vDR+w325CwbKCgycHJ1/g
22
- YZ3FO76TzJuRVbsYS/bU5XKHVEpkeFmWBqEXsk4DuUIWLa6WZEJcoZf+YP+1pycG
23
- 7YqSbydpINtEdopD+EEI+g+zNJ4nSI8/eQcQyEjBAgMBAAGjgZQwgZEwCQYDVR0T
24
- BAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFDWuVrg4ve0vLu71kqiGdyBnzJGV
25
- MCsGA1UdEQQkMCKBIHJ1YnlnZW1zQGxpdmluZ2hpZ2hvbnRoZWJsb2cuY29tMCsG
26
- A1UdEgQkMCKBIHJ1YnlnZW1zQGxpdmluZ2hpZ2hvbnRoZWJsb2cuY29tMA0GCSqG
27
- SIb3DQEBBQUAA4IBAQDJIpHjbBPGiaY4wOHcXlltQ+BMmhWQNh+1fZtyajQd+7Ay
28
- fv23mO7Mf25Q38gopQlpaODkfxq54Jt8FvQbr5RYRS4j+JEKb75NgrAtehd8USUd
29
- CiJJGH+yvGNWug9IGZCGX91HIbTsLQ5IUUWQasC5jGP8nxXufUr9xgAJZZenewny
30
- B2qKu8q1A/kj6cw62RCY7yBmUXxlcJBj8g+JKYAFbYYKUdQSzf50k9IiWLWunJM+
31
- Y2GAoHKstmfIVhc4XHOPpmTd2o/C29O9oaRgjrkfQEhF/KvJ/PhoV5hvokzsCyI5
32
- iUeXPfvrGD/itYIBCgk+fnzyQQ4QtE5hTQaWQ3o2
13
+ MIIEyjCCAzKgAwIBAgIBATANBgkqhkiG9w0BAQsFADBVMSIwIAYDVQQDDBlsb2Nh
14
+ bGV1bmtub3duODEwX3J1YnlnZW1zMRowGAYKCZImiZPyLGQBGRYKcHJvdG9ubWFp
15
+ bDETMBEGCgmSJomT8ixkARkWA2NvbTAeFw0yMjA3MDkwNTMxMjJaFw0yMzA3MDkw
16
+ NTMxMjJaMFUxIjAgBgNVBAMMGWxvY2FsZXVua25vd244MTBfcnVieWdlbXMxGjAY
17
+ BgoJkiaJk/IsZAEZFgpwcm90b25tYWlsMRMwEQYKCZImiZPyLGQBGRYDY29tMIIB
18
+ ojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA0otlhSPyU7jLLW1p786Mo/pV
19
+ 5cJ1Ed8D/bJK78PqGFO2h0ZUefupxT5PRMokLYNNGRPopnAAxZ0zVxJ68aOyYCBW
20
+ Wk3/XFcXCrtk/OcFwLTltgeMjyqCBd/zRRx6CCjY4uOfH0E3n1gQ6Fbmewjg83XJ
21
+ nOs7Gu/hzj5+feEQ1Exmg6z1oCM/8BTIBtK+p++HvcDK3AhJ7x3fc6P9WS+22w6j
22
+ 7jpi3p9YtoAjrXIzw3lsobiX+bEt+N+T47e8gOATVgapuZ/QmJzNU6LWepehs4V1
23
+ 8J+FUaIMV7nAMKmpkbYL51uHEiGV+HDx1HUdOsCFx8zD4h49KRT2t6AcumJ5P1Cj
24
+ c7NX2xl85ShHDNNFkozuC2c5cwj6F20EVaVjGwv2OFq0S2tUw9EJXHTN9RpfRUmn
25
+ IHwS9M4gcJO7IzV39a1YL6+9hrabF4+JTSYDehq8oxTdcOPLYyvH54aJWVqCrnLO
26
+ KNa/p6hMmwxTWNS5Vz0uxuEGyE9E0tHbtjIs2XX5AgMBAAGjgaQwgaEwCQYDVR0T
27
+ BAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFAK3RicwO0f6+puFN6lRVMOKMJuu
28
+ MDMGA1UdEQQsMCqBKGxvY2FsZXVua25vd244MTArcnVieWdlbXNAcHJvdG9ubWFp
29
+ bC5jb20wMwYDVR0SBCwwKoEobG9jYWxldW5rbm93bjgxMCtydWJ5Z2Vtc0Bwcm90
30
+ b25tYWlsLmNvbTANBgkqhkiG9w0BAQsFAAOCAYEAQwV6pOp5gm8141pyXeQFI/5E
31
+ rZYO3MvdyZM8O3HMD51LDS8mtMURceaKZM6WTambe2RVX4A++0qUiEnn9K4Fexm/
32
+ SEGaC/Gp+Fg9D1SKfkdq9bgdIhOEUwiGqjczgzNC806AtWZ+awI940oydFYZlpo0
33
+ jMQihPPJEqF1U6JBDMZYV5tX/dJYSGRl9L3s1k2tjoN98q+beNaZQDn21Amml4eK
34
+ KEkMeTTJ2E4GVzR9eKEETLq2LygdUWWZ5NdWOYTxJMdg1GZp3b6X8hJrwfOiizqt
35
+ /ANlIEh11/pOnWa6WPUVpGIMpYdquvmJXnF2LX6zxkKK1hbrebt+vAEAGczgw1Ri
36
+ rkLM6y+BHQdkOTj3VG4MjIU8D4h1Z73Exzxds/VbVKMEz+8JrFjGJ/tYa0PZ8U5p
37
+ 3yXL4G6eW3rdBW/OiLF7GgG2o26d02OMzf4+ubUVS5LQDOcd4vgNPLWzJSBt1YIh
38
+ TgBsED7Me5YdMVXxtTWYsF1VMzaL9hReD3UXGcxe
33
39
  -----END CERTIFICATE-----
34
- date: 2018-06-16 00:00:00.000000000 Z
40
+ date: 2022-07-09 00:00:00.000000000 Z
35
41
  dependencies:
36
42
  - !ruby/object:Gem::Dependency
37
43
  name: apiphobic-tokens
38
44
  requirement: !ruby/object:Gem::Requirement
39
45
  requirements:
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- version: 1.0.1
43
46
  - - "~>"
44
47
  - !ruby/object:Gem::Version
45
48
  version: '1.0'
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: 1.2.0
46
52
  type: :runtime
47
53
  prerelease: false
48
54
  version_requirements: !ruby/object:Gem::Requirement
49
55
  requirements:
50
- - - ">="
51
- - !ruby/object:Gem::Version
52
- version: 1.0.1
53
56
  - - "~>"
54
57
  - !ruby/object:Gem::Version
55
58
  version: '1.0'
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 1.2.0
56
62
  - !ruby/object:Gem::Dependency
57
63
  name: apple_core
58
64
  requirement: !ruby/object:Gem::Requirement
@@ -71,22 +77,16 @@ dependencies:
71
77
  name: erratum
72
78
  requirement: !ruby/object:Gem::Requirement
73
79
  requirements:
74
- - - ">="
75
- - !ruby/object:Gem::Version
76
- version: 3.1.1
77
80
  - - "~>"
78
81
  - !ruby/object:Gem::Version
79
- version: '3.1'
82
+ version: '4.0'
80
83
  type: :runtime
81
84
  prerelease: false
82
85
  version_requirements: !ruby/object:Gem::Requirement
83
86
  requirements:
84
- - - ">="
85
- - !ruby/object:Gem::Version
86
- version: 3.1.1
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '3.1'
89
+ version: '4.0'
90
90
  - !ruby/object:Gem::Dependency
91
91
  name: rack
92
92
  requirement: !ruby/object:Gem::Requirement
@@ -101,20 +101,34 @@ dependencies:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
103
  version: '2.0'
104
+ - !ruby/object:Gem::Dependency
105
+ name: byebug
106
+ requirement: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '11.0'
111
+ type: :development
112
+ prerelease: false
113
+ version_requirements: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '11.0'
104
118
  - !ruby/object:Gem::Dependency
105
119
  name: rspec
106
120
  requirement: !ruby/object:Gem::Requirement
107
121
  requirements:
108
122
  - - "~>"
109
123
  - !ruby/object:Gem::Version
110
- version: '3.7'
124
+ version: '3.11'
111
125
  type: :development
112
126
  prerelease: false
113
127
  version_requirements: !ruby/object:Gem::Requirement
114
128
  requirements:
115
129
  - - "~>"
116
130
  - !ruby/object:Gem::Version
117
- version: '3.7'
131
+ version: '3.11'
118
132
  - !ruby/object:Gem::Dependency
119
133
  name: rspeckled
120
134
  requirement: !ruby/object:Gem::Requirement
@@ -179,11 +193,18 @@ files:
179
193
  - lib/apiphobic/responses/invalid_subdomain.rb
180
194
  - lib/apiphobic/responses/invalid_token.rb
181
195
  - lib/apiphobic/responses/transform_json_api.rb
182
- homepage: ''
196
+ homepage: https://github.com/thekompanee/apiphobic-middleware
183
197
  licenses:
184
198
  - MIT
185
199
  metadata:
186
200
  allowed_push_host: https://rubygems.org
201
+ bug_tracker_uri: https://github.com/thekompanee/apiphobic-middleware/issues
202
+ changelog_uri: https://github.com/thekompanee/apiphobic-middleware/blob/master/CHANGELOG.md
203
+ documentation_uri: https://github.com/thekompanee/apiphobic-middleware/tree/releases/v1.6.0
204
+ homepage_uri: https://github.com/thekompanee/apiphobic-middleware
205
+ source_code_uri: https://github.com/thekompanee/apiphobic-middleware
206
+ wiki_uri: https://github.com/thekompanee/apiphobic-middleware/wiki
207
+ rubygems_mfa_required: 'true'
187
208
  post_install_message:
188
209
  rdoc_options: []
189
210
  require_paths:
@@ -199,8 +220,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
199
220
  - !ruby/object:Gem::Version
200
221
  version: '0'
201
222
  requirements: []
202
- rubyforge_project:
203
- rubygems_version: 2.7.6
223
+ rubygems_version: 3.3.7
204
224
  signing_key:
205
225
  specification_version: 4
206
226
  summary: Middleware to Validate API Requests
metadata.gz.sig CHANGED
Binary file