sparqcode-dnsimple-ruby 1.2.6
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/.bundle/config +3 -0
- data/.rvmrc +1 -0
- data/Gemfile +16 -0
- data/Gemfile.lock +71 -0
- data/LICENSE +22 -0
- data/README +125 -0
- data/README.rdoc +125 -0
- data/README.textile +161 -0
- data/Rakefile +33 -0
- data/VERSION +1 -0
- data/bin/dnsimple +4 -0
- data/bin/dnsimple.rb +153 -0
- data/dnsimple-ruby.gemspec +191 -0
- data/features/README +12 -0
- data/features/cli/certificates/purchase_certificate.feature +10 -0
- data/features/cli/contacts/create_contact.feature +10 -0
- data/features/cli/domains/check_domain.feature +10 -0
- data/features/cli/domains/create_domain.feature +10 -0
- data/features/cli/domains/delete_domain.feature +11 -0
- data/features/cli/domains/register_domain.feature +10 -0
- data/features/cli/records/create_ptr_record.feature +11 -0
- data/features/cli/records/create_record.feature +12 -0
- data/features/cli/records/delete_record.feature +14 -0
- data/features/cli/templates/apply_template.feature +11 -0
- data/features/step_definitions/certificate_steps.rb +3 -0
- data/features/step_definitions/cli_steps.rb +8 -0
- data/features/step_definitions/domain_steps.rb +32 -0
- data/features/step_definitions/record_steps.rb +38 -0
- data/features/step_definitions/template_steps.rb +9 -0
- data/features/support/env.rb +17 -0
- data/fixtures/vcr_cassettes/DNSimple_Certificate/_all.yml +44 -0
- data/fixtures/vcr_cassettes/DNSimple_Certificate/_purchase.yml +44 -0
- data/fixtures/vcr_cassettes/DNSimple_Certificate/_submit.yml +44 -0
- data/fixtures/vcr_cassettes/DNSimple_Contact/a_new_contact.yml +42 -0
- data/fixtures/vcr_cassettes/DNSimple_Contact/an_existing_contact.yml +42 -0
- data/fixtures/vcr_cassettes/DNSimple_Domain/_all.yml +130 -0
- data/fixtures/vcr_cassettes/DNSimple_Domain/applying_templates.yml +216 -0
- data/fixtures/vcr_cassettes/DNSimple_Domain/creating_a_new_domain.yml +44 -0
- data/fixtures/vcr_cassettes/DNSimple_Domain/finding_an_existing_domain/by_id.yml +44 -0
- data/fixtures/vcr_cassettes/DNSimple_Domain/finding_an_existing_domain/by_name.yml +44 -0
- data/fixtures/vcr_cassettes/DNSimple_Domain/registration/with_a_new_registrant_contact.yml +44 -0
- data/fixtures/vcr_cassettes/DNSimple_Domain/registration/with_an_existing_contact.yml +44 -0
- data/fixtures/vcr_cassettes/DNSimple_Domain/setting_name_servers.yml +30 -0
- data/fixtures/vcr_cassettes/DNSimple_ExtendedAttribute/list_extended_attributes/for_ca.yml +40 -0
- data/fixtures/vcr_cassettes/DNSimple_ExtendedAttribute/list_extended_attributes/for_com.yml +40 -0
- data/fixtures/vcr_cassettes/DNSimple_Record/_all.yml +173 -0
- data/fixtures/vcr_cassettes/DNSimple_Record/creating_a_new_record.yml +44 -0
- data/fixtures/vcr_cassettes/DNSimple_Record/find_a_record.yml +44 -0
- data/fixtures/vcr_cassettes/DNSimple_Template/a_template.yml +44 -0
- data/fixtures/vcr_cassettes/DNSimple_User/_me.yml +42 -0
- data/lib/dnsimple.rb +19 -0
- data/lib/dnsimple/certificate.rb +158 -0
- data/lib/dnsimple/cli.rb +122 -0
- data/lib/dnsimple/client.rb +74 -0
- data/lib/dnsimple/command.rb +10 -0
- data/lib/dnsimple/commands/add_service.rb +16 -0
- data/lib/dnsimple/commands/add_template_record.rb +18 -0
- data/lib/dnsimple/commands/apply_template.rb +15 -0
- data/lib/dnsimple/commands/check_domain.rb +11 -0
- data/lib/dnsimple/commands/clear_domain.rb +16 -0
- data/lib/dnsimple/commands/create_contact.rb +21 -0
- data/lib/dnsimple/commands/create_domain.rb +16 -0
- data/lib/dnsimple/commands/create_record.rb +20 -0
- data/lib/dnsimple/commands/create_template.rb +14 -0
- data/lib/dnsimple/commands/delete_contact.rb +14 -0
- data/lib/dnsimple/commands/delete_domain.rb +14 -0
- data/lib/dnsimple/commands/delete_record.rb +16 -0
- data/lib/dnsimple/commands/delete_template.rb +13 -0
- data/lib/dnsimple/commands/delete_template_record.rb +16 -0
- data/lib/dnsimple/commands/describe_certificate.rb +34 -0
- data/lib/dnsimple/commands/describe_contact.rb +25 -0
- data/lib/dnsimple/commands/describe_domain.rb +14 -0
- data/lib/dnsimple/commands/describe_record.rb +16 -0
- data/lib/dnsimple/commands/describe_service.rb +12 -0
- data/lib/dnsimple/commands/describe_user.rb +18 -0
- data/lib/dnsimple/commands/list_applied_services.rb +16 -0
- data/lib/dnsimple/commands/list_available_services.rb +16 -0
- data/lib/dnsimple/commands/list_certificates.rb +15 -0
- data/lib/dnsimple/commands/list_contacts.rb +13 -0
- data/lib/dnsimple/commands/list_domains.rb +13 -0
- data/lib/dnsimple/commands/list_extended_attributes.rb +25 -0
- data/lib/dnsimple/commands/list_records.rb +21 -0
- data/lib/dnsimple/commands/list_services.rb +14 -0
- data/lib/dnsimple/commands/list_template_records.rb +17 -0
- data/lib/dnsimple/commands/list_templates.rb +13 -0
- data/lib/dnsimple/commands/purchase_certificate.rb +19 -0
- data/lib/dnsimple/commands/register_domain.rb +33 -0
- data/lib/dnsimple/commands/remove_service.rb +14 -0
- data/lib/dnsimple/commands/submit_certificate.rb +19 -0
- data/lib/dnsimple/commands/transfer_domain.rb +21 -0
- data/lib/dnsimple/commands/update_contact.rb +25 -0
- data/lib/dnsimple/commands/update_record.rb +23 -0
- data/lib/dnsimple/contact.rb +181 -0
- data/lib/dnsimple/domain.rb +246 -0
- data/lib/dnsimple/error.rb +32 -0
- data/lib/dnsimple/extended_attribute.rb +73 -0
- data/lib/dnsimple/record.rb +128 -0
- data/lib/dnsimple/service.rb +58 -0
- data/lib/dnsimple/template.rb +91 -0
- data/lib/dnsimple/template_record.rb +103 -0
- data/lib/dnsimple/transfer_order.rb +45 -0
- data/lib/dnsimple/user.rb +44 -0
- data/spec/README +10 -0
- data/spec/certificate_spec.rb +46 -0
- data/spec/command_spec.rb +19 -0
- data/spec/commands/add_service_spec.rb +29 -0
- data/spec/commands/create_record_spec.rb +23 -0
- data/spec/commands/list_records_spec.rb +34 -0
- data/spec/commands/purchase_certificate_spec.rb +24 -0
- data/spec/commands/submit_certificate_spec.rb +19 -0
- data/spec/contact_spec.rb +35 -0
- data/spec/domain_spec.rb +97 -0
- data/spec/extended_attributes_spec.rb +19 -0
- data/spec/record_spec.rb +59 -0
- data/spec/spec_helper.rb +22 -0
- data/spec/template_spec.rb +11 -0
- data/spec/user_spec.rb +23 -0
- metadata +353 -0
|
@@ -0,0 +1,158 @@
|
|
|
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.
|
|
5
|
+
class Certificate
|
|
6
|
+
include HTTParty
|
|
7
|
+
#debug_output $stdout
|
|
8
|
+
|
|
9
|
+
# The certificate ID in DNSimple
|
|
10
|
+
attr_accessor :id
|
|
11
|
+
|
|
12
|
+
attr_accessor :domain
|
|
13
|
+
|
|
14
|
+
# The subdomain on the certificate
|
|
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
|
|
40
|
+
|
|
41
|
+
# When the certificate was purchased
|
|
42
|
+
attr_accessor :created_at
|
|
43
|
+
|
|
44
|
+
# When the certificate was last updated
|
|
45
|
+
attr_accessor :updated_at
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
#:nodoc:
|
|
50
|
+
def initialize(attributes)
|
|
51
|
+
attributes.each do |key, value|
|
|
52
|
+
m = "#{key}=".to_sym
|
|
53
|
+
self.send(m, value) if self.respond_to?(m)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Get the fully-qualified domain name for the certificate. This is the
|
|
58
|
+
# domain.name joined with the certificate name, separated by a period.
|
|
59
|
+
def fqdn
|
|
60
|
+
[name, domain.name].delete_if { |p| p !~ DNSimple::BLANK_REGEX }.join(".")
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def submit(approver_email, options={})
|
|
64
|
+
raise DNSimple::Error, "Approver email is required" unless approver_email
|
|
65
|
+
|
|
66
|
+
options.merge!(DNSimple::Client.standard_options_with_credentials)
|
|
67
|
+
options.merge!(:body => {:certificate => {:approver_email => approver_email}})
|
|
68
|
+
|
|
69
|
+
response = self.class.put("#{DNSimple::Client.base_uri}/domains/#{domain.name}/certificates/#{id}/submit", options)
|
|
70
|
+
|
|
71
|
+
pp response if DNSimple::Client.debug?
|
|
72
|
+
|
|
73
|
+
case response.code
|
|
74
|
+
when 200
|
|
75
|
+
return DNSimple::Certificate.new({:domain => domain}.merge(response["certificate"]))
|
|
76
|
+
when 401
|
|
77
|
+
raise DNSimple::AuthenticationFailed, "Authentication failed"
|
|
78
|
+
else
|
|
79
|
+
raise DNSimple::Error.new("Error submitting certificate: #{response["errors"]}")
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# Purchase a certificate under the given domain with the given name. The
|
|
84
|
+
# name will be appended to the domain name, and thus should only be the
|
|
85
|
+
# subdomain part.
|
|
86
|
+
#
|
|
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)
|
|
95
|
+
def self.purchase(domain, name, contact, options={})
|
|
96
|
+
certificate_hash = {
|
|
97
|
+
:name => name,
|
|
98
|
+
:contact_id => contact.id
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
options.merge!(DNSimple::Client.standard_options_with_credentials)
|
|
102
|
+
options.merge!({:body => {:certificate => certificate_hash}})
|
|
103
|
+
|
|
104
|
+
response = self.post("#{DNSimple::Client.base_uri}/domains/#{domain.name}/certificates", options)
|
|
105
|
+
|
|
106
|
+
pp response if DNSimple::Client.debug?
|
|
107
|
+
|
|
108
|
+
case response.code
|
|
109
|
+
when 201
|
|
110
|
+
return DNSimple::Certificate.new({:domain => domain}.merge(response["certificate"]))
|
|
111
|
+
when 401
|
|
112
|
+
raise DNSimple::AuthenticationFailed, "Authentication failed"
|
|
113
|
+
when 406
|
|
114
|
+
raise DNSimple::CertificateExists.new("#{name}.#{domain.name}", response["errors"])
|
|
115
|
+
else
|
|
116
|
+
raise DNSimple::Error.new("#{name}.#{domain.name}", response["errors"])
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# Get an array of all certificates for the given domain.
|
|
121
|
+
def self.all(domain, options={})
|
|
122
|
+
options.merge!(DNSimple::Client.standard_options_with_credentials)
|
|
123
|
+
|
|
124
|
+
response = self.get("#{DNSimple::Client.base_uri}/domains/#{domain.name}/certificates", options)
|
|
125
|
+
|
|
126
|
+
pp response if DNSimple::Client.debug?
|
|
127
|
+
|
|
128
|
+
case response.code
|
|
129
|
+
when 200
|
|
130
|
+
response.map { |r| DNSimple::Certificate.new({:domain => domain}.merge(r["certificate"])) }
|
|
131
|
+
when 401
|
|
132
|
+
raise DNSimple::AuthenticationFailed, "Authentication failed"
|
|
133
|
+
else
|
|
134
|
+
raise DNSimple::Error.new("List certificates error: #{response["errors"]}")
|
|
135
|
+
end
|
|
136
|
+
end
|
|
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
|
|
157
|
+
end
|
|
158
|
+
end
|
data/lib/dnsimple/cli.rb
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
require 'yaml'
|
|
2
|
+
|
|
3
|
+
module DNSimple
|
|
4
|
+
|
|
5
|
+
class CommandNotFound < RuntimeError
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
class CLI
|
|
9
|
+
|
|
10
|
+
def execute(command_name, args, options={})
|
|
11
|
+
DNSimple::Client.load_credentials_if_necessary
|
|
12
|
+
command = commands[command_name]
|
|
13
|
+
if command
|
|
14
|
+
begin
|
|
15
|
+
command.new.execute(args, options)
|
|
16
|
+
rescue DNSimple::Error => e
|
|
17
|
+
puts "An error occurred: #{e.message}"
|
|
18
|
+
rescue RuntimeError => e
|
|
19
|
+
puts "An error occurred: #{e.message}"
|
|
20
|
+
end
|
|
21
|
+
else
|
|
22
|
+
raise CommandNotFound, "Unknown command: #{command_name}"
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def commands
|
|
27
|
+
{
|
|
28
|
+
'info' => DNSimple::Commands::DescribeUser,
|
|
29
|
+
|
|
30
|
+
'check' => DNSimple::Commands::CheckDomain,
|
|
31
|
+
'create' => DNSimple::Commands::CreateDomain,
|
|
32
|
+
'register' => DNSimple::Commands::RegisterDomain,
|
|
33
|
+
'transfer' => DNSimple::Commands::TransferDomain,
|
|
34
|
+
'describe' => DNSimple::Commands::DescribeDomain,
|
|
35
|
+
'list' => DNSimple::Commands::ListDomains,
|
|
36
|
+
'delete' => DNSimple::Commands::DeleteDomain,
|
|
37
|
+
'clear' => DNSimple::Commands::ClearDomain,
|
|
38
|
+
'apply' => DNSimple::Commands::ApplyTemplate,
|
|
39
|
+
|
|
40
|
+
'record:describe' => DNSimple::Commands::DescribeRecord,
|
|
41
|
+
'record:create' => DNSimple::Commands::CreateRecord,
|
|
42
|
+
'record:list' => DNSimple::Commands::ListRecords,
|
|
43
|
+
'record:update' => DNSimple::Commands::UpdateRecord,
|
|
44
|
+
'record:delete' => DNSimple::Commands::DeleteRecord,
|
|
45
|
+
|
|
46
|
+
'template:create' => DNSimple::Commands::CreateTemplate,
|
|
47
|
+
'template:list' => DNSimple::Commands::ListTemplates,
|
|
48
|
+
'template:delete' => DNSimple::Commands::DeleteTemplate,
|
|
49
|
+
|
|
50
|
+
'template:list_records' => DNSimple::Commands::ListTemplateRecords,
|
|
51
|
+
'template:add_record' => DNSimple::Commands::AddTemplateRecord,
|
|
52
|
+
'template:delete_record' => DNSimple::Commands::DeleteTemplateRecord,
|
|
53
|
+
|
|
54
|
+
'contact:create' => DNSimple::Commands::CreateContact,
|
|
55
|
+
'contact:list' => DNSimple::Commands::ListContacts,
|
|
56
|
+
'contact:describe' => DNSimple::Commands::DescribeContact,
|
|
57
|
+
'contact:update' => DNSimple::Commands::UpdateContact,
|
|
58
|
+
'contact:delete' => DNSimple::Commands::DeleteContact,
|
|
59
|
+
|
|
60
|
+
'extended-attributes:list' => DNSimple::Commands::ListExtendedAttributes,
|
|
61
|
+
|
|
62
|
+
'service:list' => DNSimple::Commands::ListServices,
|
|
63
|
+
'service:describe' => DNSimple::Commands::DescribeService,
|
|
64
|
+
|
|
65
|
+
'service:applied' => DNSimple::Commands::ListAppliedServices,
|
|
66
|
+
'service:available' => DNSimple::Commands::ListAvailableServices,
|
|
67
|
+
'service:add' => DNSimple::Commands::AddService,
|
|
68
|
+
'service:remove' => DNSimple::Commands::RemoveService,
|
|
69
|
+
|
|
70
|
+
'certificate:list' => DNSimple::Commands::ListCertificates,
|
|
71
|
+
'certificate:describe' => DNSimple::Commands::DescribeCertificate,
|
|
72
|
+
'certificate:purchase' => DNSimple::Commands::PurchaseCertificate,
|
|
73
|
+
'certificate:submit' => DNSimple::Commands::SubmitCertificate
|
|
74
|
+
}
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
require 'dnsimple/commands/describe_user'
|
|
80
|
+
require 'dnsimple/commands/check_domain'
|
|
81
|
+
require 'dnsimple/commands/create_domain'
|
|
82
|
+
require 'dnsimple/commands/register_domain'
|
|
83
|
+
require 'dnsimple/commands/transfer_domain'
|
|
84
|
+
require 'dnsimple/commands/describe_domain'
|
|
85
|
+
require 'dnsimple/commands/list_domains'
|
|
86
|
+
require 'dnsimple/commands/delete_domain'
|
|
87
|
+
require 'dnsimple/commands/clear_domain'
|
|
88
|
+
require 'dnsimple/commands/apply_template'
|
|
89
|
+
|
|
90
|
+
require 'dnsimple/commands/describe_record'
|
|
91
|
+
require 'dnsimple/commands/create_record'
|
|
92
|
+
require 'dnsimple/commands/list_records'
|
|
93
|
+
require 'dnsimple/commands/update_record'
|
|
94
|
+
require 'dnsimple/commands/delete_record'
|
|
95
|
+
|
|
96
|
+
require 'dnsimple/commands/create_template'
|
|
97
|
+
require 'dnsimple/commands/list_templates'
|
|
98
|
+
require 'dnsimple/commands/delete_template'
|
|
99
|
+
require 'dnsimple/commands/list_template_records'
|
|
100
|
+
require 'dnsimple/commands/add_template_record'
|
|
101
|
+
require 'dnsimple/commands/delete_template_record'
|
|
102
|
+
|
|
103
|
+
require 'dnsimple/commands/create_contact'
|
|
104
|
+
require 'dnsimple/commands/list_contacts'
|
|
105
|
+
require 'dnsimple/commands/describe_contact'
|
|
106
|
+
require 'dnsimple/commands/update_contact'
|
|
107
|
+
require 'dnsimple/commands/delete_contact'
|
|
108
|
+
|
|
109
|
+
require 'dnsimple/commands/list_extended_attributes'
|
|
110
|
+
|
|
111
|
+
require 'dnsimple/commands/list_services'
|
|
112
|
+
require 'dnsimple/commands/describe_service'
|
|
113
|
+
|
|
114
|
+
require 'dnsimple/commands/list_available_services'
|
|
115
|
+
require 'dnsimple/commands/list_applied_services'
|
|
116
|
+
require 'dnsimple/commands/add_service'
|
|
117
|
+
require 'dnsimple/commands/remove_service'
|
|
118
|
+
|
|
119
|
+
require 'dnsimple/commands/list_certificates'
|
|
120
|
+
require 'dnsimple/commands/describe_certificate'
|
|
121
|
+
require 'dnsimple/commands/purchase_certificate'
|
|
122
|
+
require 'dnsimple/commands/submit_certificate'
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
module DNSimple
|
|
2
|
+
class Client
|
|
3
|
+
def self.debug?
|
|
4
|
+
@debug
|
|
5
|
+
end
|
|
6
|
+
def self.debug=(debug)
|
|
7
|
+
@debug = debug
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def self.username
|
|
11
|
+
raise RuntimeError, "You must set your username first: DNSimple::Client.username = 'username'" unless defined?(@@username)
|
|
12
|
+
@@username
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def self.username=(username)
|
|
16
|
+
@@username = username
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def self.password
|
|
20
|
+
raise RuntimeError, "You must set your password first: DNSimple::Client.password = 'password'" unless defined?(@@password)
|
|
21
|
+
@@password
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def self.password=(password)
|
|
25
|
+
@@password = password
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def self.credentials
|
|
29
|
+
{:username => self.username, :password => self.password}
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def self.base_uri
|
|
33
|
+
@@base_uri ||= "https://dnsimple.com"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def self.base_uri=(base_uri)
|
|
37
|
+
@@base_uri = base_uri ? base_uri.gsub(/\/$/, '') : nil
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def self.load_credentials_if_necessary
|
|
41
|
+
load_credentials unless credentials_loaded?
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def self.config_path
|
|
45
|
+
ENV['DNSIMPLE_CONFIG'] || '~/.dnsimple'
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def self.load_credentials(path=config_path)
|
|
49
|
+
begin
|
|
50
|
+
credentials = YAML.load(File.new(File.expand_path(path)))
|
|
51
|
+
self.username = credentials['username']
|
|
52
|
+
self.password = credentials['password']
|
|
53
|
+
self.base_uri = credentials['site']
|
|
54
|
+
@@credentials_loaded = true
|
|
55
|
+
"Credentials loaded from #{path}"
|
|
56
|
+
rescue
|
|
57
|
+
puts "Error loading your credentials: #{$!.message}"
|
|
58
|
+
exit 1
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def self.credentials_loaded?
|
|
63
|
+
(@@credentials_loaded ||= false) or (defined?(@@username) and defined?(@@password))
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def self.standard_options
|
|
67
|
+
{:format => :json, :headers => {'Accept' => 'application/json'}}
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def self.standard_options_with_credentials
|
|
71
|
+
standard_options.merge({:basic_auth => credentials})
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require 'dnsimple/command'
|
|
2
|
+
|
|
3
|
+
module DNSimple
|
|
4
|
+
module Commands
|
|
5
|
+
class AddService < Command
|
|
6
|
+
def execute(args, options={})
|
|
7
|
+
domain_name = args.shift
|
|
8
|
+
domain = Domain.find(domain_name)
|
|
9
|
+
short_name = args.shift
|
|
10
|
+
service = Service.find(short_name)
|
|
11
|
+
domain.add_service(short_name)
|
|
12
|
+
say "Added #{service.name} to #{domain_name}"
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module DNSimple
|
|
2
|
+
module Commands
|
|
3
|
+
class AddTemplateRecord
|
|
4
|
+
def execute(args, options={})
|
|
5
|
+
short_name = args.shift
|
|
6
|
+
record_name = args.shift
|
|
7
|
+
record_type = args.shift
|
|
8
|
+
content = args.shift
|
|
9
|
+
ttl = args.shift
|
|
10
|
+
|
|
11
|
+
template = Template.find(short_name)
|
|
12
|
+
record = TemplateRecord.create(template.short_name, record_name, record_type, content, :ttl => ttl, :prio => options[:prio])
|
|
13
|
+
|
|
14
|
+
puts "Created #{record.record_type} with content '#{record.content}' record for template #{template.name}"
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module DNSimple
|
|
2
|
+
module Commands
|
|
3
|
+
class ApplyTemplate
|
|
4
|
+
def execute(args, options={})
|
|
5
|
+
domain_name = args.shift
|
|
6
|
+
template_name = args.shift
|
|
7
|
+
|
|
8
|
+
domain = Domain.find(domain_name)
|
|
9
|
+
domain.apply(template_name)
|
|
10
|
+
|
|
11
|
+
puts "Applied template #{template_name} to #{domain.name}"
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module DNSimple
|
|
2
|
+
module Commands
|
|
3
|
+
class ClearDomain
|
|
4
|
+
def execute(args, options={})
|
|
5
|
+
name = args.shift
|
|
6
|
+
|
|
7
|
+
records = Record.all(name)
|
|
8
|
+
records.each do |record|
|
|
9
|
+
record.delete
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
puts "Deleted #{records.length} records from #{name}"
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|