drillbit 2.11.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (92) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/lib/drillbit.rb +1 -0
  5. data/lib/drillbit/accept_header.rb +1 -0
  6. data/lib/drillbit/authorizable_resource.rb +61 -60
  7. data/lib/drillbit/authorizers/parameters.rb +1 -0
  8. data/lib/drillbit/authorizers/parameters/filtering.rb +7 -6
  9. data/lib/drillbit/authorizers/parameters/inclusions.rb +6 -9
  10. data/lib/drillbit/authorizers/parameters/resource.rb +20 -19
  11. data/lib/drillbit/authorizers/query.rb +1 -0
  12. data/lib/drillbit/authorizers/scope.rb +5 -4
  13. data/lib/drillbit/compatibility/controllers.rb +1 -0
  14. data/lib/drillbit/configuration.rb +14 -16
  15. data/lib/drillbit/errors/invalid_api_request.rb +1 -0
  16. data/lib/drillbit/errors/invalid_request_body.rb +1 -0
  17. data/lib/drillbit/errors/invalid_subdomain.rb +1 -0
  18. data/lib/drillbit/errors/invalid_token.rb +1 -0
  19. data/lib/drillbit/errors/unpermitted_inclusions.rb +1 -0
  20. data/lib/drillbit/matchers/accept_header.rb +1 -0
  21. data/lib/drillbit/matchers/generic.rb +4 -3
  22. data/lib/drillbit/matchers/subdomain.rb +5 -6
  23. data/lib/drillbit/matchers/version.rb +3 -2
  24. data/lib/drillbit/middleware/api_request_validator.rb +4 -3
  25. data/lib/drillbit/middleware/parameter_parser.rb +1 -0
  26. data/lib/drillbit/middleware/token_processor.rb +1 -0
  27. data/lib/drillbit/parameters/filter.rb +12 -11
  28. data/lib/drillbit/parameters/index.rb +3 -2
  29. data/lib/drillbit/parameters/page.rb +1 -0
  30. data/lib/drillbit/parameters/sort.rb +1 -0
  31. data/lib/drillbit/requests/base.rb +1 -1
  32. data/lib/drillbit/requests/rack.rb +3 -0
  33. data/lib/drillbit/requests/rails.rb +1 -0
  34. data/lib/drillbit/resource.rb +1 -0
  35. data/lib/drillbit/resource/model.rb +5 -4
  36. data/lib/drillbit/resource/naming.rb +11 -10
  37. data/lib/drillbit/resource/processors/filtering.rb +1 -0
  38. data/lib/drillbit/resource/processors/indexing.rb +1 -0
  39. data/lib/drillbit/resource/processors/paging.rb +4 -3
  40. data/lib/drillbit/resource/processors/sorting.rb +1 -0
  41. data/lib/drillbit/responses/invalid_api_request.rb +3 -0
  42. data/lib/drillbit/responses/invalid_request_body.rb +3 -0
  43. data/lib/drillbit/responses/invalid_subdomain.rb +3 -0
  44. data/lib/drillbit/responses/invalid_token.rb +3 -0
  45. data/lib/drillbit/serializers/json_api.rb +12 -11
  46. data/lib/drillbit/tokens/base64.rb +1 -0
  47. data/lib/drillbit/tokens/base64s/invalid.rb +1 -0
  48. data/lib/drillbit/tokens/base64s/null.rb +1 -0
  49. data/lib/drillbit/tokens/invalid.rb +1 -0
  50. data/lib/drillbit/tokens/json_web_token.rb +6 -5
  51. data/lib/drillbit/tokens/json_web_tokens/invalid.rb +1 -0
  52. data/lib/drillbit/tokens/json_web_tokens/null.rb +1 -0
  53. data/lib/drillbit/tokens/json_web_tokens/password_reset.rb +1 -0
  54. data/lib/drillbit/tokens/null.rb +1 -0
  55. data/lib/drillbit/utilities/string.rb +1 -0
  56. data/lib/drillbit/version.rb +2 -1
  57. metadata +28 -94
  58. metadata.gz.sig +0 -0
  59. data/Rakefile +0 -2
  60. data/spec/drillbit/accept_header_spec.rb +0 -119
  61. data/spec/drillbit/authorizers/parameters/filtering_spec.rb +0 -101
  62. data/spec/drillbit/authorizers/parameters/resource_spec.rb +0 -12
  63. data/spec/drillbit/authorizers/parameters_spec.rb +0 -19
  64. data/spec/drillbit/authorizers/query_spec.rb +0 -24
  65. data/spec/drillbit/authorizers/scope_spec.rb +0 -21
  66. data/spec/drillbit/errors/invalid_api_request_spec.rb +0 -31
  67. data/spec/drillbit/errors/invalid_request_body_spec.rb +0 -25
  68. data/spec/drillbit/errors/invalid_subdomain_spec.rb +0 -30
  69. data/spec/drillbit/errors/invalid_token_spec.rb +0 -24
  70. data/spec/drillbit/invalid_subdomain_spec.rb +0 -45
  71. data/spec/drillbit/invalid_token_spec.rb +0 -44
  72. data/spec/drillbit/matchers/accept_header_spec.rb +0 -114
  73. data/spec/drillbit/matchers/subdomain_spec.rb +0 -78
  74. data/spec/drillbit/matchers/version_spec.rb +0 -86
  75. data/spec/drillbit/middleware/api_request_validator_spec.rb +0 -185
  76. data/spec/drillbit/middleware/parameter_parser_spec.rb +0 -200
  77. data/spec/drillbit/middleware/token_processor_spec.rb +0 -27
  78. data/spec/drillbit/requests/base_spec.rb +0 -37
  79. data/spec/drillbit/requests/rack_spec.rb +0 -252
  80. data/spec/drillbit/requests/rails_spec.rb +0 -264
  81. data/spec/drillbit/resource/model_spec.rb +0 -64
  82. data/spec/drillbit/resource/processors/filtering_spec.rb +0 -106
  83. data/spec/drillbit/resource/processors/indexing_spec.rb +0 -45
  84. data/spec/drillbit/resource/processors/paging_spec.rb +0 -74
  85. data/spec/drillbit/resource/processors/sorting_spec.rb +0 -66
  86. data/spec/drillbit/tokens/base64_spec.rb +0 -44
  87. data/spec/drillbit/tokens/json_web_token_spec.rb +0 -231
  88. data/spec/drillbit/tokens/json_web_tokens/password_reset_spec.rb +0 -43
  89. data/spec/fixtures/test_rsa_key +0 -27
  90. data/spec/fixtures/test_rsa_key.pub +0 -9
  91. data/spec/spec_helper.rb +0 -4
  92. data/spec/support/private_keys.rb +0 -42
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9f2cd3d09f86bdd7d4e109c17f2d4673821171e9
4
- data.tar.gz: 6345b3d391ca1f1d9e54362485d4a8cb1333d9db
3
+ metadata.gz: 21b351789867855382f7d34e1e9be5992ba79675
4
+ data.tar.gz: de799bd372c085ec0c8bded02d0731eb376fc441
5
5
  SHA512:
