dnsimple-ruby 1.1.1 → 1.2.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.
data/README CHANGED
@@ -58,7 +58,7 @@ The following commands are available for managing contacts:
58
58
 
59
59
  The following commands are available for purchasing certificates:
60
60
 
61
- * dnsimple certificate:purchase domain.com name
61
+ * dnsimple certificate:purchase domain.com name contact_id
62
62
  * dnsimple certificate:submit id
63
63
 
64
64
  The contact name/value pairs are:
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.1
1
+ 1.2.0
data/bin/dnsimple.rb CHANGED
@@ -80,7 +80,9 @@ service:available domain.com # List all of the se
80
80
  service:add domain.com short_name # Add the service to the domain
81
81
  service:remove domain.com short_name # Remove the service from the domain
82
82
 
83
- certificate:purchase domain.com name # Purchase a certificate
83
+ certificate:list domain.com # List all certificates for a domain
84
+ certificate:describe domain.com id # Get a specific certificate for a domain
85
+ certificate:purchase domain.com name contact_id # Purchase a certificate
84
86
  certificate:submit domain.com id approver_email # Submit a certificate for processing
85
87
 
86
88
  Please see the DNSimple documentation at https://dnsimple.com/documentation/api for additional
@@ -1,4 +1,7 @@
1
1
  module DNSimple #:nodoc:
2
+ # Represents an SSL certificate that has been purchased. The certificate
3
+ # must also be submitted using the #submit method before the Certificate
4
+ # Authority will issue a signed certificate.
2
5
  class Certificate
3
6
  include HTTParty
4
7
  #debug_output $stdout
@@ -10,6 +13,30 @@ module DNSimple #:nodoc:
10
13
 
11
14
  # The subdomain on the certificate
12
15
  attr_accessor :name
16
+
17
+ # The private key, if DNSimple generated the Certificate Signing Request
18
+ attr_accessor :private_key
19
+
20
+ # The SSL certificate, if it has been issued by the Certificate Authority
21
+ attr_accessor :ssl_certificate
22
+
23
+ # The Certificate Signing Request
24
+ attr_accessor :csr
25
+
26
+ # The Certificate status
27
+ attr_accessor :certificate_status
28
+
29
+ # The date the Certificate order was placed
30
+ attr_accessor :order_date
31
+
32
+ # The date the Certificate will expire
33
+ attr_accessor :expiration_date
34
+
35
+ # The approver email address
36
+ attr_accessor :approver_email
37
+
38
+ # An array of all emails that can be used to approve the certificate
39
+ attr_accessor :available_approver_emails
13
40
 
14
41
  # When the certificate was purchased
15
42
  attr_accessor :created_at
@@ -17,6 +44,8 @@ module DNSimple #:nodoc:
17
44
  # When the certificate was last updated
18
45
  attr_accessor :updated_at
19
46
 
47
+
48
+
20
49
  #:nodoc:
21
50
  def initialize(attributes)
22
51
  attributes.each do |key, value|
@@ -32,6 +61,8 @@ module DNSimple #:nodoc:
32
61
  end
33
62
 
34
63
  def submit(approver_email, options={})
64
+ raise DNSimple::Error, "Approver email is required" unless approver_email
65
+
35
66
  options.merge!(DNSimple::Client.standard_options_with_credentials)
36
67
  options.merge!(:body => {:certificate => {:approver_email => approver_email}})
37
68
 
@@ -43,9 +74,9 @@ module DNSimple #:nodoc:
43
74
  when 200
44
75
  return DNSimple::Certificate.new({:domain => domain}.merge(response["certificate"]))
45
76
  when 401
46
- raise RuntimeError, "Authentication failed"
77
+ raise DNSimple::AuthenticationFailed, "Authentication failed"
47
78
  else
48
- raise DNSimple::Error.new("#{name}.#{domain.name}", response["errors"])
79
+ raise DNSimple::Error.new("Error submitting certificate: #{response["errors"]}")
49
80
  end
50
81
  end
51
82
 
@@ -54,6 +85,13 @@ module DNSimple #:nodoc:
54
85
  # subdomain part.
55
86
  #
56
87
  # Example: DNSimple::Certificate.purchase(domain, 'www', contact)
88
+ #
89
+ # Please note that by invoking this method DNSimple will immediately charge
90
+ # your credit card on file at DNSimple for the full certificate price.
91
+ #
92
+ # For wildcard certificates an asterisk must appear in the name.
93
+ #
94
+ # Example: DNSimple::Certificate.purchase(domain, '*', contact)
57
95
  def self.purchase(domain, name, contact, options={})
