acme-client 2.0.0 → 2.0.18

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.
metadata CHANGED
@@ -1,140 +1,132 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acme-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.0.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Charles Barbier
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-05-03 00:00:00.000000000 Z
11
+ date: 2024-06-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bundler
14
+ name: rake
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.6'
20
- - - ">="
21
- - !ruby/object:Gem::Version
22
- version: 1.6.9
19
+ version: '13.0'
23
20
  type: :development
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
24
  - - "~>"
28
25
  - !ruby/object:Gem::Version
29
- version: '1.6'
30
- - - ">="
31
- - !ruby/object:Gem::Version
32
- version: 1.6.9
26
+ version: '13.0'
33
27
  - !ruby/object:Gem::Dependency
34
- name: rake
28
+ name: rspec
35
29
  requirement: !ruby/object:Gem::Requirement
36
30
  requirements:
37
31
  - - "~>"
38
32
  - !ruby/object:Gem::Version
39
- version: '10.0'
33
+ version: '3.9'
40
34
  type: :development
41
35
  prerelease: false
42
36
  version_requirements: !ruby/object:Gem::Requirement
43
37
  requirements:
44
38
  - - "~>"
45
39
  - !ruby/object:Gem::Version
46
- version: '10.0'
40
+ version: '3.9'
47
41
  - !ruby/object:Gem::Dependency
48
- name: rspec
42
+ name: vcr
49
43
  requirement: !ruby/object:Gem::Requirement
50
44
  requirements:
51
45
  - - "~>"
52
46
  - !ruby/object:Gem::Version
53
- version: '3.3'
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- version: 3.3.0
47
+ version: '2.9'
57
48
  type: :development
58
49
  prerelease: false
59
50
  version_requirements: !ruby/object:Gem::Requirement
60
51
  requirements:
61
52
  - - "~>"
62
53
  - !ruby/object:Gem::Version
63
- version: '3.3'
64
- - - ">="
65
- - !ruby/object:Gem::Version
66
- version: 3.3.0
54
+ version: '2.9'
67
55
  - !ruby/object:Gem::Dependency
68
- name: vcr
56
+ name: webmock
69
57
  requirement: !ruby/object:Gem::Requirement
70
58
  requirements:
71
59
  - - "~>"
72
60
  - !ruby/object:Gem::Version
73
- version: '2.9'
74
- - - ">="
75
- - !ruby/object:Gem::Version
76
- version: 2.9.3
61
+ version: '3.8'
77
62
  type: :development
78
63
  prerelease: false
79
64
  version_requirements: !ruby/object:Gem::Requirement
80
65
  requirements:
81
66
  - - "~>"
82
67
  - !ruby/object:Gem::Version
83
- version: '2.9'
84
- - - ">="
85
- - !ruby/object:Gem::Version
86
- version: 2.9.3
68
+ version: '3.8'
87
69
  - !ruby/object:Gem::Dependency
88
- name: webmock
70
+ name: webrick
89
71
  requirement: !ruby/object:Gem::Requirement
90
72
  requirements:
91
73
  - - "~>"
92
74
  - !ruby/object:Gem::Version
93
- version: '1.21'
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: 1.21.0
75
+ version: '1.7'
97
76
  type: :development
98
77
  prerelease: false
99
78
  version_requirements: !ruby/object:Gem::Requirement
100
79
  requirements:
101
80
  - - "~>"
102
81
  - !ruby/object:Gem::Version
103
- version: '1.21'
104
- - - ">="
105
- - !ruby/object:Gem::Version
106
- version: 1.21.0
82
+ version: '1.7'
107
83
  - !ruby/object:Gem::Dependency
108
84
  name: faraday
109
85
  requirement: !ruby/object:Gem::Requirement
110
86
  requirements:
111
- - - "~>"
112
- - !ruby/object:Gem::Version
113
- version: '0.9'
114
87
  - - ">="
115
88
  - !ruby/object:Gem::Version