6
- metadata.gz: 26d176bf8ae6eff05fd31beb9a1af4f345269bc63cf32b6792e63a602511024017a4252fa0d8f582b1c3e4ca63b5c517f679c6983df5d2d4f22e8b679cd41932
7
- data.tar.gz: 89329de1310a4d8111ea737e8d4874fcd02cc6733e8b8710365d667ffd018d9803d661fea553d15f31751f6d3346bd6c55f2b4f833c82d8355ea1a201c963a82
6
+ metadata.gz: 454f8b4ff3d4f0cecebccfb31cacb60054987cd78ec1616c756677a7e7e324d83eccb877f9c4b4e65ea18b8a650b9e9b3bd5096f69c0660c6ccf1017e350aa20
7
+ data.tar.gz: 519698ac22164db0b00e8f95dfcf499df299e5cc57c2eae67c6896e02416bd096ad547f7d3583489987fa2182005bf23e7d4f61f913ff5fb71e9dc3624541c2b
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'drillbit/version'
3
4
 
4
5
  require 'drillbit/authorizers/parameters'
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Drillbit
3
4
  class AcceptHeader
4
5
  attr_accessor :application,
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'drillbit/resource/naming'
3
4
  require 'drillbit/resource/model'
4
5
 
@@ -14,8 +15,8 @@ module AuthorizableResource
14
15
  def authorizer_class
15
16
  @authorizer_class ||= "#{authorizer_prefix}" \
16
17
  "Authorizers::" \
17
- "#{resource_class_name}".
18
- constantize
18
+ "#{resource_class_name}"
19
+ .constantize
19
20
  rescue NameError
20
21
  'Drillbit::Authorizers::Query'.constantize
21
22
  end
@@ -24,8 +25,8 @@ module AuthorizableResource
24
25
  @authorizer_scope_class ||= "#{authorizer_prefix}" \
25
26
  "Authorizers::" \
26
27
  "#{resource_class_name}" \