58
96
  certificate_hash = {
59
97
  :name => name,
@@ -71,7 +109,7 @@ module DNSimple #:nodoc:
71
109
  when 201
72
110
  return DNSimple::Certificate.new({:domain => domain}.merge(response["certificate"]))
73
111
  when 401
74
- raise RuntimeError, "Authentication failed"
112
+ raise DNSimple::AuthenticationFailed, "Authentication failed"
75
113
  when 406
76
114
  raise DNSimple::CertificateExists.new("#{name}.#{domain.name}", response["errors"])
77
115
  else
@@ -91,11 +129,30 @@ module DNSimple #:nodoc:
91
129
  when 200
92
130
  response.map { |r| DNSimple::Certificate.new({:domain => domain}.merge(r["certificate"])) }
93
131
  when 401
94
- raise RuntimeError, "Authentication failed"
132
+ raise DNSimple::AuthenticationFailed, "Authentication failed"
95
133
  else
96
- raise DNSimple::Error.new("#{name}.#{domain.name} list certificates error", response["errors"])
134
+ raise DNSimple::Error.new("List certificates error: #{response["errors"]}")
97
135
  end
98
136
  end
99
137
 
138
+ # Find a specific certificate for the given domain.
139
+ def self.find(domain, certificate_id, options={})
140
+ options.merge!(DNSimple::Client.standard_options_with_credentials)
141
+
142
+ response = self.get("#{DNSimple::Client.base_uri}/domains/#{domain.name}/certificates/#{certificate_id}", options)
143
+
144
+ pp response if DNSimple::Client.debug?
145
+
146
+ case response.code
147
+ when 200
148
+ DNSimple::Certificate.new({:domain => domain}.merge(response["certificate"]))
149
+ when 401
150
+ raise DNSimple::AuthenticationFailed, "Authentication failed"
151
+ when 404
152
+ raise DNSimple::CertificateNotFound, "Could not find certificate #{certificate_id} for domain #{domain.name}"
153
+ else
154
+ raise DNSimple::Error.new("Find certificate error: #{response["errors"]}")
155
+ end
156
+ end
100
157
  end
101
158
  end
data/lib/dnsimple/cli.rb CHANGED
@@ -67,7 +67,10 @@ module DNSimple
67
67
  'service:add' => DNSimple::Commands::AddService,
68
68
  'service:remove' => DNSimple::Commands::RemoveService,
69
69
 
70
- 'certificate:purchase' => DNSimple::Commands::PurchaseCertificate
70
+ 'certificate:list' => DNSimple::Commands::ListCertificates,
71
+ 'certificate:describe' => DNSimple::Commands::DescribeCertificate,
72
+ 'certificate:purchase' => DNSimple::Commands::PurchaseCertificate,
73
+ 'certificate:submit' => DNSimple::Commands::SubmitCertificate
71
74
  }
72
75
  end
73
76
  end
@@ -113,4 +116,7 @@ require 'dnsimple/commands/list_applied_services'
113
116
  require 'dnsimple/commands/add_service'
114
117
  require 'dnsimple/commands/remove_service'
115
118
 
119
+ require 'dnsimple/commands/list_certificates'
120
+ require 'dnsimple/commands/describe_certificate'
116
121
  require 'dnsimple/commands/purchase_certificate'
122
+ require 'dnsimple/commands/submit_certificate'
@@ -0,0 +1,33 @@
1
+ module DNSimple
2
+ module Commands
3
+ class DescribeCertificate
4
+ def execute(args, options={})
5
+ domain_name = args.shift
6
+ certificate_id = args.shift
7
+ domain = Domain.find(domain_name)
8
+ certificate = Certificate.find(domain, certificate_id)
9
+ puts "Certificate: #{certificate.fqdn}"
10
+ puts "\tID: #{certificate.id}"
11
+ puts "\tStatus: #{certificate.certificate_status}"
12
+ puts "\tCreated: #{certificate.created_at}"
13
+ puts "\tOrder Date: #{certificate.order_date}"
14
+ puts "\tExpires: #{certificate.expiration_date}"
15
+
16
+ if certificate.approver_email =~ /\S+/
17
+ puts "\tApprover email: #{certificate.approver_email}"
18
+ else
19
+ puts "\tAvailable approver emails:"
20
+ certificate.available_approver_emails.split(",").each do |email|
21
+ puts "\t\t#{email}"
22
+ end
23
+ end
24
+
25
+ puts
26
+ puts "#{certificate.csr}"
27
+ puts
28
+ puts "#{certificate.private_key}"
29
+ puts
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,15 @@
1
+ module DNSimple
2
+ module Commands
3
+ class ListCertificates
4
+ def execute(args, options={})
5
+ domain_name = args.shift
6
+ domain = DNSimple::Domain.find(domain_name)
7
+ certificates = DNSimple::Certificate.all(domain)
8
+ puts "Found #{certificates.length} certificate for #{domain_name}"
9
+ certificates.each do |certificate|
10
+ puts "\t#{certificate.fqdn} (id: #{certificate.id}, status: #{certificate.certificate_status})"
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -5,9 +5,13 @@ module DNSimple
5
5
  class PurchaseCertificate < Command
