acmesmith 0.8.0 → 0.9.0

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
  SHA1:
3
- metadata.gz: 51baf45477f91b7ca8981c3e8da445348f44528f
4
- data.tar.gz: 7ec32294fede6b7dd89e6f651e25dcb967d6a878
3
+ metadata.gz: 0a2e1bf037c36dc0857c9cdde9192e9dffe196a6
4
+ data.tar.gz: d04ffac3735b0af4b0e9394749ae015d9dc16eb3
5
5
  SHA512:
6
- metadata.gz: 2deb54d234db5b03fa4b989e84b31a199973896daae57d8da3353e829f0dec3c094332837bebaba2dc9f1597a36d6516aa7da009352d66170c4b045d50e26d86
7
- data.tar.gz: 4764a56467552cf763878b1857ef5989a2162cbb3013a1e28aa7ed3f343e849bb02cb6470414dbfc6af0073b7dfb86172d98847237b6bcd9b4a9fb58cbc9e967
6
+ metadata.gz: 44f73438e93e201a937a769ae8481c8696144d190c238584af7cfec216616f9c76d8bfe5cb4f4fe4c3f4d107435e2e288fdfdde0394c992835c2ccb554abc088
7
+ data.tar.gz: 58efd6b4f0dc19f0602cf69f41ccf5a4659a3e58b58e8fdf4da5df09701e1da749da1d8ed69c5b407b5beb415ddcb9daea18d3122ca3dadbc883e9acf4321507
data/README.md CHANGED
@@ -139,9 +139,9 @@ challenge_responders:
139
139
  # "example.org.": "/hostedzone/DEADBEEF"
140
140
  ```
141
141
 
142
- ### Post Issueing Hooks
142
+ ### Post Issuing Hooks
143
143
 
144
- Post issueing hooks are configurable actions that are executed
144
+ Post issuing hooks are configurable actions that are executed
145
145
  when a new certificate has been succesfully issued. The hooks are
146
146
  sequentially executed in the same order as they are configured, and they
147
147
  are configurable per certificate's common-name.
@@ -151,7 +151,7 @@ are configurable per certificate's common-name.
151
151
  Execute specified command on a shell. Environment variable `${COMMON_NAME}` is available.
152
152
 
153
153
  ```
154
- post_issueing_hooks:
154
+ post_issuing_hooks:
155
155
  "test.example.com":
156
156
  - shell:
157
157
  command: mail -s "New cert for ${COMMON_NAME} has been issued" user@example.com < /dev/null
@@ -167,7 +167,7 @@ post_issueing_hooks:
167
167
  Import certificate into AWS ACM.
168
168
 