27
- "::Scope".
28
- constantize
28
+ "::Scope"
29
+ .constantize
29
30
  rescue NameError
30
31
  'Drillbit::Authorizers::Scope'.constantize
31
32
  end
@@ -34,8 +35,8 @@ module AuthorizableResource
34
35
  @authorizer_resource_params_class ||= "#{authorizer_prefix}" \
35
36
  "Authorizers::" \
36
37
  "#{resource_class_name}" \
37
- "::ResourceParameters".
38
- constantize
38
+ "::ResourceParameters"
39
+ .constantize
39
40
  rescue NameError
40
41
  'Drillbit::Authorizers::Parameters::Resource'.constantize
41
42
  end
@@ -44,8 +45,8 @@ module AuthorizableResource
44
45
  @authorizer_filtering_params_class ||= "#{authorizer_prefix}" \
45
46
  "Authorizers::" \
46
47
  "#{resource_class_name}::" \
47
- "FilteringParameters".
48
- constantize
48
+ "FilteringParameters"
49
+ .constantize
49
50
  rescue NameError
50
51
  'Drillbit::Authorizers::Parameters::Filtering'.constantize
51
52
  end
@@ -54,8 +55,8 @@ module AuthorizableResource
54
55
  @authorizer_inclusions_params_class ||= "#{authorizer_prefix}" \
55
56
  "Authorizers::" \
56
57
  "#{resource_class_name}::" \
57
- "InclusionParameters".
58
- constantize
58
+ "InclusionParameters"
59
+ .constantize
59
60
  rescue NameError
60
61
  'Drillbit::Authorizers::Parameters::Inclusions'.constantize
61
62
  end
@@ -82,50 +83,50 @@ module AuthorizableResource
82
83
  end
83
84
 
84
85
  def authorizer
85
- @authorizer ||= self.
86
- class.
87
- authorizer_class.
88
- new(action: action_name,
89
- token: token,
90
- user: authorized_user,
91
- issuer: authorized_issuer,
92
- params: authorized_params,
93
- resource: authorized_resource)
86
+ @authorizer ||= self
87
+ .class
88
+ .authorizer_class
89
+ .new(action: action_name,
90
+ token: token,
91
+ user: authorized_user,
92
+ issuer: authorized_issuer,
93
+ params: authorized_params,
94
+ resource: authorized_resource)
94
95
  end
95
96
 
96
97
  def authorized_scope
97
- @authorized_scope ||= self.
98
- class.
99
- authorizer_scope_class.
100
- new(action: action_name,
101
- token: token,
102
- user: authorized_user,
103
- issuer: authorized_issuer,
104
- params: authorized_params,
105
- scope_root: authorized_scope_root).
106
- call
98
+ @authorized_scope ||= self
99
+ .class
100
+ .authorizer_scope_class
101
+ .new(action: action_name,
102
+ token: token,
103
+ user: authorized_user,
104
+ issuer: authorized_issuer,
105
+ params: authorized_params,
106
+ scope_root: authorized_scope_root)
107
+ .call
107
108
  end
108
109
 
109
110
  def authorized_inclusions
110
- @authorized_inclusions ||= self.
111
- class.
112
- authorizer_inclusions_params_class.
113
- new(action: action_name,
114
- token: token,
115
- user: authorized_user,
116
- issuer: authorized_issuer,
117
- params: authorized_params).
118
- call
111
+ @authorized_inclusions ||= self
112
+ .class
113
+ .authorizer_inclusions_params_class
114
+ .new(action: action_name,
115
+ token: token,
116
+ user: authorized_user,
117
+ issuer: authorized_issuer,
118
+ params: authorized_params)
119
+ .call
119
120
  end
120
121
 
121
122
  def authorized_params
122
- @authorized_params ||= authorizer_params_class.
123
- new(action: action_name,
124
- token: token,
125
- user: authorized_user,
126
- issuer: authorized_issuer,
127
- params: params).
128
- call
123
+ @authorized_params ||= authorizer_params_class
124
+ .new(action: action_name,
125
+ token: token,
126
+ user: authorized_user,
127
+ issuer: authorized_issuer,
128
+ params: params)
129
+ .call
129
130
  end
130
131
 
131
132
  # rubocop:disable Metrics/AbcSize, Metrics/PerceivedComplexity
@@ -133,20 +134,20 @@ module AuthorizableResource
133
134
  # rubocop:disable Metrics/BlockNesting
134
135
  def authorized_attributes
135
136
  @authorized_attributes ||= begin
