certman 0.7.0 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5fb0672b4747cfec0f8607cd81af9f9bdb06b50b
4
- data.tar.gz: 1ac80795546083e8f5f1250016a0e4b0c33e8d6a
3
+ metadata.gz: de87e6045fb8c57ca1901d8a4873bc98f9708f47
4
+ data.tar.gz: 996d68620862ad5dcefeba152bf1a951869289a1
5
5
  SHA512:
6
- metadata.gz: c52b0049736f4d17baf9e678eb08b5d14c4d3e6d8a007f5178fa5b296b8040c51c02ec5d5475de981795e51b155290333e47eec25ebe295e0be272ff8d0dbaeb
7
- data.tar.gz: d23a89e90b39181aa0561e460ff1e45cfa018fe7826ac036361a97538436e1a37e4afb73deee0c2a3f793cc36bd41d954802a733e35f84907e7dadea2bbc113b
6
+ metadata.gz: 783c5f0b05da2cf4abaaa8019a4a0cca53a3431eb52b7b1d1439c26cef96089510045c77c758855b2f02187456ebddc581f4b4f37e93963a0f812348c3147b83
7
+ data.tar.gz: 848c27576f51f0757aea1f374a722206dac7d059145288f8966aadfeabab872c7cfaf7d34d9a68b53fb82f891bf67278d2f9495e73a4692c00bdd185e52d75c0
data/lib/certman/cli.rb CHANGED
@@ -1,21 +1,23 @@
1
1
  module Certman
2
2
  class CLI < Thor
3
3
  desc 'request [DOMAIN]', 'Request ACM Certificate with only AWS managed services'
4
- option :remain_resources, type: :boolean
4
+ option :remain_resources, type: :boolean, default: false
5
+ option :hosted_zone, type: :string
5
6
  def request(domain)
6
7
  pastel = Pastel.new
7
8
  prompt = TTY::Prompt.new