116
- version: 0.9.1
89
+ version: '1.0'
90
+ - - "<"
91
+ - !ruby/object:Gem::Version
92
+ version: 3.0.0
117
93
  type: :runtime
118
94
  prerelease: false
119
95
  version_requirements: !ruby/object:Gem::Requirement
120
96
  requirements:
121
- - - "~>"
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: '1.0'
100
+ - - "<"
122
101
  - !ruby/object:Gem::Version
123
- version: '0.9'
102
+ version: 3.0.0
103
+ - !ruby/object:Gem::Dependency
104
+ name: faraday-retry
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
124
107
  - - ">="
125
108
  - !ruby/object:Gem::Version
126
- version: 0.9.1
127
- description:
109
+ version: '1.0'
110
+ - - "<"
111
+ - !ruby/object:Gem::Version
112
+ version: 3.0.0
113
+ type: :runtime
114
+ prerelease: false
115
+ version_requirements: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ version: '1.0'
120
+ - - "<"
121
+ - !ruby/object:Gem::Version
122
+ version: 3.0.0
123
+ description:
128
124
  email:
129
125
  - unixcharles@gmail.com
130
126
  executables: []
131
127
  extensions: []
132
128
  extra_rdoc_files: []
133
129
  files:
134
- - ".gitignore"
135
- - ".rspec"
136
- - ".rubocop.yml"
137
- - ".travis.yml"
138
130
  - CHANGELOG.md
139
131
  - Gemfile
140
132
  - LICENSE.txt
@@ -142,17 +134,20 @@ files:
142
134
  - Rakefile
143
135
  - acme-client.gemspec
144
136
  - bin/console
137
+ - bin/generate_keystash
145
138
  - bin/release
146
139
  - bin/setup
147
140
  - lib/acme-client.rb
148
141
  - lib/acme/client.rb
149
142
  - lib/acme/client/certificate_request.rb
150
143
  - lib/acme/client/certificate_request/ec_key_patch.rb
144
+ - lib/acme/client/chain_identifier.rb
151
145
  - lib/acme/client/error.rb
152
- - lib/acme/client/faraday_middleware.rb
146
+ - lib/acme/client/http_client.rb
153
147
  - lib/acme/client/jwk.rb
154
148
  - lib/acme/client/jwk/base.rb
155
149
  - lib/acme/client/jwk/ecdsa.rb
150
+ - lib/acme/client/jwk/hmac.rb
156
151
  - lib/acme/client/jwk/rsa.rb
157
152
  - lib/acme/client/resources.rb
158
153
  - lib/acme/client/resources/account.rb
@@ -161,6 +156,7 @@ files:
161
156
  - lib/acme/client/resources/challenges/base.rb
162
157
  - lib/acme/client/resources/challenges/dns01.rb
163
158
  - lib/acme/client/resources/challenges/http01.rb
159
+ - lib/acme/client/resources/challenges/unsupported_challenge.rb
164
160
  - lib/acme/client/resources/directory.rb
165
161
  - lib/acme/client/resources/order.rb
166
162
  - lib/acme/client/self_sign_certificate.rb
@@ -170,7 +166,7 @@ homepage: http://github.com/unixcharles/acme-client
170
166
  licenses:
171
167
  - MIT
172
168
  metadata: {}
173
- post_install_message:
169
+ post_install_message:
174
170
  rdoc_options: []
175
171
  require_paths:
176
172
  - lib
@@ -178,16 +174,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
178
174
  requirements:
179
175
  - - ">="
180
176
  - !ruby/object:Gem::Version
181
- version: 2.1.0
177
+ version: 2.3.0
182
178
  required_rubygems_version: !ruby/object:Gem::Requirement
183
179
  requirements:
184
180
  - - ">="
185
181
  - !ruby/object:Gem::Version
186
182
  version: '0'
187
183
  requirements: []