136
- attributes = authorized_params.
137
- fetch(:data, {}).
138
- fetch(:attributes, authorized_params.class.new)
137
+ attributes = authorized_params
138
+ .fetch(:data, {})
139
+ .fetch(:attributes, authorized_params.class.new)
139
140
 
140
141
  relationships = authorized_params.class.new
141
142
 
142
- authorized_params.
143
- fetch(:data, {}).
144
- fetch(:relationships, authorized_params.class.new).
145
- each_pair do |name, relationship|
143
+ authorized_params
144
+ .fetch(:data, {})
145
+ .fetch(:relationships, authorized_params.class.new)
146
+ .each_pair do |name, relationship|
146
147
  if relationship[:data].is_a?(Array)
147
148
  if (relationship[:data][0] || {})[:attributes]
148
149
  relationships["#{name}_attributes"] = relationship[:data].map do |datum|
149
- attrs = datum[:attributes].dup
150
+ attrs = datum[:attributes].dup
150
151
 
151
152
  attrs.delete(:__id__)
152
153
  attrs[:id] = datum[:id] if datum[:id]
@@ -177,18 +178,18 @@ module AuthorizableResource
177
178
  # rubocop:enable Metrics/AbcSize, Metrics/PerceivedComplexity
178
179
 
179
180
  def authorized_resource
180
- return nil if RESOURCE_COLLECTION_ACTIONS.include?(action_name)
181
+ return if RESOURCE_COLLECTION_ACTIONS.include?(action_name)
181
182
 
182
183
  @authorized_resource ||= public_send(self.class.singular_resource_name)
183
184
  end
184
185
 
185
186
  def authorized_collection
186
- return nil unless RESOURCE_COLLECTION_ACTIONS.include?(action_name)
187
+ return unless RESOURCE_COLLECTION_ACTIONS.include?(action_name)
187
188
 
188
189
  @authorized_collection ||= \
189
- Resource::Model.
190
- new(resource: public_send(self.class.plural_resource_name),
191
- parameters: authorized_params)
190
+ Resource::Model
191
+ .new(resource: public_send(self.class.plural_resource_name),
192
+ parameters: authorized_params)
192
193
  end
193
194
 
194
195
  def authorizer_params_class
@@ -201,8 +202,8 @@ module AuthorizableResource
201
202
 
202
203
  def authorized_scope_root
203
204
  @authorized_scope_root ||= "#{self.class.authorizer_prefix}" \
204
- "#{self.class.resource_class_name}".
205
- constantize
205
+ "#{self.class.resource_class_name}"
206
+ .constantize
206
207
  end
207
208
 
208
209
  def authorized_user
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Drillbit
3
4
  module Authorizers
4
5
  class Parameters
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'drillbit/authorizers/parameters'
3
4
 
4
5
  module Drillbit
@@ -35,9 +36,9 @@ class Filtering < Authorizers::Parameters
35
36
  end
36
37
 
37
38
  def add_filterable_parameter(name)
38
- param = params.
39
- fetch(:filter, {}).
40
- fetch(name, nil)
39
+ param = params
40
+ .fetch(:filter, {})
41
+ .fetch(name, nil)
41
42
 
42
43
  if param.class == Array
43
44
  authorized_params[7][:filter][1][name] = []
@@ -61,9 +62,9 @@ class Filtering < Authorizers::Parameters
61
62
 
62
63
  return true if !override_if_admin && token.admin?
63
64
 
64
- param = params.
65
- fetch(:filter, {}).
66
- fetch(name, nil)
65
+ param = params
66
+ .fetch(:filter, {})
67
+ .fetch(name, nil)
67
68
 
68
69
  return if !param && only_when_present
69
70
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'drillbit/authorizers/parameters'
3
4
  require 'drillbit/errors/unpermitted_inclusions'
4
5
 
@@ -6,18 +7,14 @@ module Drillbit
6
7
  module Authorizers
7
8
  class Parameters
8
9
  class Inclusions < Authorizers::Parameters
9
- attr_accessor :authorized_inclusions
10
+ attr_writer :authorized_inclusions
10
11
 
11
- # rubocop:disable Style/RaiseArgs
12
12
  def call
13
13
  fail Errors::UnpermittedInclusions.new(inclusions: requested_inclusions) \
14
14
  if inclusion_differences.any?
15
15
 
16
16
  authorized_inclusions
17
17
  end
18
- # rubocop:enable Style/RaiseArgs
19
-
20
- protected
21
18
 
22
19
  def authorized_inclusions
23
20
  @authorized_inclusions ||= []
@@ -36,10 +33,10 @@ class Inclusions < Authorizers::Parameters
36
33
  end
37
34
 
38
35
  def requested_inclusions
