dnsmadeeasy 0.3.2 → 0.3.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +2 -0
- data/.rubocop_todo.yml +174 -0
- data/.travis.yml +8 -4
- data/Gemfile +2 -0
- data/README.md +133 -31
- data/Rakefile +8 -7
- data/bin/console +1 -0
- data/dnsmadeeasy.gemspec +42 -28
- data/exe/dme +1 -3
- data/lib/dme.rb +9 -5
- data/lib/dnsmadeeasy.rb +18 -8
- data/lib/dnsmadeeasy/api/client.rb +86 -49
- data/lib/dnsmadeeasy/credentials.rb +4 -4
- data/lib/dnsmadeeasy/credentials/api_keys.rb +7 -5
- data/lib/dnsmadeeasy/credentials/yaml_file.rb +16 -9
- data/lib/dnsmadeeasy/dme.rb +2 -4
- data/lib/dnsmadeeasy/runner.rb +119 -104
- data/lib/dnsmadeeasy/version.rb +3 -1
- metadata +74 -34
data/bin/console
CHANGED
data/dnsmadeeasy.gemspec
CHANGED
@@ -1,37 +1,50 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
lib = File.expand_path('
|
3
|
+
lib = File.expand_path('lib', __dir__)
|
4
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
5
|
require 'dnsmadeeasy/version'
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
7
|
+
# rubocop:todo Naming/HeredocDelimiterCase
|
8
|
+
DnsMadeEasy::DESCRIPTION = <<~eof
|
9
|
+
This is an authoratative and fully-featured API client for the DNS Provider "DnsMadeEasy.com".
|
10
|
+
|
11
|
+
This library offers both a rich Ruby API that you can use to automate DNS record management, as well
|
12
|
+
as a rich CLI interface with the command line executable "dme" installed when you install the gem.
|
13
|
+
The gem additionally supports storing credentials in the ~/.dnsmadeeasy/credentials.yml
|
14
|
+
file, supports multiple accounts, encryption, and more.
|
15
|
+
|
16
|
+
If you are using Chef consider using the "dnsmadeeasy" Chef Cookbook, while uses this gem behind
|
17
|
+
the scenes: https://supermarket.chef.io/cookbooks/dnsmadeeasy<br />
|
18
|
+
|
19
|
+
ACKNOWLEDGEMENTS:
|
20
|
+
|
21
|
+
1. This gem is based on the original work contributed by Wanelo.com to the
|
22
|
+
now abandonded "dnsmadeeasy-rest-api" client.
|
23
|
+
|
24
|
+
2. We also wish to thank the gem author Phil Cohen who
|
25
|
+
kindly yielded the "dnsmadeeasy" RubyGems namespace to this gem.
|
26
|
+
|
27
|
+
3. We also thank Praneeth Are for contributing the support for secondary domains in 0.3.5.
|
14
28
|
eof
|
15
29
|
|
16
30
|
Gem::Specification.new do |spec|
|
17
31
|
spec.name = 'dnsmadeeasy'
|
18
32
|
spec.version = DnsMadeEasy::VERSION
|
19
|
-
spec.authors = ['Konstantin Gredeskoul', 'Arnoud Vermeer', 'Paul Henry', 'James Hart', 'Phil Cohen']
|
33
|
+
spec.authors = ['Konstantin Gredeskoul', 'Arnoud Vermeer', 'Paul Henry', 'James Hart', 'Phil Cohen', 'Praneeth Are']
|
20
34
|
spec.email = %w(kigster@gmail.com letuboy@gmail.com hjhart@gmail.com)
|
21
35
|
spec.summary = DnsMadeEasy::DESCRIPTION
|
22
36
|
spec.description = DnsMadeEasy::DESCRIPTION
|
23
|
-
|
24
|
-
|
25
|
-
Thank you for using the DnsMadeEasy ruby gem, the Ruby client
|
26
|
-
API for DnsMadeEasy.com's SDK v2. Please note that this gem
|
27
|
-
comes with a command line utility 'dme' which you can use
|
28
|
-
instead of the ruby API if you prefer. Run `dme` with no
|
29
|
-
arguments to see the help message.
|
30
|
-
|
31
|
-
You can store your credentials in a YAML file in your home
|
32
|
-
directory. For more information, please see README at:
|
33
|
-
https://github.com/kigster/dnsmadeeasy
|
37
|
+
# rubocop:todo Naming/HeredocDelimiterNaming
|
38
|
+
spec.post_install_message = <<~EOF
|
39
|
+
Thank you for using the DnsMadeEasy ruby gem, the Ruby client
|
40
|
+
API for DnsMadeEasy.com's SDK v2. Please note that this gem
|
41
|
+
comes with a rich command line utility 'dme' which you can use
|
42
|
+
instead of the ruby API if you prefer. Run `dme` with no
|
43
|
+
arguments to see the help message.
|
34
44
|
|
45
|
+
You can also store (multi-account) credentials in a YAML file in
|
46
|
+
your home directory. For more information, please see README at:
|
47
|
+
https://github.com/kigster/dnsmadeeasy
|
35
48
|
EOF
|
36
49
|
|
37
50
|
spec.homepage = 'https://github.com/kigster/dnsmadeeasy'
|
@@ -40,24 +53,25 @@ https://github.com/kigster/dnsmadeeasy
|
|
40
53
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
41
54
|
f.match(%r{^(test|spec|features)/})
|
42
55
|
end
|
43
|
-
|
56
|
+
|
44
57
|
spec.bindir = 'exe'
|
45
58
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
46
59
|
spec.require_paths = ['lib']
|
47
60
|
|
48
|
-
spec.add_dependency 'sym'
|
49
|
-
spec.add_dependency 'hashie'
|
50
|
-
spec.add_dependency 'colored2'
|
51
61
|
spec.add_dependency 'awesome_print'
|
62
|
+
spec.add_dependency 'colored2'
|
63
|
+
spec.add_dependency 'hashie'
|
64
|
+
spec.add_dependency 'sym'
|
52
65
|
|
53
|
-
spec.add_development_dependency 'yard'
|
54
|
-
spec.add_development_dependency 'simplecov'
|
55
|
-
spec.add_development_dependency 'webmock'
|
56
66
|
spec.add_development_dependency 'bundler'
|
57
67
|
spec.add_development_dependency 'rake'
|
68
|
+
spec.add_development_dependency 'relaxed-rubocop'
|
58
69
|
spec.add_development_dependency 'rspec'
|
59
70
|
spec.add_development_dependency 'rspec-its'
|
60
71
|
spec.add_development_dependency 'rubocop'
|
72
|
+
spec.add_development_dependency 'simplecov'
|
73
|
+
spec.add_development_dependency 'webmock'
|
74
|
+
spec.add_development_dependency 'yard'
|
61
75
|
|
62
76
|
# spec.add_development_dependency 'aruba'
|
63
77
|
end
|
data/exe/dme
CHANGED
data/lib/dme.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'dnsmadeeasy'
|
2
4
|
|
3
5
|
module DME
|
@@ -6,12 +8,14 @@ module DME
|
|
6
8
|
::DnsMadeEasy::Api::Client.new(key, secret)
|
7
9
|
end
|
8
10
|
|
11
|
+
# rubocop:todo Style/MissingRespondToMissing
|
12
|
+
# rubocop:todo Style/MethodMissingSuper
|
9
13
|
def method_missing(method, *args, &block)
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
puts "Error: #{e.message}"
|
14
|
-
end
|
14
|
+
DnsMadeEasy.send(method, *args, &block)
|
15
|
+
rescue NameError => e
|
16
|
+
puts "Error: #{e.message}"
|
15
17
|
end
|
18
|
+
# rubocop:enable Style/MethodMissingSuper
|
19
|
+
# rubocop:enable Style/MissingRespondToMissing
|
16
20
|
end
|
17
21
|
end
|
data/lib/dnsmadeeasy.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module DnsMadeEasy
|
2
4
|
API_BASE_URL_PRODUCTION = 'https://api.dnsmadeeasy.com/V2.0'
|
3
|
-
API_BASE_URL_SANDBOX = 'https://
|
5
|
+
API_BASE_URL_SANDBOX = 'https://api.sandbox.dnsmadeeasy.com/V2.0'
|
4
6
|
end
|
5
7
|
|
6
8
|
require 'dnsmadeeasy/version'
|
@@ -22,6 +24,8 @@ module DnsMadeEasy
|
|
22
24
|
end
|
23
25
|
class NoSuchAccountError < Error;
|
24
26
|
end
|
27
|
+
class NoDomainError < Error;
|
28
|
+
end
|
25
29
|
|
26
30
|
class << self
|
27
31
|
attr_accessor :default_api_key,
|
@@ -36,9 +40,10 @@ module DnsMadeEasy
|
|
36
40
|
encryption_key = nil)
|
37
41
|
|
38
42
|
credentials = ::DnsMadeEasy::Credentials.keys_from_file(
|
39
|
-
file:
|
40
|
-
account:
|
41
|
-
encryption_key: encryption_key
|
43
|
+
file: file || ::DnsMadeEasy::Credentials.default_credentials_path(user: ENV['USER']),
|
44
|
+
account: account,
|
45
|
+
encryption_key: encryption_key
|
46
|
+
)
|
42
47
|
if credentials
|
43
48
|
configure do |config|
|
44
49
|
config.api_key = credentials.api_key
|
@@ -53,8 +58,8 @@ module DnsMadeEasy
|
|
53
58
|
account: nil,
|
54
59
|
encryption_key: nil)
|
55
60
|
|
56
|
-
DnsMadeEasy::Credentials.keys_from_file file:
|
57
|
-
account:
|
61
|
+
DnsMadeEasy::Credentials.keys_from_file file: file,
|
62
|
+
account: account,
|
58
63
|
encryption_key: encryption_key
|
59
64
|
end
|
60
65
|
|
@@ -75,17 +80,20 @@ module DnsMadeEasy
|
|
75
80
|
end
|
76
81
|
|
77
82
|
def create_client(sandbox = false,
|
78
|
-
api_key:
|
79
|
-
api_secret:
|
83
|
+
api_key: default_api_key,
|
84
|
+
api_secret: default_api_secret,
|
80
85
|
|
81
86
|
**options)
|
82
87
|
raise APIKeyAndSecretMissingError, 'Please set #api_key and #api_secret' unless api_key && api_secret
|
88
|
+
|
83
89
|
::DnsMadeEasy::Api::Client.new(api_key, api_secret, sandbox, **options)
|
84
90
|
end
|
85
91
|
|
86
92
|
# Basically delegate it all to the Client instance
|
87
93
|
# if the method call is supported.
|
88
94
|
#
|
95
|
+
# rubocop:todo Style/MissingRespondToMissing
|
96
|
+
# rubocop:todo Style/MethodMissingSuper
|
89
97
|
def method_missing(method, *args, &block)
|
90
98
|
if client.respond_to?(method)
|
91
99
|
client.send(method, *args, &block)
|
@@ -93,5 +101,7 @@ module DnsMadeEasy
|
|
93
101
|
super(method, *args, &block)
|
94
102
|
end
|
95
103
|
end
|
104
|
+
# rubocop:enable Style/MethodMissingSuper
|
105
|
+
# rubocop:enable Style/MissingRespondToMissing
|
96
106
|
end
|
97
107
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'time'
|
2
4
|
require 'openssl'
|
3
5
|
require 'json'
|
@@ -9,7 +11,6 @@ require 'dnsmadeeasy/credentials'
|
|
9
11
|
module DnsMadeEasy
|
10
12
|
module Api
|
11
13
|
class Client
|
12
|
-
|
13
14
|
class << self
|
14
15
|
def public_operations
|
15
16
|
(new('a', 'b').methods - Object.methods).map(&:to_s).reject { |r| r =~ /[=]$|^(api_|on_|request)/ }.sort
|
@@ -22,7 +23,6 @@ module DnsMadeEasy
|
|
22
23
|
:api_key,
|
23
24
|
:api_secret
|
24
25
|
|
25
|
-
|
26
26
|
def initialize(api_key, api_secret, sandbox = false, options = {})
|
27
27
|
fail 'api_key is undefined' unless api_key
|
28
28
|
fail 'api_secret is undefined' unless api_secret
|
@@ -36,17 +36,14 @@ module DnsMadeEasy
|
|
36
36
|
sandbox ? on_sandbox : on_production
|
37
37
|
end
|
38
38
|
|
39
|
-
|
40
39
|
def on_sandbox(&block)
|
41
40
|
with_url(::DnsMadeEasy::API_BASE_URL_SANDBOX, &block)
|
42
41
|
end
|
43
42
|
|
44
|
-
|
45
43
|
def on_production(&block)
|
46
44
|
with_url(::DnsMadeEasy::API_BASE_URL_PRODUCTION, &block)
|
47
45
|
end
|
48
46
|
|
49
|
-
|
50
47
|
# -----------------------------------
|
51
48
|
# ------------- DOMAINS -------------
|
52
49
|
# -----------------------------------
|
@@ -55,32 +52,26 @@ module DnsMadeEasy
|
|
55
52
|
get("/dns/managed/id/#{domain_name}")['id']
|
56
53
|
end
|
57
54
|
|
58
|
-
|
59
55
|
def domains
|
60
56
|
get '/dns/managed/'
|
61
57
|
end
|
62
58
|
|
63
|
-
|
64
59
|
def domain(domain_name)
|
65
60
|
get "/dns/managed/#{get_id_by_domain(domain_name)}"
|
66
61
|
end
|
67
62
|
|
68
|
-
|
69
63
|
def delete_domain(domain_name)
|
70
64
|
delete "/dns/managed/#{get_id_by_domain(domain_name)}"
|
71
65
|
end
|
72
66
|
|
73
|
-
|
74
67
|
def create_domains(names)
|
75
68
|
post('/dns/managed/', names: names)
|
76
69
|
end
|
77
70
|
|
78
|
-
|
79
71
|
def create_domain(domain_name)
|
80
72
|
create_domains([domain_name])
|
81
73
|
end
|
82
74
|
|
83
|
-
|
84
75
|
# -----------------------------------
|
85
76
|
# ------------- RECORDS -------------
|
86
77
|
# -----------------------------------
|
@@ -89,55 +80,49 @@ module DnsMadeEasy
|
|
89
80
|
get "/dns/managed/#{get_id_by_domain(domain_name)}/records"
|
90
81
|
end
|
91
82
|
|
92
|
-
|
93
83
|
alias all records_for
|
94
84
|
|
95
|
-
|
96
85
|
def find_all(domain_name, name, type)
|
97
86
|
records = records_for(domain_name)
|
98
87
|
return nil unless records
|
88
|
+
|
99
89
|
records['data'].select { |r| r['name'] == name && r['type'] == type }
|
100
90
|
end
|
101
91
|
|
102
|
-
|
103
92
|
def find_first(domain_name, name, type)
|
104
93
|
records = records_for(domain_name)
|
105
94
|
return nil unless records
|
95
|
+
|
106
96
|
records['data'].detect { |r| r['name'] == name && r['type'] == type }
|
107
97
|
end
|
108
98
|
|
109
|
-
|
110
99
|
def find_record_ids(domain_name, name, type)
|
111
100
|
records = records_for(domain_name)
|
112
101
|
records['data'].select { |r| r['name'] == name && r['type'] == type }.map { |r| r['id'] }
|
113
102
|
end
|
114
103
|
|
115
|
-
|
116
104
|
def delete_record(domain_name, record_id)
|
117
105
|
delete "/dns/managed/#{get_id_by_domain(domain_name)}/records/#{record_id}/"
|
118
106
|
end
|
119
107
|
|
120
|
-
|
121
108
|
def delete_records(domain_name, ids = [])
|
122
109
|
return if ids.empty?
|
110
|
+
|
123
111
|
domain_id = get_id_by_domain(domain_name)
|
124
112
|
|
125
113
|
delete "/dns/managed/#{domain_id}/records?ids=#{ids.join(',')}"
|
126
114
|
end
|
127
115
|
|
128
|
-
|
129
116
|
def delete_all_records(domain_name)
|
130
117
|
domain_id = get_id_by_domain(domain_name)
|
131
118
|
delete "/dns/managed/#{domain_id}/records"
|
132
119
|
end
|
133
120
|
|
134
|
-
|
135
121
|
def create_record(domain_name, name, type, value, options = {})
|
136
122
|
body = { 'name' => name, 'type' => type, 'value' => value, 'ttl' => 3600, 'gtdLocation' => 'DEFAULT' }
|
137
123
|
post "/dns/managed/#{get_id_by_domain(domain_name)}/records/", body.merge(options)
|
138
124
|
end
|
139
125
|
|
140
|
-
|
141
126
|
# Specific record types
|
142
127
|
|
143
128
|
def create_a_record(domain_name, name, value, options = {})
|
@@ -145,81 +130,141 @@ module DnsMadeEasy
|
|
145
130
|
create_record domain_name, name, 'A', value, options
|
146
131
|
end
|
147
132
|
|
148
|
-
|
149
133
|
def create_aaaa_record(domain_name, name, value, options = {})
|
150
134
|
# TODO: match IPv6 for value
|
151
135
|
create_record domain_name, name, 'AAAA', value, options
|
152
136
|
end
|
153
137
|
|
154
|
-
|
155
138
|
def create_ptr_record(domain_name, name, value, options = {})
|
156
139
|
# TODO: match PTR value
|
157
140
|
create_record domain_name, name, 'PTR', value, options
|
158
141
|
end
|
159
142
|
|
160
|
-
|
161
143
|
def create_txt_record(domain_name, name, value, options = {})
|
162
144
|
# TODO: match TXT value
|
163
145
|
create_record domain_name, name, 'TXT', value, options
|
164
146
|
end
|
165
147
|
|
166
|
-
|
167
148
|
def create_cname_record(domain_name, name, value, options = {})
|
168
149
|
# TODO: match CNAME value
|
169
150
|
create_record domain_name, name, 'CNAME', value, options
|
170
151
|
end
|
171
152
|
|
172
|
-
|
173
153
|
def create_ns_record(domain_name, name, value, options = {})
|
174
154
|
# TODO: match domainname for value
|
175
155
|
create_record domain_name, name, 'NS', value, options
|
176
156
|
end
|
177
157
|
|
178
|
-
|
179
158
|
def create_spf_record(domain_name, name, value, options = {})
|
180
159
|
create_record domain_name, name, 'SPF', value, options
|
181
160
|
end
|
182
161
|
|
183
|
-
|
184
162
|
def create_mx_record(domain_name, name, priority, value, options = {})
|
185
163
|
options.merge!('mxLevel' => priority)
|
186
164
|
|
187
165
|
create_record domain_name, name, 'MX', value, options
|
188
166
|
end
|
189
167
|
|
190
|
-
|
191
168
|
def create_srv_record(domain_name, name, priority, weight, port, value, options = {})
|
192
169
|
options.merge!('priority' => priority, 'weight' => weight, 'port' => port)
|
193
170
|
create_record domain_name, name, 'SRV', value, options
|
194
171
|
end
|
195
172
|
|
196
|
-
|
173
|
+
# rubocop:todo Naming/MethodParameterName
|
174
|
+
# rubocop:todo Naming/VariableName
|
197
175
|
def create_httpred_record(domain_name, name, value, redirectType = 'STANDARD - 302', description = '', keywords = '', title = '', options = {})
|
176
|
+
# rubocop:enable Naming/VariableName
|
177
|
+
# rubocop:todo Naming/VariableName
|
198
178
|
options.merge!('redirectType' => redirectType, 'description' => description, 'keywords' => keywords, 'title' => title)
|
179
|
+
# rubocop:enable Naming/VariableName
|
199
180
|
create_record domain_name, name, 'HTTPRED', value, options
|
200
181
|
end
|
201
|
-
|
182
|
+
# rubocop:enable Naming/MethodParameterName
|
202
183
|
|
203
184
|
def update_record(domain, record_id, name, type, value, options = {})
|
204
185
|
body = { 'name' => name, 'type' => type, 'value' => value, 'ttl' => 3600, 'gtdLocation' => 'DEFAULT', 'id' => record_id }
|
205
186
|
put "/dns/managed/#{get_id_by_domain(domain)}/records/#{record_id}/", body.merge(options)
|
206
187
|
end
|
207
188
|
|
208
|
-
|
209
189
|
def update_records(domain, records, options = {})
|
210
190
|
body = records.map do |record|
|
211
191
|
{
|
212
|
-
'id'
|
213
|
-
'name'
|
214
|
-
'type'
|
215
|
-
'value'
|
192
|
+
'id' => record['id'],
|
193
|
+
'name' => record['name'],
|
194
|
+
'type' => record['type'],
|
195
|
+
'value' => record['value'],
|
216
196
|
'gtdLocation' => record['gtdLocation'],
|
217
|
-
'ttl'
|
197
|
+
'ttl' => record['ttl']
|
218
198
|
}.merge(options)
|
219
199
|
end
|
220
200
|
put "/dns/managed/#{get_id_by_domain(domain)}/records/updateMulti/", body
|
221
201
|
end
|
222
202
|
|
203
|
+
# -----------------------------------
|
204
|
+
# ------- Secondary Domains ---------
|
205
|
+
# -----------------------------------
|
206
|
+
|
207
|
+
def secondary_domains
|
208
|
+
get '/dns/secondary'
|
209
|
+
end
|
210
|
+
|
211
|
+
def secondary_domain(domain_id)
|
212
|
+
get "/dns/secondary/#{domain_id}"
|
213
|
+
end
|
214
|
+
|
215
|
+
def create_secondary_domains(domain_names, ip_set_id)
|
216
|
+
body = { names: domain_names, ipSetId: ip_set_id }
|
217
|
+
post '/dns/secondary', body
|
218
|
+
end
|
219
|
+
|
220
|
+
def create_secondary_domain(domain_name, ip_set_id)
|
221
|
+
domains = [domain_name]
|
222
|
+
create_secondary_domains(domains, ip_set_id)
|
223
|
+
end
|
224
|
+
|
225
|
+
def update_secondary_domains(domain_ids, ip_set_id)
|
226
|
+
body = { ids: domain_ids, ipSetId: ip_set_id }
|
227
|
+
put '/dns/secondary', body
|
228
|
+
end
|
229
|
+
|
230
|
+
def get_id_by_secondary_domain(domain_name)
|
231
|
+
domain_data = secondary_domains['data'].find do |domain|
|
232
|
+
domain['name'] == domain_name
|
233
|
+
end
|
234
|
+
raise NoDomainError, "#{domain_name} does not exist" unless domain_data
|
235
|
+
|
236
|
+
domain_data['id']
|
237
|
+
end
|
238
|
+
|
239
|
+
def delete_secondary_domain(domain_name)
|
240
|
+
delete "/dns/secondary/#{get_id_by_secondary_domain(domain_name)}"
|
241
|
+
end
|
242
|
+
|
243
|
+
# -----------------------------------
|
244
|
+
# ------- Secondary IpSet -----------
|
245
|
+
# -----------------------------------
|
246
|
+
|
247
|
+
def secondary_ip_sets
|
248
|
+
get '/dns/secondary/ipSet'
|
249
|
+
end
|
250
|
+
|
251
|
+
def secondary_ip_set(ip_set_id)
|
252
|
+
get "/dns/secondary/ipSet/#{ip_set_id}"
|
253
|
+
end
|
254
|
+
|
255
|
+
def create_secondary_ip_set(name, ips)
|
256
|
+
body = { name: name, ips: ips }
|
257
|
+
post '/dns/secondary/ipSet', body
|
258
|
+
end
|
259
|
+
|
260
|
+
def update_secondary_ip_set(ip_set_id, name, ips)
|
261
|
+
body = { name: name, id: ip_set_id, ips: ips }
|
262
|
+
put "/dns/secondary/ipSet/#{ip_set_id}", body
|
263
|
+
end
|
264
|
+
|
265
|
+
def delete_secondary_ip_set(ip_set_id)
|
266
|
+
delete "/dns/secondary/ipSet/#{ip_set_id}"
|
267
|
+
end
|
223
268
|
|
224
269
|
private
|
225
270
|
|
@@ -229,7 +274,6 @@ module DnsMadeEasy
|
|
229
274
|
end
|
230
275
|
end
|
231
276
|
|
232
|
-
|
233
277
|
def delete(path, body = nil)
|
234
278
|
request(path) do |uri|
|
235
279
|
req = Net::HTTP::Delete.new(uri)
|
@@ -238,7 +282,6 @@ module DnsMadeEasy
|
|
238
282
|
end
|
239
283
|
end
|
240
284
|
|
241
|
-
|
242
285
|
def put(path, body = nil)
|
243
286
|
request(path) do |uri|
|
244
287
|
req = Net::HTTP::Put.new(uri)
|
@@ -247,7 +290,6 @@ module DnsMadeEasy
|
|
247
290
|
end
|
248
291
|
end
|
249
292
|
|
250
|
-
|
251
293
|
def post(path, body)
|
252
294
|
request(path) do |uri|
|
253
295
|
req = Net::HTTP::Post.new(uri)
|
@@ -256,7 +298,6 @@ module DnsMadeEasy
|
|
256
298
|
end
|
257
299
|
end
|
258
300
|
|
259
|
-
|
260
301
|
def request(path)
|
261
302
|
uri = URI("#{base_uri}#{path}")
|
262
303
|
|
@@ -275,7 +316,6 @@ module DnsMadeEasy
|
|
275
316
|
process_response!(http.request(request))
|
276
317
|
end
|
277
318
|
|
278
|
-
|
279
319
|
def process_response!(response)
|
280
320
|
response.value # raise Net::HTTPServerException unless response was 2xx
|
281
321
|
process_rate_limits(response)
|
@@ -283,13 +323,12 @@ module DnsMadeEasy
|
|
283
323
|
Hashie::Mash.new(JSON.parse(unparsed_json))
|
284
324
|
rescue Net::HTTPServerException => e
|
285
325
|
if e.message =~ /403.*forbidden/i
|
286
|
-
raise ::DnsMadeEasy::AuthenticationError
|
326
|
+
raise ::DnsMadeEasy::AuthenticationError, e
|
287
327
|
else
|
288
328
|
raise e
|
289
329
|
end
|
290
330
|
end
|
291
331
|
|
292
|
-
|
293
332
|
def process_rate_limits(response)
|
294
333
|
response.each_header do |header, value|
|
295
334
|
@requests_remaining = value.to_i if header == 'x-dnsme-requestsremaining'
|
@@ -297,21 +336,19 @@ module DnsMadeEasy
|
|
297
336
|
end
|
298
337
|
end
|
299
338
|
|
300
|
-
|
301
339
|
def request_headers
|
302
340
|
request_date = Time.now.httpdate
|
303
341
|
hmac = OpenSSL::HMAC.hexdigest('sha1', @api_secret, request_date)
|
304
342
|
{
|
305
|
-
'Accept'
|
306
|
-
'x-dnsme-apiKey'
|
343
|
+
'Accept' => 'application/json',
|
344
|
+
'x-dnsme-apiKey' => @api_key,
|
307
345
|
'x-dnsme-requestDate' => request_date,
|
308
|
-
'x-dnsme-hmac'
|
346
|
+
'x-dnsme-hmac' => hmac
|
309
347
|
}
|
310
348
|
end
|
311
349
|
|
312
|
-
|
313
350
|
def with_url(url)
|
314
|
-
old_value =
|
351
|
+
old_value = base_uri
|
315
352
|
self.base_uri = url
|
316
353
|
if block_given?
|
317
354
|
yield
|