188
- rubyforge_project:
189
- rubygems_version: 2.7.6
190
- signing_key:
184
+ rubygems_version: 3.4.20
185
+ signing_key:
191
186
  specification_version: 4
192
187
  summary: Client for the ACME protocol.
193
188
  test_files: []
data/.gitignore DELETED
@@ -1,10 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /Gemfile.lock
4
- /_yardoc/
5
- /coverage/
6
- /doc/
7
- /pkg/
8
- /spec/reports/
9
- /tmp/
10
- /vendor/bundle
data/.rspec DELETED
@@ -1,3 +0,0 @@
1
- --format documentation
2
- --color
3
- --order rand
data/.rubocop.yml DELETED
@@ -1,139 +0,0 @@
1
- AllCops:
2
- TargetRubyVersion: 2.1
3
- Exclude:
4
- - 'bin/*'
5
- - 'vendor/**/*'
6
-
7
- Rails:
8
- Enabled: false
9
-
10
- Naming/FileName:
11
- Exclude:
12
- - 'lib/acme-client.rb'
13
-
14
- Lint/AssignmentInCondition:
15
- Enabled: false
16
-
17
- Style/ClassAndModuleChildren:
18
- Enabled: false
19
-
20
- Style/Documentation:
21
- Enabled: false
22
-
23
- Layout/MultilineOperationIndentation:
24
- Enabled: false
25
-
26
- Style/SignalException:
27
- EnforcedStyle: only_raise
28
-
29
- Layout/AlignParameters:
30
- EnforcedStyle: with_fixed_indentation
31
-
32
- Layout/ElseAlignment:
33
- Enabled: false
34
-
35
- Style/MultipleComparison:
36
- Enabled: false
37
-
38
- Layout/IndentationWidth:
39
- Enabled: false
40
-
41
- Style/SymbolArray:
42
- Enabled: false
43
-
44
- Layout/FirstParameterIndentation:
45
- EnforcedStyle: consistent
46
-
47
- Style/TrailingCommaInArguments:
48
- Enabled: false
49
-
50
- Style/PercentLiteralDelimiters:
51
- Enabled: false
52
-
53
- Metrics/BlockLength:
54
- Enabled: false
55
-
56
- Layout/SpaceInsideBlockBraces:
57
- Enabled: false
58
-
59
- Style/StringLiterals:
60
- Enabled: single_quotes
61
-
62
- Metrics/LineLength:
63
- Max: 140
64
-
65
- Metrics/ParameterLists:
66
- Max: 5
67
- CountKeywordArgs: false
68
-
69
- Layout/EndAlignment:
70
- Enabled: false
71
-
72
- Style/ParallelAssignment:
73
- Enabled: false
74
-
75
- Style/ModuleFunction:
76
- Enabled: false
77
-
78
- Style/TrivialAccessors:
79
- AllowPredicates: true
80
-
81
- Lint/UnusedMethodArgument:
82
- AllowUnusedKeywordArguments: true
83
-
84
- Metrics/MethodLength:
85
- Max: 15
86
-
87
- Style/DoubleNegation:
88
- Enabled: false
89
-
90
- Style/IfUnlessModifier:
91
- Enabled: false
92
-
93
- Style/MultilineBlockChain:
94
- Enabled: false
95
-
96
- Style/BlockDelimiters:
97
- EnforcedStyle: semantic
98
-
99
- Style/Lambda:
100
- Enabled: false
101
-
102
- Style/GuardClause:
103
- Enabled: false
104
-
105
- Style/Alias:
106
- Enabled: false
107
-
108
- Lint/AmbiguousOperator:
109
- Enabled: false
110
-
111
- Metrics/MethodLength:
112
- Enabled: false
113
-
114
- Metrics/PerceivedComplexity:
115
- Enabled: false
116
-
117
- Metrics/CyclomaticComplexity:
118
- Enabled: false
119
-
120
- Metrics/AbcSize:
121
- Enabled: false
122
-
123
- Metrics/ClassLength:
124
- Enabled: false
125
-
126
- Style/MutableConstant:
127
- Enabled: false
128
-
129
- Style/GlobalVars:
130
- Enabled: false
131
-
132
- Style/ExpandPathArguments:
133
- Enabled: false
134
-
135
- Security/JSONLoad:
136
- Enabled: false
137
-
138
- Naming/AccessorMethodName:
139
- Enabled: false
data/.travis.yml DELETED
@@ -1,7 +0,0 @@
1
- language: ruby
2
- cache: bundler
3
- rvm:
4
- - 2.1
5
- - 2.2
6
- - 2.3.3
7
- - 2.4.0
@@ -1,116 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class Acme::Client::FaradayMiddleware < Faraday::Middleware
4
- attr_reader :env, :response, :client
5
-
6
- CONTENT_TYPE = 'application/jose+json'
7
-
8
- def initialize(app, client:, mode:)
9
- super(app)
10
- @client = client
11
- @mode = mode
12
- end
13
-
14
- def call(env)
15
- @env = env
16
- @env[:request_headers]['User-Agent'] = Acme::Client::USER_AGENT
17
- @env[:request_headers]['Content-Type'] = CONTENT_TYPE
18
-
19
- @env.body = client.jwk.jws(header: jws_header, payload: env.body)
20
- @app.call(env).on_complete { |response_env| on_complete(response_env) }
21
- rescue Faraday::TimeoutError, Faraday::ConnectionFailed
22
- raise Acme::Client::Error::Timeout
23
- end
24
-
25
- def on_complete(env)
26
- @env = env
27
-
28
- raise_on_not_found!
29
- store_nonce
30
- env.body = decode_body
31
- env.response_headers['Link'] = decode_link_headers
32
-
33
- return if env.success?
34
-
35
- raise_on_error!
36
- end
37
-
38
- private
39
-
40
- def jws_header
41
- headers = { nonce: pop_nonce, url: env.url.to_s }
42
- headers[:kid] = client.kid if @mode == :kid
43
- headers
44
- end
45
-
46
- def raise_on_not_found!
47
- raise Acme::Client::Error::NotFound, env.url.to_s if env.status == 404
48
- end
49
-
50
- def raise_on_error!
51
- raise error_class, error_message
52
- end
53
-
54
- def error_message
55
- if env.body.is_a? Hash
56
- env.body['detail']
57
- else
58
- "Error message: #{env.body}"
59
- end
60
- end
61
-
62
- def error_class
63
- Acme::Client::Error::ACME_ERRORS.fetch(error_name, Acme::Client::Error)
64
- end
65
-
66
- def error_name
67
- return unless env.body.is_a?(Hash)
68
- return unless env.body.key?('type')
69
- env.body['type']
70
- end
71
-
72
- def decode_body
73
- content_type = env.response_headers['Content-Type'].to_s
74
-
75
- if content_type.start_with?('application/json', 'application/problem+json')
76
- JSON.load(env.body)
77
- else
78
- env.body
79
- end
80
- end
81
-
82
- LINK_MATCH = /<(.*?)>;rel="([\w-]+)"/
83
-
84
- def decode_link_headers
85
- return unless env.response_headers.key?('Link')
86
- link_header = env.response_headers['Link']
87
-
88
- links = link_header.split(', ').map { |entry|
89
- _, link, name = *entry.match(LINK_MATCH)
90
- [name, link]
91
- }
92
-
93
- Hash[*links.flatten]
94
- end
95
-
96
- def store_nonce
97
- nonce = env.response_headers['replay-nonce']
98
- nonces << nonce if nonce
99
- end
100
-
101
- def pop_nonce
102
- if nonces.empty?
103
- get_nonce
104
- end
105
-
106
- nonces.pop
107
- end
108
-
109
- def get_nonce
110
- client.get_nonce
111
- end
112
-
113
- def nonces
114
- client.nonces
115
- end
116
- end