39
- @requested_inclusions ||= params.
40
- fetch(:include, '').
41
- split(',').
42
- map(&:to_sym)
36
+ @requested_inclusions ||= params
37
+ .fetch(:include, '')
38
+ .split(',')
39
+ .map(&:to_sym)
43
40
  end
44
41
 
45
42
  def inclusion_differences
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'drillbit/authorizers/parameters'
3
4
 
4
5
  module Drillbit
@@ -34,10 +35,10 @@ class Resource < Authorizers::Parameters
34
35
  end
35
36
 
36
37
  def add_authorized_attribute(name)
37
- param = params.
38
- fetch(:data, {}).
39
- fetch(:attributes, {}).
40
- fetch(name, nil)
38
+ param = params
39
+ .fetch(:data, {})
40
+ .fetch(:attributes, {})
41
+ .fetch(name, nil)
41
42
 
42
43
  if param.class == Array
43
44
  authorized_params[7][:data][2][:attributes][0][name] = []
@@ -54,17 +55,17 @@ class Resource < Authorizers::Parameters
54
55
 
55
56
  # rubocop:disable Metrics/AbcSize
56
57
  def add_authorized_relationship(name, embedded_attributes: [])
57
- param = params.
58
- fetch(:data, {}).
59
- fetch(:relationships, {}).
60
- fetch(name, {}).
61
- fetch(:data, nil)
62
- first = params.
63
- fetch(:data, {}).
64
- fetch(:relationships, {}).
65
- fetch(name, {}).
66
- fetch(:data, []).
67
- first || {}
58
+ param = params
59
+ .fetch(:data, {})
60
+ .fetch(:relationships, {})
61
+ .fetch(name, {})
62
+ .fetch(:data, nil)
63
+ first = params
64
+ .fetch(:data, {})
65
+ .fetch(:relationships, {})
66
+ .fetch(name, {})
67
+ .fetch(:data, [])
68
+ .first || {}
68
69
  embedded = first.fetch(:attributes, nil)
69
70
 
70
71
  if param.nil?
@@ -100,10 +101,10 @@ class Resource < Authorizers::Parameters
100
101
 
101
102
  return true if !override_if_admin && token.admin?
102
103
 
103
- param = params.
104
- fetch(:data, {}).
105
- fetch(:attributes, {}).
106
- fetch(name, nil)
104
+ param = params
105
+ .fetch(:data, {})
106
+ .fetch(:attributes, {})
107
+ .fetch(name, nil)
107
108
 
108
109
  return if !param && only_when_present
109
110
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Drillbit
3
4
  module Authorizers
4
5
  class Query
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'drillbit/utilities/string'
3
4
 
4
5
  module Drillbit
@@ -43,14 +44,14 @@ class Scope
43
44
  private
44
45
 
45
46
  def scope_user_id
46
- @scope_user_id ||= params.
47
- fetch(:filter, {}).
48
- fetch(user_underscored_class_name, nil)
47
+ @scope_user_id ||= params
48
+ .fetch(:filter, {})
49
+ .fetch(user_underscored_class_name, nil)
49
50
  end
50
51
 
51
52
  def user_underscored_class_name
52
53
  @user_underscored_class_name ||= begin
53
- base_user_class_name = user.class.name[/([^:]+)\z/, 1]
54
+ base_user_class_name = user.class.name[/([^:]+)\z/, 1]
54
55
 
55
56
  Utilities::String.underscore(base_user_class_name).downcase
56
57
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Drillbit
3
4
  module Compatibility
4
5
  module Controllers
@@ -1,22 +1,20 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Drillbit
3
4
  class Configuration
4
- attr_writer \
5
- :allowed_api_subdomains,
6
- :allowed_subdomains,
7
- :application_name,
8
- :available_token_roles,
9
- :default_api_version,
10
- :default_token_audience,
11
- :default_token_expiration_in_minutes,
12
- :default_token_issuer,
13
- :default_token_roles,
14
- :default_token_subject,
15
- :token_private_key,
16
- :token_type
17
-
18
- attr_accessor \
19
- :application_name
5
+ attr_writer :allowed_api_subdomains,
6
+ :allowed_subdomains,
7
+ :available_token_roles,
8
+ :default_api_version,
9
+ :default_token_audience,
10
+ :default_token_expiration_in_minutes,
11
+ :default_token_issuer,
12
+ :default_token_roles,
13
+ :default_token_subject,
14
+ :token_private_key,
15
+ :token_type
16
+
17
+ attr_accessor :application_name
20
18
 
21
19
  def to_h
22
20
  {