acmesmith 0.7.0.beta1 → 0.8.0
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.
- checksums.yaml +4 -4
- data/README.md +18 -1
- data/lib/acmesmith/client.rb +6 -8
- data/lib/acmesmith/config.rb +7 -8
- data/lib/acmesmith/post_issueing_hooks/acm.rb +65 -0
- data/lib/acmesmith/post_issueing_hooks/base.rb +10 -3
- data/lib/acmesmith/post_issueing_hooks/shell.rb +6 -11
- data/lib/acmesmith/version.rb +1 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 51baf45477f91b7ca8981c3e8da445348f44528f
|
4
|
+
data.tar.gz: 7ec32294fede6b7dd89e6f651e25dcb967d6a878
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2deb54d234db5b03fa4b989e84b31a199973896daae57d8da3353e829f0dec3c094332837bebaba2dc9f1597a36d6516aa7da009352d66170c4b045d50e26d86
|
7
|
+
data.tar.gz: 4764a56467552cf763878b1857ef5989a2162cbb3013a1e28aa7ed3f343e849bb02cb6470414dbfc6af0073b7dfb86172d98847237b6bcd9b4a9fb58cbc9e967
|
data/README.md
CHANGED
@@ -146,7 +146,9 @@ 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.
|
148
148
|
|
149
|
-
|
149
|
+
#### `shell`
|
150
|
+
|
151
|
+
Execute specified command on a shell. Environment variable `${COMMON_NAME}` is available.
|
150
152
|
|
151
153
|
```
|
152
154
|
post_issueing_hooks:
|
@@ -160,6 +162,21 @@ post_issueing_hooks:
|
|
160
162
|
command: /usr/bin/dosomethingelse ${COMMON_NAME}
|
161
163
|
```
|
162
164
|
|
165
|
+
### `acm`
|
166
|
+
|
167
|
+
Import certificate into AWS ACM.
|
168
|
+
|
169
|
+
```
|
170
|
+
post_issueing_hooks:
|
171
|
+
"test.example.com":
|
172
|
+
- acm:
|
173
|
+
region: us-east-1 # required
|
174
|
+
certificate_arn: arn:aws:acm:... # (optional)
|
175
|
+
```
|
176
|
+
|
177
|
+
When `certificate_arn` is not present, `acm` hook attempts to find the certificate ARN from existing certificate list. Certificate with same common name ("domain name" on ACM), and `Acmesmith` tag
|
178
|
+
will be used. Otherwise, `acm` hook imports as a new certificate with `Acmesmith` tag.
|
179
|
+
|
163
180
|
## 3rd party Plugins
|
164
181
|
|
165
182
|
### Challenge responders
|
data/lib/acmesmith/client.rb
CHANGED
@@ -98,17 +98,15 @@ module Acmesmith
|
|
98
98
|
cert = Certificate.from_acme_client_certificate(acme_cert)
|
99
99
|
storage.put_certificate(cert, certificate_key_passphrase)
|
100
100
|
|
101
|
-
execute_post_issue_hooks(
|
102
|
-
|
101
|
+
execute_post_issue_hooks(cert)
|
102
|
+
|
103
103
|
cert
|
104
104
|
end
|
105
105
|
|
106
|
-
def execute_post_issue_hooks(
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
hook.execute
|
111
|
-
end
|
106
|
+
def execute_post_issue_hooks(certificate)
|
107
|
+
hooks = config.post_issueing_hooks(certificate.common_name)
|
108
|
+
hooks.each do |hook|
|
109
|
+
hook.run(certificate: certificate)
|
112
110
|
end
|
113
111
|
end
|
114
112
|
|
data/lib/acmesmith/config.rb
CHANGED
@@ -52,16 +52,15 @@ module Acmesmith
|
|
52
52
|
end
|
53
53
|
|
54
54
|
def post_issueing_hooks(common_name)
|
55
|
-
@post_issueing_hooks
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
specs_sub.map do |k, v|
|
61
|
-
PostIssueingHooks.find(k).new(**v.map{ |k_,v_| [k_.to_sym, v_]}.to_h)
|
62
|
-
end
|
55
|
+
if @config.key?('post_issueing_hooks') && @config['post_issueing_hooks'].key?(common_name)
|
56
|
+
specs = @config['post_issueing_hooks'][common_name]
|
57
|
+
specs.flat_map do |specs_sub|
|
58
|
+
specs_sub.map do |k, v|
|
59
|
+
PostIssueingHooks.find(k).new(**v.map{ |k_,v_| [k_.to_sym, v_]}.to_h)
|
63
60
|
end
|
64
61
|
end
|
62
|
+
else
|
63
|
+
[]
|
65
64
|
end
|
66
65
|
end
|
67
66
|
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'aws-sdk'
|
2
|
+
require 'acmesmith/post_issueing_hooks/base'
|
3
|
+
|
4
|
+
module Acmesmith
|
5
|
+
module PostIssueingHooks
|
6
|
+
class Acm < Base
|
7
|
+
def initialize(certificate_arn: nil, region:)
|
8
|
+
@certificate_arn = certificate_arn
|
9
|
+
@certificate_arn_set = true if @certificate_arn
|
10
|
+
@region = region
|
11
|
+
end
|
12
|
+
|
13
|
+
attr_reader :region
|
14
|
+
|
15
|
+
def certificate_arn
|
16
|
+
return @certificate_arn if @certificate_arn_set
|
17
|
+
@certificate_arn ||= find_certificate_arn
|
18
|
+
@certificate_arn_set = true
|
19
|
+
@certificate_arn
|
20
|
+
end
|
21
|
+
|
22
|
+
def find_certificate_arn
|
23
|
+
acm.list_certificates().each do |page|
|
24
|
+
page.certificate_summary_list.each do |summary|
|
25
|
+
if summary.domain_name == common_name
|
26
|
+
tags = acm.list_tags_for_certificate(certificate_arn: summary.certificate_arn).tags
|
27
|
+
if tags.find{ |_| _.key == 'Acmesmith' }
|
28
|
+
return summary.certificate_arn
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def acm
|
36
|
+
@acm ||= Aws::ACM::Client.new(region: region)
|
37
|
+
end
|
38
|
+
|
39
|
+
def execute
|
40
|
+
puts "=> Importing certificate CN=#{common_name} into AWS ACM (region=#{region})"
|
41
|
+
if certificate_arn
|
42
|
+
puts " * updating ARN: #{certificate_arn}"
|
43
|
+
else
|
44
|
+
puts " * Importing as as new certificate"
|
45
|
+
end
|
46
|
+
|
47
|
+
resp = acm.import_certificate(
|
48
|
+
{
|
49
|
+
certificate: certificate.certificate.to_pem,
|
50
|
+
private_key: certificate.private_key.to_pem,
|
51
|
+
certificate_chain: certificate.chain,
|
52
|
+
}.merge(certificate_arn ? {certificate_arn: certificate_arn} : {})
|
53
|
+
)
|
54
|
+
unless certificate_arn
|
55
|
+
puts " * ARN: #{resp.certificate_arn}"
|
56
|
+
end
|
57
|
+
|
58
|
+
acm.add_tags_to_certificate(
|
59
|
+
certificate_arn: resp.certificate_arn,
|
60
|
+
tags: [key: 'Acmesmith', value: '1'],
|
61
|
+
)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -1,13 +1,20 @@
|
|
1
1
|
module Acmesmith
|
2
2
|
module PostIssueingHooks
|
3
3
|
class Base
|
4
|
-
|
4
|
+
attr_reader :certificate
|
5
|
+
|
6
|
+
def common_name
|
7
|
+
certificate.common_name
|
5
8
|
end
|
6
9
|
|
7
|
-
def
|
8
|
-
|
10
|
+
def run(certificate:)
|
11
|
+
@certificate = certificate
|
12
|
+
execute
|
9
13
|
end
|
10
14
|
|
15
|
+
def execute
|
16
|
+
raise NotImplementedError
|
17
|
+
end
|
11
18
|
end
|
12
19
|
end
|
13
20
|
end
|
@@ -4,27 +4,22 @@ require 'acmesmith/post_issueing_hooks/base'
|
|
4
4
|
module Acmesmith
|
5
5
|
module PostIssueingHooks
|
6
6
|
class Shell < Base
|
7
|
-
|
8
|
-
class AmbiguousHostedZones < StandardError; end
|
9
|
-
|
10
|
-
def initialize(common_name:, command:, ignore_failure:false)
|
11
|
-
@common_name = common_name
|
7
|
+
def initialize(command:, ignore_failure: false)
|
12
8
|
@command = command
|
13
9
|
@ignore_failure = ignore_failure
|
14
10
|
end
|
15
11
|
|
16
12
|
def execute
|
17
|
-
puts "=> Executing Post Issueing Hook for #{
|
18
|
-
puts "
|
19
|
-
puts "=> Running: #{@command}"
|
13
|
+
puts "=> Executing Post Issueing Hook for #{common_name} in #{self.class.name}"
|
14
|
+
puts " $ #{@command}"
|
20
15
|
|
21
|
-
status = system({"COMMON_NAME" =>
|
16
|
+
status = system({"COMMON_NAME" => common_name}, @command)
|
22
17
|
|
23
18
|
unless status
|
24
19
|
if @ignore_failure
|
25
|
-
$stderr.puts "
|
20
|
+
$stderr.puts " ! execution failed"
|
26
21
|
else
|
27
|
-
raise "
|
22
|
+
raise "Execution failed"
|
28
23
|
end
|
29
24
|
end
|
30
25
|
end
|
data/lib/acmesmith/version.rb
CHANGED
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.
|
4
|
+
version: 0.8.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-
|
11
|
+
date: 2017-07-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: acme-client
|
@@ -128,6 +128,7 @@ 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
|
131
132
|
- lib/acmesmith/post_issueing_hooks/base.rb
|
132
133
|
- lib/acmesmith/post_issueing_hooks/shell.rb
|
133
134
|
- lib/acmesmith/storages.rb
|
@@ -153,9 +154,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
153
154
|
version: '0'
|
154
155
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
155
156
|
requirements:
|
156
|
-
- - "
|
157
|
+
- - ">="
|
157
158
|
- !ruby/object:Gem::Version
|
158
|
-
version:
|
159
|
+
version: '0'
|
159
160
|
requirements: []
|
160
161
|
rubyforge_project:
|
161
162
|
rubygems_version: 2.6.11
|