8
9
  return unless prompt.yes?(pastel.red("NOTICE! Your selected region is *#{Aws.config[:region]}*. \
9
10
  Certman create certificate on *#{Aws.config[:region]}*. OK?"))
10
- client = Certman::Client.new(domain)
11
+ client = Certman::Client.new(domain, options)
11
12
  return unless prompt.yes?(pastel.red("NOTICE! Certman use *#{client.region_by_hash}* S3/SES. OK?"))
12
- return unless prompt.yes?(pastel.red('NOTICE! When requesting, Certman replace Active Receipt Rule Set. OK?'))
13
+ return unless prompt.yes?(pastel.red("NOTICE! When requesting, Certman apend Receipt Rule to current Active \
14
+ Receipt Rule Set. OK?"))
13
15
  Signal.trap(:INT) do
14
16
  puts ''
15
17
  puts pastel.red('Rollback start.')
16
18
  client.rollback
17
19
  end
18
- cert_arn = client.request(options[:remain_resources])
20
+ cert_arn = client.request
19
21
  puts 'Done.'
20
22
  puts ''
21
23
  puts "certificate_arn: #{pastel.cyan(cert_arn)}"
@@ -6,15 +6,18 @@ module Certman
6
6
  include Certman::Resource::Route53
7
7
  include Certman::Resource::ACM
8
8
 
9
- def initialize(domain)
9
+ def initialize(domain, options)
10
10
  @do_rollback = false
11
11
  @cname_exists = false
12
12
  @domain = domain
13
13
  @cert_arn = nil
14
14
  @savepoint = []
15
+ @remain_resources = options[:remain_resources]
16
+ @hosted_zone_domain = options[:hosted_zone]
17
+ @hosted_zone_domain.sub(/\.\z/, '') unless @hosted_zone_domain.nil?
15
18
  end
16
19
 
17
- def request(remain_resources = false)
20
+ def request
18
21
  check_resource
19
22
 
20
23
  enforce_region_by_hash do
@@ -60,7 +63,7 @@ module Certman
60
63
  end
61
64
  end
62
65
 
63
- cleanup_resources if !remain_resources || @do_rollback
66
+ cleanup_resources if !@remain_resources || @do_rollback
64
67
 
65
68
  @cert_arn
66
69
  end
@@ -79,7 +82,7 @@ module Certman
79
82
  s.success
80
83
 
81
84
  s = spinner('[Route53] Check Hosted Zone')
82
- raise "Hosted Zone #{root_domain} does not exist" unless hosted_zone_exist?
85
+ raise "Hosted Zone #{hosted_zone_domain} does not exist" unless hosted_zone_exist?
83
86
  s.success
84
87
 
85
88
  s = spinner('[Route53] Check TXT Record')
@@ -90,7 +93,7 @@ module Certman
90
93
  s = spinner('[Route53] Check MX Record')
91
94
  raise "#{email_domain} MX already exist" if mx_rset_exist?
92
95
  if cname_rset_exist?
93
- puts pastel.cyan("\n#{email_domain} CNAME already exist. Use #{root_domain}")
96
+ puts pastel.cyan("\n#{email_domain} CNAME already exist. Use #{hosted_zone_domain}")
94
97
  @cname_exists = true
95
98
  check_resource
96
99
  end
@@ -197,17 +200,22 @@ module Certman
197
200
  end
198
201
  end
199
202
 
203
+ def hosted_zone_domain
204
+ return @hosted_zone_domain if @hosted_zone_domain
205
+ root_domain
206
+ end
207
+
200
208
  def root_domain
201
209
  PublicSuffix.domain(@domain)
202
210
  end
203
211
 
204
212
  def email_domain
205
- return root_domain if @cname_exists
213
+ return hosted_zone_domain if @cname_exists
206
214
  @domain.sub(/\A(www|\*)\./, '')
207
215
  end
208
216
 
209
217
  def validation_domain
210
- return root_domain if @cname_exists
218
+ return hosted_zone_domain if @cname_exists
211
219
  @domain
212
220
  end
213
221
 
@@ -4,7 +4,7 @@ module Certman
4
4
  module Route53
5
5
  def create_txt_rset
6
6
  @hosted_zone = route53.list_hosted_zones.hosted_zones.find do |zone|
7
- PublicSuffix.domain(zone.name) == root_domain
7
+ zone.name == "#{hosted_zone_domain}."
8
8
  end
9
9
  route53.change_resource_record_sets(
10
10
  change_batch: {
@@ -104,7 +104,7 @@ module Certman
104
104
  def hosted_zone_exist?
105
105
  @hosted_zone_id = nil
106
106
  hosted_zone = route53.list_hosted_zones.hosted_zones.find do |zone|
107
- if PublicSuffix.domain(zone.name) == root_domain
107
+ if zone.name == "#{hosted_zone_domain}."
108
108
  @hosted_zone_id = zone.id
109
109
  next true
110
110
  end
@@ -45,7 +45,7 @@ EOF
45
45
  sleep 60
46
46
  s3.list_objects(bucket: bucket_name).contents.map do |object|
47
47
  res = s3.get_object(bucket: bucket_name, key: object.key)
48
- res.body.read.match(%r{https://certificates\.amazon\.com/approvals[^\s]+}) do |md|
48
+ res.body.read.match(%r{https://[^\s]*certificates\.amazon\.com/approvals[^\s]+}) do |md|
49
49
  cert_uri = md[0]
50
50
  handle = open(cert_uri)
51
51
  document = Oga.parse_html(handle)
@@ -53,7 +53,8 @@ EOF
53
53
  document.css('form input').each do |input|
54
54
  data[input.get('name')] = input.get('value')
55
55
  end
56
- res = Net::HTTP.post_form(URI.parse('https://certificates.amazon.com/approvals'), data)
56
+ post_uri = cert_uri.sub(/\?.*/, '')
57
+ res = Net::HTTP.post_form(URI.parse(post_uri), data)
57
58
  raise 'Can not approve' unless res.body =~ /Success/
58
59
  # success
59
60
  is_break = true
@@ -1,3 +1,3 @@
1
1
  module Certman
2
- VERSION = '0.7.0'
2
+ VERSION = '0.8.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: certman
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - k1LoW
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-05-02 00:00:00.000000000 Z
11
+ date: 2017-05-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk