acme-client 2.0.15 → 2.0.16

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a634fb4c9a908ebb94e2ace402f7a66f510df3e0b6307b78c2e06eeabdb0e497
4
- data.tar.gz: eb4bbbcc6f4ad0dd055fcb2a7897e408b862251c7e63c3b9c711f175fd21e727
3
+ metadata.gz: f26a6196b6e5f7bfe464c6d5e3068f29a295c914aaa2af7a086b949cfb00e132
4
+ data.tar.gz: 20ae05784979ec85c880736ded0915de4ad07a743262eb203a089e7fd7fbf79c
5
5
  SHA512:
6
- metadata.gz: abd5644a5d5b6edfaf9e04a9d5fb382efcdbfcde55ce2327ecb21400ec827512fc4dd38fdfcbe67e239d4ce2b848a5677c6406220b8740ad37291e608290c9e2
7
- data.tar.gz: 0f7f4d87df7011f99b2b36064ff13ced4c7d9b2e86ad8dccbb1c52374da9a57044433c7c7a7571a820a678e735d4eb3e1bb9e4d96f3c6c69f183151aeb012d7d
6
+ metadata.gz: 1c89f451807ab8f10529c3feabc4d96d961bddfc915eeaa2cc76d9f4ed31b9e6376e80327f82ce0daafa7df2d74e5585403b354cb53d1942b1e5bf0db9c4c0d0
7
+ data.tar.gz: 21970923591d7133201257ad95e456b429eb3d906bd12d1fcd17a0305ba2edce0e16d0bdd8edfbb03764d8d35b2a845f08a0f5e6e116385735d6e081b7d094e2
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## `2.0.16`
2
+
3
+ * Refactor Directory
4
+ * Fix an issue where the client would crash when ACME provider return nonce for directory endpoint
5
+
1
6
  ## `2.0.15`
2
7
 
3
8
  * Also pass connection_options to Faraday for Client#get_nonce
@@ -17,12 +17,13 @@ class Acme::Client::Resources::Directory
17
17
  external_account_required: 'externalAccountRequired'
18
18
  }
19
19
 
20
- def initialize(url, connection_options)
21
- @url, @connection_options = url, connection_options
20
+ def initialize(client, **arguments)
21
+ @client = client
22
+ assign_attributes(**arguments)
22
23
  end
23
24
 
24
25
  def endpoint_for(key)
25
- directory.fetch(key) do |missing_key|
26
+ @directory.fetch(key) do |missing_key|
26
27
  raise Acme::Client::Error::UnsupportedOperation,
27
28
  "Directory at #{@url} does not include `#{missing_key}`"
28
29
  end
@@ -45,31 +46,16 @@ class Acme::Client::Resources::Directory
45
46
  end
46
47
 
47
48
  def meta
48
- directory[:meta]
49
+ @directory[:meta]
49
50
  end
50
51
 
51
52
  private
52
53
 
53
- def directory
54
- @directory ||= load_directory
55
- end
56
-
57
- def load_directory
58
- body = fetch_directory
59
- result = {}
60
- result[:meta] = body.delete('meta')
54
+ def assign_attributes(directory:)
55
+ @directory = {}
56
+ @directory[:meta] = directory.delete('meta')
61
57
  DIRECTORY_RESOURCES.each do |key, entry|
62
- result[key] = URI(body[entry]) if body[entry]
58
+ @directory[key] = URI(directory[entry]) if directory[entry]
63
59
  end
64
- result
65
- rescue JSON::ParserError => exception
66
- raise Acme::Client::Error::InvalidDirectory,
67
- "Invalid directory url\n#{@directory} did not return a valid directory\n#{exception.inspect}"
68
- end
69
-
70
- def fetch_directory
71
- http_client = Acme::Client::HTTPClient.new_acme_connection(url: @directory, options: @connection_options, client: nil, mode: nil)
72
- response = http_client.get(@url)
73
- response.body
74
60
  end
75
61
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Acme
4
4
  class Client
5
- VERSION = '2.0.15'.freeze
5
+ VERSION = '2.0.16'.freeze
6
6
  end
7
7
  end
data/lib/acme/client.rb CHANGED
@@ -44,7 +44,7 @@ class Acme::Client
44
44
 
45
45
  @kid, @connection_options = kid, connection_options
46
46
  @bad_nonce_retry = bad_nonce_retry
47
- @directory = Acme::Client::Resources::Directory.new(URI(directory), @connection_options)
47
+ @directory_url = URI(directory)
48
48
  @nonces ||= []
49
49
  end
50
50
 
@@ -229,28 +229,44 @@ class Acme::Client
229
229
  true
230
230
  end
231
231
 
232
+ def directory
233
+ @directory ||= load_directory
234
+ end
235
+
232
236
  def meta
233
- @directory.meta
237
+ directory.meta
234
238
  end
235
239
 
236
240
  def terms_of_service
237
- @directory.terms_of_service
241
+ directory.terms_of_service
238
242
  end
239
243
 
240
244
  def website
241
- @directory.website
245
+ directory.website
242
246
  end
243
247
 
244
248
  def caa_identities
245
- @directory.caa_identities
249
+ directory.caa_identities
246
250
  end
247
251
 
248
252
  def external_account_required
249
- @directory.external_account_required
253
+ directory.external_account_required
250
254
  end
251
255
 
252
256
  private
253
257
 
258
+ def load_directory
259
+ Acme::Client::Resources::Directory.new(self, directory: fetch_directory)
260
+ end
261
+
262
+ def fetch_directory
263
+ response = get(@directory_url)
264
+ response.body
265
+ rescue JSON::ParserError => exception
266
+ raise Acme::Client::Error::InvalidDirectory,
267
+ "Invalid directory url\n#{@directory_url} did not return a valid directory\n#{exception.inspect}"
268
+ end
269
+
254
270
  def prepare_order_identifiers(identifiers)
255
271
  if identifiers.is_a?(Hash)
256
272
  [identifiers]
@@ -351,6 +367,6 @@ class Acme::Client
351
367
  end
352
368
 
353
369
  def endpoint_for(key)
354
- @directory.endpoint_for(key)
370
+ directory.endpoint_for(key)
355
371
  end
356
372
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acme-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.15
4
+ version: 2.0.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Charles Barbier
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-10-06 00:00:00.000000000 Z
11
+ date: 2024-01-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -194,7 +194,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
194
194
  - !ruby/object:Gem::Version
195
195
  version: '0'
196
196
  requirements: []
197
- rubygems_version: 3.4.13
197
+ rubygems_version: 3.4.20
198
198
  signing_key:
199
199
  specification_version: 4
200
200
  summary: Client for the ACME protocol.