6
6
  def execute(args, options={})
7
7
  domain_name = args.shift
8
- name = args.empty? ? '' : args.shift
8
+ name = args.shift
9
+ contact_id = args.shift
10
+
11
+ domain = Domain.find(domain_name)
12
+ contact = Contact.find(contact_id)
9
13
 
10
- certificate = Certificate.purchase(domain_name, name)
14
+ certificate = Certificate.purchase(domain, name, contact)
11
15
  say "Purchased certificate for #{certificate.fqdn}"
12
16
  end
13
17
  end
@@ -1,5 +1,11 @@
1
1
  module DNSimple
2
2
  class Error < StandardError
3
+ def initialize(message)
4
+ super(message)
5
+ end
6
+ end
7
+
8
+ class DomainError < DNSimple::Error
3
9
  def initialize(domain, messages)
4
10
  @domain = domain
5
11
  @messages = messages
@@ -7,5 +13,13 @@ module DNSimple
7
13
  end
8
14
  end
9
15
 
10
- class RecordExists < Error; end
16
+ class RecordExists < DomainError; end
17
+
18
+ class AuthenticationFailed < DNSimple::Error; end
19
+
20
+ class UserNotFound < DNSimple::Error; end
21
+
22
+ class CertificateExists < DNSimple::Error; end
23
+
24
+ class CertificateNotFound < DNSimple::Error; end
11
25
  end
data/lib/dnsimple/user.rb CHANGED
@@ -33,11 +33,11 @@ module DNSimple
33
33
  when 200
34
34
  return User.new(response["user"])
35
35
  when 401
36
- raise RuntimeError, "Authentication failed"
36
+ raise DNSimple::AuthenticationFailed, "Authentication failed"
37
37
  when 404
38
- raise RuntimeError, "Could not find user"
38
+ raise DNSimple::UserNotFound, "Could not find user"
39
39
  else
40
- raise RuntimeError, "Error: #{response.code} #{response.message}"
40
+ raise DNSimple::Error, "Error: #{response.code} #{response.message}"
41
41
  end
42
42
  end
43
43
  end
data/spec/spec_helper.rb CHANGED
@@ -14,7 +14,7 @@ RSpec.configure do |c|
14
14
  c.extend VCR::RSpec::Macros
15
15
  end
16
16
 
17
- config = YAML.load(File.new(File.expand_path('~/.dnsimple.test')))
17
+ config = YAML.load(File.new(File.expand_path('~/.dnsimple.local')))
18
18
 
19
19
  DNSimple::Client.base_uri = config['site'] || "https://test.dnsimple.com/"
20
20
  DNSimple::Client.username = config['username']
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dnsimple-ruby
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
4
+ hash: 31
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
- - 1
9
- - 1
10
- version: 1.1.1
8
+ - 2
9
+ - 0
10
+ version: 1.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Anthony Eden
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-11-12 00:00:00 Z
18
+ date: 2011-11-14 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  requirement: &id001 !ruby/object:Gem::Requirement
@@ -267,6 +267,7 @@ files:
267
267
  - lib/dnsimple/commands/delete_record.rb
268
268
  - lib/dnsimple/commands/delete_template.rb
269
269
  - lib/dnsimple/commands/delete_template_record.rb
270
+ - lib/dnsimple/commands/describe_certificate.rb
270
271
  - lib/dnsimple/commands/describe_contact.rb
271
272
  - lib/dnsimple/commands/describe_domain.rb
272
273
  - lib/dnsimple/commands/describe_record.rb
@@ -274,6 +275,7 @@ files:
274
275
  - lib/dnsimple/commands/describe_user.rb
275
276
  - lib/dnsimple/commands/list_applied_services.rb
276
277
  - lib/dnsimple/commands/list_available_services.rb
278
+ - lib/dnsimple/commands/list_certificates.rb
277
279
  - lib/dnsimple/commands/list_contacts.rb
278
280
  - lib/dnsimple/commands/list_domains.rb
279
281
  - lib/dnsimple/commands/list_extended_attributes.rb