skull_island 2.0.4 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -74,6 +74,8 @@ module SkullIsland
74
74
  Plugin.where(:route, self, api_client: api_client)
75
75
  end
76
76
 
77
+ # rubocop:disable Metrics/CyclomaticComplexity
78
+ # rubocop:disable Metrics/PerceivedComplexity
77
79
  # rubocop:disable Metrics/AbcSize
78
80
  def export(options = {})
79
81
  hash = {
@@ -99,6 +101,8 @@ module SkullIsland
99
101
  end
100
102
  hash.reject { |_, value| value.nil? }
101
103
  end
104
+ # rubocop:enable Metrics/CyclomaticComplexity
105
+ # rubocop:enable Metrics/PerceivedComplexity
102
106
  # rubocop:enable Metrics/AbcSize
103
107
 
104
108
  def modified_existing?
@@ -10,14 +10,16 @@ module SkullIsland
10
10
  include Helpers::Meta
11
11
 
12
12
  property :name
13
- property :retries
13
+ property :retries, validate: true
14
14
  property :protocol, validate: true, required: true
15
15
  property :host, validate: true, required: true
16
16
  property :port, validate: true, required: true
17
+ property :tls_verify, type: :boolean
17
18
  property :path
18
19
  property :connect_timeout, validate: true
19
20
  property :write_timeout, validate: true
20
21
  property :read_timeout, validate: true
22
+ property :ca_certificates, validate: true, preprocess: true, postprocess: true
21
23
  property :client_certificate, validate: true, preprocess: true, postprocess: true
22
24
  property :created_at, read_only: true, postprocess: true
23
25
  property :updated_at, read_only: true, postprocess: true
@@ -42,7 +44,9 @@ module SkullIsland
42
44
  resource.connect_timeout = rdata['connect_timeout'] if rdata['connect_timeout']
43
45
  resource.write_timeout = rdata['write_timeout'] if rdata['write_timeout']
44
46
  resource.read_timeout = rdata['read_timeout'] if rdata['read_timeout']
47
+ resource.tls_verify = rdata['tls_verify'] if rdata['tls_verify']
45
48
  resource.delayed_set(:client_certificate, rdata) if rdata['client_certificate']
49
+ resource.delayed_set(:ca_certificates, rdata) if rdata['ca_certificates']
46
50
  resource.tags = rdata['tags'] if rdata['tags']
47
51
  resource.project = project if project
48
52
  resource.import_time = (time || Time.now.utc.to_i) if project
@@ -94,6 +98,8 @@ module SkullIsland
94
98
  Plugin.where(:service, self, api_client: api_client)
95
99
  end
96
100
 
101
+ # rubocop:disable Metrics/CyclomaticComplexity
102
+ # rubocop:disable Metrics/PerceivedComplexity
97
103
  # rubocop:disable Metrics/AbcSize
98
104
  def export(options = {})
99
105
  hash = {
@@ -109,7 +115,15 @@ module SkullIsland
109
115
  }
110
116
  hash['routes'] = routes.collect { |route| route.export(exclude: 'service') }
111
117
  hash['tags'] = tags unless tags.empty?
112
- hash['client_certificate'] = client_certificate if client_certificate
118
+ if client_certificate&.name
119
+ hash['client_certificate'] = "<%= lookup :certificate, '#{client_certificate.name}' %>"
120
+ elsif client_certificate
121
+ hash['client_certificate'] = { 'id' => client_certificate.id }
122
+ end
123
+ if ca_certificates && !ca_certificates.empty?
124
+ hash['ca_certificates'] = export_ca_certificates
125
+ end
126
+ hash['tls_verify'] = tls_verify if [true, false].include?(tls_verify)
113
127
  [*options[:exclude]].each do |exclude|
114
128
  hash.delete(exclude.to_s)
115
129
  end
@@ -118,6 +132,8 @@ module SkullIsland
118
132
  end
119
133
  hash.reject { |_, value| value.nil? }
120
134
  end
135
+ # rubocop:enable Metrics/CyclomaticComplexity
136
+ # rubocop:enable Metrics/PerceivedComplexity
121
137
  # rubocop:enable Metrics/AbcSize
122
138
 
123
139
  def modified_existing?
@@ -153,6 +169,33 @@ module SkullIsland
153
169
 
154
170
  private
155
171
 
172
+ def export_ca_certificates
173
+ ca_certificates.map do |cacert|
174
+ cacert.name ? "<%= lookup :ca_certificate, '#{cacert.name}', raw: true %>" : cacert.id
175
+ end
176
+ end
177
+
178
+ def postprocess_ca_certificates(value)
179
+ if value.respond_to?(:to_a)
180
+ value.to_a.map do |cacert|
181
+ CACertificate.new(
182
+ entity: { 'id' => cacert },
183
+ lazy: true,
184
+ tainted: false,
185
+ api_client: api_client
186
+ )
187
+ end
188
+ else
189
+ value
190
+ end
191
+ end
192
+
193
+ def preprocess_ca_certificates(input)
194
+ input.to_a.map do |cacert|
195
+ cacert.is_a?(String) ? cacert : cacert.id
196
+ end
197
+ end
198
+
156
199
  def postprocess_client_certificate(value)
157
200
  if value.is_a?(Hash)
158
201
  Certificate.new(
@@ -167,13 +210,31 @@ module SkullIsland
167
210
  end
168
211
 
169
212
  def preprocess_client_certificate(input)
170
- if input.is_a?(Hash)
213
+ case input
214
+ when Hash
171
215
  input
216
+ when String
217
+ { 'id' => input }
172
218
  else
173
219
  { 'id' => input.id }
174
220
  end
175
221
  end
176
222
 
223
+ # Validates {#ca_certificates} on set
224
+ def validate_ca_certificates(value)
225
+ # only Arrays (or Enumarables) are supported
226
+ return false unless value.is_a?(Array) || value.respond_to?(:to_a)
227
+
228
+ # Can only contain a array of Strings or CACertificates
229
+ value.to_a.reject { |v| v.is_a?(String) || v.is_a?(CACertificate) }.empty?
230
+ end
231
+
232
+ # Used to validate {#client_certificate} on set
233
+ def validate_client_certificate(value)
234
+ # only Strings, Hashes, or Certificates are allowed
235
+ value.is_a?(String) || value.is_a?(Hash) || value.is_a?(Certificate)
236
+ end
237
+
177
238
  # Used to validate {#protocol} on set
178
239
  def validate_protocol(value)
179
240
  # only HTTP and HTTPS are allowed
@@ -192,6 +253,12 @@ module SkullIsland
192
253
  value.is_a?(Integer) && value.positive? && (1...65_535).cover?(value)
193
254
  end
194
255
 
256
+ # Used to validate {#retries} on set
257
+ def validate_retries(value)
258
+ # only positive Integers of the right value are allowed
259
+ value.is_a?(Integer) && value.positive? && (1...65_535).cover?(value)
260
+ end
261
+
195
262
  # Used to validate {#connect_timeout} on set
196
263
  def validate_connect_timeout(value)
197
264
  # only positive Integers are allowed
@@ -51,7 +51,7 @@ module SkullIsland
51
51
  end
52
52
 
53
53
  def self.get(id, options = {})
54
- if options[:upstream]&.is_a?(Upstream)
54
+ if options[:upstream].is_a?(Upstream)
55
55
  options[:upstream].target(id)
56
56
  elsif options[:upstream]
57
57
  upstream_opts = options.merge(lazy: true)
@@ -108,9 +108,10 @@ module SkullIsland
108
108
  end
109
109
 
110
110
  def preprocess_upstream(input)
111
- if input.is_a?(Hash)
111
+ case input
112
+ when Hash
112
113
  input
113
- elsif input.is_a?(String)
114
+ when String
114
115
  { 'id' => input }
115
116
  else
116
117
  { 'id' => input.id }
@@ -34,7 +34,7 @@ module SkullIsland
34
34
  valid = name.is_a? String
35
35
  begin
36
36
  u = URI.parse(name)
37
- valid = false unless u.class == URI::HTTP || u.class == URI::HTTPS
37
+ valid = false unless u.is_a?(URI::HTTP) || u.is_a?(URI::HTTPS)
38
38
  rescue URI::InvalidURIError
39
39
  valid = false
40
40
  end
@@ -24,7 +24,7 @@ module SkullIsland
24
24
  def validate_tags(value)
25
25
  # allow only valid hostnames
26
26
  value.each do |tag|
27
- return false unless tag.is_a?(String) && tag.match?(/^[\w_\-\.~]+$/)
27
+ return false unless tag.is_a?(String) && tag.match?(/^[\w_\-.~]+$/)
28
28
  end
29
29
  true
30
30
  end
@@ -3,7 +3,7 @@
3
3
  module SkullIsland
4
4
  VERSION = [
5
5
  2, # Major
6
- 0, # Minor
7
- 4 # Patch
6
+ 3, # Minor
7
+ 0 # Patch
8
8
  ].join('.')
9
9
  end
data/skull_island.gemspec CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
11
11
  spec.email = ['jonathan.gnagy@gmail.com']
12
12
 
13
13
  spec.summary = 'Ruby SDK for Kong'
14
- spec.description = 'A Ruby SDK for Kong 0.14.x'
14
+ spec.description = 'A Ruby SDK for Kong'
15
15
  spec.homepage = 'https://github.com/jgnagy/skull_island'
16
16
  spec.license = 'MIT'
17
17
 
@@ -24,22 +24,22 @@ Gem::Specification.new do |spec|
24
24
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
25
25
  spec.require_paths = ['lib']
26
26
 
27
- spec.required_ruby_version = '~> 2.5'
27
+ spec.required_ruby_version = '~> 3.0'
28
28
 
29
29
  spec.add_runtime_dependency 'deepsort', '~> 0.4'
30
30
  spec.add_runtime_dependency 'erubi', '~> 1.8'
31
- spec.add_runtime_dependency 'json', '~> 2.1'
32
31
  spec.add_runtime_dependency 'linguistics', '~> 2.1'
33
32
  spec.add_runtime_dependency 'rest-client', '~> 2.1'
34
- spec.add_runtime_dependency 'thor', '~> 0.20'
33
+ spec.add_runtime_dependency 'thor', '~> 1.0'
35
34
  spec.add_runtime_dependency 'will_paginate', '~> 3.1'
35
+ spec.add_runtime_dependency 'yajl-ruby', '~> 1.4'
36
36
 
37
37
  spec.add_development_dependency 'bundler', '~> 2.0'
38
- spec.add_development_dependency 'coveralls', '~> 0.7'
38
+ spec.add_development_dependency 'coveralls_reborn', '~> 0.20'
39
39
  spec.add_development_dependency 'rake', '~> 13.0'
40
40
  spec.add_development_dependency 'rspec', '~> 3.0'
41
41
  spec.add_development_dependency 'rubocop', '~> 0.50'
42
- spec.add_development_dependency 'simplecov', '~> 0.17'
42
+ spec.add_development_dependency 'simplecov', '~> 0.21'
43
43
  spec.add_development_dependency 'travis', '~> 1.8'
44
44
  spec.add_development_dependency 'yard', '~> 0.9.20'
45
45
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: skull_island
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.4
4
+ version: 2.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Gnagy
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-05-20 00:00:00.000000000 Z
11
+ date: 2021-02-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: deepsort
@@ -39,7 +39,7 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.8'
41
41
  - !ruby/object:Gem::Dependency
42
- name: json
42
+ name: linguistics
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
@@ -53,7 +53,7 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '2.1'
55
55
  - !ruby/object:Gem::Dependency
56
- name: linguistics
56
+ name: rest-client
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
@@ -67,47 +67,47 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '2.1'
69
69
  - !ruby/object:Gem::Dependency
70
- name: rest-client
70
+ name: thor
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '2.1'
75
+ version: '1.0'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '2.1'
82
+ version: '1.0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: thor
84
+ name: will_paginate
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '0.20'
89
+ version: '3.1'
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '0.20'
96
+ version: '3.1'
97
97
  - !ruby/object:Gem::Dependency
98
- name: will_paginate
98
+ name: yajl-ruby
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '3.1'
103
+ version: '1.4'
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '3.1'
110
+ version: '1.4'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: bundler
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -123,19 +123,19 @@ dependencies:
123
123
  - !ruby/object:Gem::Version
124
124
  version: '2.0'
125
125
  - !ruby/object:Gem::Dependency
126
- name: coveralls
126
+ name: coveralls_reborn
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: '0.7'
131
+ version: '0.20'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: '0.7'
138
+ version: '0.20'
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: rake
141
141
  requirement: !ruby/object:Gem::Requirement
@@ -184,14 +184,14 @@ dependencies:
184
184
  requirements:
185
185
  - - "~>"
186
186
  - !ruby/object:Gem::Version
187
- version: '0.17'
187
+ version: '0.21'
188
188
  type: :development
189
189
  prerelease: false
190
190
  version_requirements: !ruby/object:Gem::Requirement
191
191
  requirements:
192
192
  - - "~>"
193
193
  - !ruby/object:Gem::Version
194
- version: '0.17'
194
+ version: '0.21'
195
195
  - !ruby/object:Gem::Dependency
196
196
  name: travis
197
197
  requirement: !ruby/object:Gem::Requirement
@@ -220,7 +220,7 @@ dependencies:
220
220
  - - "~>"
221
221
  - !ruby/object:Gem::Version
222
222
  version: 0.9.20
223
- description: A Ruby SDK for Kong 0.14.x
223
+ description: A Ruby SDK for Kong
224
224
  email:
225
225
  - jonathan.gnagy@gmail.com
226
226
  executables:
@@ -299,15 +299,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
299
299
  requirements:
300
300
  - - "~>"
301
301
  - !ruby/object:Gem::Version
302
- version: '2.5'
302
+ version: '3.0'
303
303
  required_rubygems_version: !ruby/object:Gem::Requirement
304
304
  requirements:
305
305
  - - ">="
306
306
  - !ruby/object:Gem::Version
307
307
  version: '0'
308
308
  requirements: []
309
- rubyforge_project:
310
- rubygems_version: 2.7.7
309
+ rubygems_version: 3.0.8
311
310
  signing_key:
312
311
  specification_version: 4
313
312
  summary: Ruby SDK for Kong