169
169
  ```
170
- post_issueing_hooks:
170
+ post_issuing_hooks:
171
171
  "test.example.com":
172
172
  - acm:
173
173
  region: us-east-1 # required
@@ -103,8 +103,13 @@ module Acmesmith
103
103
  cert
104
104
  end
105
105
 
106
+ def post_issue_hooks(common_name)
107
+ cert = storage.get_certificate(common_name)
108
+ execute_post_issue_hooks(cert)
109
+ end
110
+
106
111
  def execute_post_issue_hooks(certificate)
107
- hooks = config.post_issueing_hooks(certificate.common_name)
112
+ hooks = config.post_issuing_hooks(certificate.common_name)
108
113
  hooks.each do |hook|
109
114
  hook.run(certificate: certificate)
110
115
  end
@@ -26,7 +26,7 @@ module Acmesmith
26
26
  puts cert.certificate.to_pem
27
27
  end
28
28
 
29
- desc "post-issue-hooks COMMON_NAME", "Run all post-issueing hooks for common name. (for testing purpose)"
29
+ desc "post-issue-hooks COMMON_NAME", "Run all post-issuing hooks for common name. (for testing purpose)"
30
30
  def post_issue_hooks(common_name)
31
31
  client.post_issue_hooks(common_name)
32
32
  end
@@ -1,7 +1,7 @@
1
1
  require 'yaml'
2
2
  require 'acmesmith/storages'
3
3
  require 'acmesmith/challenge_responders'
4
- require 'acmesmith/post_issueing_hooks'
4
+ require 'acmesmith/post_issuing_hooks'
5
5
 
6
6
  module Acmesmith
7
7
  class Config
@@ -22,6 +22,11 @@ module Acmesmith
22
22
  unless @config['endpoint']
23
23
  raise ArgumentError, "config['endpoint'] must be provided, e.g. https://acme-v01.api.letsencrypt.org/ or https://acme-staging.api.letsencrypt.org/"
24
24
  end
25
+
26
+ if @config['post_issueing_hooks']
27
+ warn '!! Deprecation warning: configuration "post_issueing_hooks" is now "post_issuing_hooks" (what a typo!). It will not work in the future release.'
28
+ @config['post_issuing_hooks'] = @config.delete('post_issueing_hooks')
29
+ end
25
30
  end
26
31
 
27
32
  def [](key)
@@ -51,12 +56,12 @@ module Acmesmith
51
56
  end
52
57
  end
53
58
 
54
- def post_issueing_hooks(common_name)
55
- if @config.key?('post_issueing_hooks') && @config['post_issueing_hooks'].key?(common_name)
56
- specs = @config['post_issueing_hooks'][common_name]
59
+ def post_issuing_hooks(common_name)
60
+ if @config.key?('post_issuing_hooks') && @config['post_issuing_hooks'].key?(common_name)
61
+ specs = @config['post_issuing_hooks'][common_name]
57
62
  specs.flat_map do |specs_sub|
58
63
  specs_sub.map do |k, v|
59
- PostIssueingHooks.find(k).new(**v.map{ |k_,v_| [k_.to_sym, v_]}.to_h)
64
+ PostIssuingHooks.find(k).new(**v.map{ |k_,v_| [k_.to_sym, v_]}.to_h)
60
65
  end
61
66
  end
62
67
  else
@@ -1,9 +1,5 @@
1
- require 'acmesmith/utils/finder'
1
+ require 'acmesmith/post_issuing_hooks'
2
+
3
+ warn "!! DEPRECATION WARNING: PostIssueingHooks is deprecated, use PostIssuingHooks (#{caller[0]})"
4
+
2
5
 
3
- module Acmesmith
4
- module PostIssueingHooks
5
- def self.find(name)
6
- Utils::Finder.find(self, 'acmesmith/post_issueing_hooks', name)
7
- end
8
- end
9
- end
@@ -1,21 +1,9 @@
1
- module Acmesmith
2
- module PostIssueingHooks
3
- class Base
4
- attr_reader :certificate
5
-
6
- def common_name
7
- certificate.common_name
8
- end
1
+ require 'acmesmith/post_issuing_hooks/base'
9
2
 
10
- def run(certificate:)
11
- @certificate = certificate
12
- execute
13
- end
3
+ warn "!! DEPRECATION WARNING: PostIssueingHooks::Base is deprecated, use PostIssuingHooks::Base (#{caller[0]})"
14
4
 
15
- def execute
16
- raise NotImplementedError
17
- end
18
- end
5
+ module Acmesmith
6
+ module PostIssueingHooks
7
+ Base = PostIssuingHooks::Base
19
8
  end
20
9
  end
21
-
@@ -0,0 +1,26 @@
1
+ require 'acmesmith/utils/finder'
2
+
3
+ module Acmesmith
4
+ module PostIssueingHooks
5
+ def self.find(name)
6
+ warn "!! DEPRECATION WARNING: PostIssueingHooks.find is deprecated, use PostIssuingHooks.find (#{caller[0]})"
7
+ return Utils::Finder.find(self, 'acmesmith/post_issueing_hooks', name)
8
+ end
9
+ end
10
+
11
+ module PostIssuingHooks
12
+ def self.find(name)
13
+ begin
14
+ return Utils::Finder.find(self, 'acmesmith/post_issuing_hooks', name)
15
+ rescue Utils::Finder::NotFound => e
16
+ begin
17
+ klass = Utils::Finder.find(PostIssueingHooks, 'acmesmith/post_issueing_hooks', name)
18
+ warn "!! DEPRECATION WARNING (#{klass}): Placing in acmesmith/post_issueing_hooks/... is deprecated. Move to acmesmith/post_issuing_hooks/..."
19
+ return klass
20
+ rescue Utils::Finder::NotFound
21
+ raise e
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -1,8 +1,8 @@
1
1
  require 'aws-sdk'
2
- require 'acmesmith/post_issueing_hooks/base'
2
+ require 'acmesmith/post_issuing_hooks/base'
3
3
 
4
4
  module Acmesmith
5
- module PostIssueingHooks
5
+ module PostIssuingHooks
6
6
  class Acm < Base
7
7
  def initialize(certificate_arn: nil, region:)
8
8
  @certificate_arn = certificate_arn
@@ -0,0 +1,21 @@
1
+ module Acmesmith
2
+ module PostIssuingHooks
3
+ class Base
4
+ attr_reader :certificate
5
+
6
+ def common_name
7
+ certificate.common_name
8
+ end
9
+
10
+ def run(certificate:)
11
+ @certificate = certificate
12
+ execute
13
+ end
14
+
15
+ def execute
16
+ raise NotImplementedError
17
+ end
18
+ end
19
+ end
20
+ end
21
+
@@ -1,8 +1,8 @@
1
1
  require 'open3'
2
- require 'acmesmith/post_issueing_hooks/base'
2
+ require 'acmesmith/post_issuing_hooks/base'
3
3
 
4
4
  module Acmesmith
5
- module PostIssueingHooks
5
+ module PostIssuingHooks
6
6
  class Shell < Base
7
7
  def initialize(command:, ignore_failure: false)
8
8
  @command = command
@@ -1,7 +1,9 @@
1
1
  module Acmesmith
2
2
  module Utils
3
3
  module Finder
4
- def self.find(const, prefix, name)
4
+ class NotFound < StandardError; end
5
+
6
+ def self.find(const, prefix, name, error: true)
5
7
  retried = false
6
8
  constant_name = name.to_s.gsub(/\A.|_./) { |s| s[-1].upcase }
7
9
 
@@ -18,7 +20,11 @@ module Acmesmith
18
20
  retry
19
21
  end
20
22
 
21
- nil
23
+ if error
24
+ raise NotFound, "Couldn't find #{name.inspect} for #{const}"
25
+ else
26
+ nil
27
+ end
22
28
  end
23
29
  end
24
30
  end
@@ -1,3 +1,3 @@
1
1
  module Acmesmith
2
- VERSION = "0.8.0"
2
+ VERSION = "0.9.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acmesmith
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - sorah (Shota Fukumori)
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-07-29 00:00:00.000000000 Z
11
+ date: 2017-08-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: acme-client
@@ -128,9 +128,11 @@ files:
128
128
  - lib/acmesmith/command.rb
129
129
  - lib/acmesmith/config.rb
130
130
  - lib/acmesmith/post_issueing_hooks.rb
131
- - lib/acmesmith/post_issueing_hooks/acm.rb
132
131
  - lib/acmesmith/post_issueing_hooks/base.rb
133
- - lib/acmesmith/post_issueing_hooks/shell.rb
132
+ - lib/acmesmith/post_issuing_hooks.rb
133
+ - lib/acmesmith/post_issuing_hooks/acm.rb
134
+ - lib/acmesmith/post_issuing_hooks/base.rb
135
+ - lib/acmesmith/post_issuing_hooks/shell.rb
134
136
  - lib/acmesmith/storages.rb
135
137
  - lib/acmesmith/storages/base.rb
136
138
  - lib/acmesmith/storages/filesystem.rb
@@ -159,7 +161,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
159
161
  version: '0'
160
162
  requirements: []
161
163
  rubyforge_project:
162
- rubygems_version: 2.6.11
164
+ rubygems_version: 2.6.8
163
165
  signing_key:
164
166
  specification_version: 4
165
167
  summary: ACME client (Let's encrypt client) to manage certificate in multi server