class DnsMadeEasy::Api::Client
Attributes
api_key[R]
api_secret[R]
base_uri[RW]
request_limit[R]
requests_remaining[R]
Public Class Methods
new(api_key, api_secret, sandbox = false, options = {})
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 26 def initialize(api_key, api_secret, sandbox = false, options = {}) fail 'api_key is undefined' unless api_key fail 'api_secret is undefined' unless api_secret @api_key = api_key @api_secret = api_secret @options = options @requests_remaining = -1 @request_limit = -1 sandbox ? on_sandbox : on_production end
public_operations()
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 15 def public_operations (new('a', 'b').methods - Object.methods).map(&:to_s).reject { |r| r =~ /[=]$|^(api_|on_|request)/ }.sort end
Public Instance Methods
create_a_record(domain_name, name, value, options = {})
click to toggle source
Specific record types
# File lib/dnsmadeeasy/api/client.rb, line 128 def create_a_record(domain_name, name, value, options = {}) # TODO: match IPv4 for value create_record domain_name, name, 'A', value, options end
create_aaaa_record(domain_name, name, value, options = {})
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 133 def create_aaaa_record(domain_name, name, value, options = {}) # TODO: match IPv6 for value create_record domain_name, name, 'AAAA', value, options end
create_cname_record(domain_name, name, value, options = {})
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 148 def create_cname_record(domain_name, name, value, options = {}) # TODO: match CNAME value create_record domain_name, name, 'CNAME', value, options end
create_domain(domain_name)
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 71 def create_domain(domain_name) create_domains([domain_name]) end
create_domains(names)
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 67 def create_domains(names) post('/dns/managed/', names: names) end
create_httpred_record(domain_name, name, value, redirectType = 'STANDARD - 302', description = '', keywords = '', title = '', options = {})
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 172 def create_httpred_record(domain_name, name, value, redirectType = 'STANDARD - 302', description = '', keywords = '', title = '', options = {}) options.merge!('redirectType' => redirectType, 'description' => description, 'keywords' => keywords, 'title' => title) create_record domain_name, name, 'HTTPRED', value, options end
create_mx_record(domain_name, name, priority, value, options = {})
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 162 def create_mx_record(domain_name, name, priority, value, options = {}) options.merge!('mxLevel' => priority) create_record domain_name, name, 'MX', value, options end
create_ns_record(domain_name, name, value, options = {})
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 153 def create_ns_record(domain_name, name, value, options = {}) # TODO: match domainname for value create_record domain_name, name, 'NS', value, options end
create_ptr_record(domain_name, name, value, options = {})
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 138 def create_ptr_record(domain_name, name, value, options = {}) # TODO: match PTR value create_record domain_name, name, 'PTR', value, options end
create_record(domain_name, name, type, value, options = {})
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 121 def create_record(domain_name, name, type, value, options = {}) body = { 'name' => name, 'type' => type, 'value' => value, 'ttl' => 3600, 'gtdLocation' => 'DEFAULT' } post "/dns/managed/#{get_id_by_domain(domain_name)}/records/", body.merge(options) end
create_secondary_domain(domain_name, ip_set_id)
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 213 def create_secondary_domain(domain_name, ip_set_id) domains = [domain_name] create_secondary_domains(domains, ip_set_id) end
create_secondary_domains(domain_names, ip_set_id)
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 208 def create_secondary_domains(domain_names, ip_set_id) body = { names: domain_names, ipSetId: ip_set_id } post '/dns/secondary', body end
create_secondary_ip_set(name, ips)
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 248 def create_secondary_ip_set(name, ips) body = { name: name, ips: ips } post '/dns/secondary/ipSet', body end
create_spf_record(domain_name, name, value, options = {})
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 158 def create_spf_record(domain_name, name, value, options = {}) create_record domain_name, name, 'SPF', value, options end
create_srv_record(domain_name, name, priority, weight, port, value, options = {})
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 168 def create_srv_record(domain_name, name, priority, weight, port, value, options = {}) options.merge!('priority' => priority, 'weight' => weight, 'port' => port) create_record domain_name, name, 'SRV', value, options end
create_txt_record(domain_name, name, value, options = {})
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 143 def create_txt_record(domain_name, name, value, options = {}) # TODO: match TXT value create_record domain_name, name, 'TXT', value, options end
delete_all_records(domain_name)
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 116 def delete_all_records(domain_name) domain_id = get_id_by_domain(domain_name) delete "/dns/managed/#{domain_id}/records" end
delete_domain(domain_name)
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 63 def delete_domain(domain_name) delete "/dns/managed/#{get_id_by_domain(domain_name)}" end
delete_record(domain_name, record_id)
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 104 def delete_record(domain_name, record_id) delete "/dns/managed/#{get_id_by_domain(domain_name)}/records/#{record_id}/" end
delete_records(domain_name, ids = [])
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 108 def delete_records(domain_name, ids = []) return if ids.empty? domain_id = get_id_by_domain(domain_name) delete "/dns/managed/#{domain_id}/records?ids=#{ids.join(',')}" end
delete_secondary_domain(domain_name)
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 232 def delete_secondary_domain(domain_name) delete "/dns/secondary/#{get_id_by_secondary_domain(domain_name)}" end
delete_secondary_ip_set(ip_set_id)
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 258 def delete_secondary_ip_set(ip_set_id) delete "/dns/secondary/ipSet/#{ip_set_id}" end
domain(domain_name)
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 59 def domain(domain_name) get "/dns/managed/#{get_id_by_domain(domain_name)}" end
domains()
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 55 def domains get '/dns/managed/' end
find_all(domain_name, name, type)
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 85 def find_all(domain_name, name, type) records = records_for(domain_name) return nil unless records records['data'].select { |r| r['name'] == name && r['type'] == type } end
find_first(domain_name, name, type)
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 92 def find_first(domain_name, name, type) records = records_for(domain_name) return nil unless records records['data'].detect { |r| r['name'] == name && r['type'] == type } end
find_record_ids(domain_name, name, type)
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 99 def find_record_ids(domain_name, name, type) records = records_for(domain_name) records['data'].select { |r| r['name'] == name && r['type'] == type }.map { |r| r['id'] } end
get_id_by_domain(domain_name)
click to toggle source
————- DOMAINS ————-
# File lib/dnsmadeeasy/api/client.rb, line 51 def get_id_by_domain(domain_name) get("/dns/managed/id/#{domain_name}")['id'] end
get_id_by_secondary_domain(domain_name)
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 223 def get_id_by_secondary_domain(domain_name) domain_data = secondary_domains['data'].find do |domain| domain['name'] == domain_name end raise NoDomainError, "#{domain_name} does not exist" unless domain_data domain_data['id'] end
on_production(&block)
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 43 def on_production(&block) with_url(::DnsMadeEasy::API_BASE_URL_PRODUCTION, &block) end
on_sandbox(&block)
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 39 def on_sandbox(&block) with_url(::DnsMadeEasy::API_BASE_URL_SANDBOX, &block) end
records_for(domain_name)
click to toggle source
————- RECORDS ————-
# File lib/dnsmadeeasy/api/client.rb, line 79 def records_for(domain_name) get "/dns/managed/#{get_id_by_domain(domain_name)}/records" end
Also aliased as: all
secondary_domain(domain_id)
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 204 def secondary_domain(domain_id) get "/dns/secondary/#{domain_id}" end
secondary_domains()
click to toggle source
——- Secondary Domains ———
# File lib/dnsmadeeasy/api/client.rb, line 200 def secondary_domains get '/dns/secondary' end
secondary_ip_set(ip_set_id)
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 244 def secondary_ip_set(ip_set_id) get "/dns/secondary/ipSet/#{ip_set_id}" end
secondary_ip_sets()
click to toggle source
——- Secondary IpSet ———–
# File lib/dnsmadeeasy/api/client.rb, line 240 def secondary_ip_sets get '/dns/secondary/ipSet' end
update_record(domain, record_id, name, type, value, options = {})
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 177 def update_record(domain, record_id, name, type, value, options = {}) body = { 'name' => name, 'type' => type, 'value' => value, 'ttl' => 3600, 'gtdLocation' => 'DEFAULT', 'id' => record_id } put "/dns/managed/#{get_id_by_domain(domain)}/records/#{record_id}/", body.merge(options) end
update_records(domain, records, options = {})
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 182 def update_records(domain, records, options = {}) body = records.map do |record| { 'id' => record['id'], 'name' => record['name'], 'type' => record['type'], 'value' => record['value'], 'gtdLocation' => record['gtdLocation'], 'ttl' => record['ttl'] }.merge(options) end put "/dns/managed/#{get_id_by_domain(domain)}/records/updateMulti/", body end
update_secondary_domains(domain_ids, ip_set_id)
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 218 def update_secondary_domains(domain_ids, ip_set_id) body = { ids: domain_ids, ipSetId: ip_set_id } put '/dns/secondary', body end
update_secondary_ip_set(ip_set_id, name, ips)
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 253 def update_secondary_ip_set(ip_set_id, name, ips) body = { name: name, id: ip_set_id, ips: ips } put "/dns/secondary/ipSet/#{ip_set_id}", body end
Private Instance Methods
delete(path, body = nil)
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 270 def delete(path, body = nil) request(path) do |uri| req = Net::HTTP::Delete.new(uri) req.body = body.to_json if body req end end
get(path)
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 264 def get(path) request(path) do |uri| Net::HTTP::Get.new(uri) end end
post(path, body)
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 286 def post(path, body) request(path) do |uri| req = Net::HTTP::Post.new(uri) req.body = body.to_json req end end
process_rate_limits(response)
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 325 def process_rate_limits(response) response.each_header do |header, value| @requests_remaining = value.to_i if header == 'x-dnsme-requestsremaining' @request_limit = value.to_i if header == 'x-dnsme-requestlimit' end end
process_response!(response)
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 312 def process_response!(response) response.value # raise Net::HTTPServerException unless response was 2xx process_rate_limits(response) unparsed_json = response.body.to_s.empty? ? '{}' : response.body Hashie::Mash.new(JSON.parse(unparsed_json)) rescue Net::HTTPServerException => e if e.message =~ /403.*forbidden/i raise ::DnsMadeEasy::AuthenticationError, e else raise e end end
put(path, body = nil)
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 278 def put(path, body = nil) request(path) do |uri| req = Net::HTTP::Put.new(uri) req.body = body.to_json if body req end end
request(path) { |uri| ... }
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 294 def request(path) uri = URI("#{base_uri}#{path}") http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE if @options.key?(:ssl_verify_none) http.open_timeout = @options[:open_timeout] if @options.key?(:open_timeout) http.read_timeout = @options[:read_timeout] if @options.key?(:read_timeout) request = yield(uri) request_headers.each do |key, value| request[key] = value end process_response!(http.request(request)) end
request_headers()
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 332 def request_headers request_date = Time.now.httpdate hmac = OpenSSL::HMAC.hexdigest('sha1', @api_secret, request_date) { 'Accept' => 'application/json', 'x-dnsme-apiKey' => @api_key, 'x-dnsme-requestDate' => request_date, 'x-dnsme-hmac' => hmac } end
with_url(url) { || ... }
click to toggle source
# File lib/dnsmadeeasy/api/client.rb, line 343 def with_url(url) old_value = base_uri self.base_uri = url if block_given? yield self.base_uri = old_value end self end