class Dnsmadeeasyapi

Attributes

base_uri[RW]

Public Class Methods

new(api_key, api_secret, sandbox = false) click to toggle source
# File lib/dnsmadeeasyapi-good.rb, line 11
def initialize (api_key, api_secret, sandbox = false)
  raise "api_key is undefined" unless api_key
  raise "api_secret is undefined" unless api_secret

  @api_key = api_key
  @api_secret = api_secret

  if sandbox
    self.base_uri = 'https://api.sandbox.dnsmadeeasy.com/V2.0'
  else
    self.base_uri = 'https://api.dnsmadeeasy.com/V2.0'
  end
end

Public Instance Methods

create_a_record(domain_name, name, value, options = {}) click to toggle source
# File lib/dnsmadeeasyapi-good.rb, line 83
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/dnsmadeeasyapi-good.rb, line 88
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/dnsmadeeasyapi-good.rb, line 103
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/dnsmadeeasyapi-good.rb, line 49
def create_domain(domain_name)
  create_domains([domain_name])
end
create_domains(names) click to toggle source
# File lib/dnsmadeeasyapi-good.rb, line 45
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/dnsmadeeasyapi-good.rb, line 128
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/dnsmadeeasyapi-good.rb, line 117
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/dnsmadeeasyapi-good.rb, line 108
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/dnsmadeeasyapi-good.rb, line 93
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/dnsmadeeasyapi-good.rb, line 78
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_spf_record(domain_name, name, value, options = {}) click to toggle source
# File lib/dnsmadeeasyapi-good.rb, line 113
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/dnsmadeeasyapi-good.rb, line 123
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/dnsmadeeasyapi-good.rb, line 98
def create_txt_record(domain_name, name, value, options = {})
  # todo: match TXT value
  create_record domain_name, name, "TXT", value, options
end
delete_domain(domain_name) click to toggle source
# File lib/dnsmadeeasyapi-good.rb, line 41
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/dnsmadeeasyapi-good.rb, line 74
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/dnsmadeeasyapi-good.rb, line 68
def delete_records(domain_name, ids = [])
  id = get_id_by_domain(domain_name)

  delete "/dns/managed/#{id}/records/", ids
end
domain(domain_name) click to toggle source
# File lib/dnsmadeeasyapi-good.rb, line 37
def domain(domain_name)
  get "/dns/managed/#{get_id_by_domain(domain_name)}"
end
domains() click to toggle source
# File lib/dnsmadeeasyapi-good.rb, line 33
def domains
  get '/dns/managed/'
end
find_record_id(domain_name, name, type) click to toggle source
# File lib/dnsmadeeasyapi-good.rb, line 61
def find_record_id(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/dnsmadeeasyapi-good.rb, line 29
def get_id_by_domain(domain_name)
  get("/dns/managed/id/#{domain_name}")['id']
end
records_for(domain_name) click to toggle source

————- RECORDS ————-


# File lib/dnsmadeeasyapi-good.rb, line 57
def records_for(domain_name)
  get "/dns/managed/#{get_id_by_domain(domain_name)}/records"
end
update_record(domain, record_id, name, type, value, options = {}) click to toggle source
# File lib/dnsmadeeasyapi-good.rb, line 133
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

Private Instance Methods

delete(path, body = nil) click to toggle source
# File lib/dnsmadeeasyapi-good.rb, line 146
def delete(path, body = nil)
  request(path) do |uri|
    req = Net::HTTP::Delete.new(uri.path)
    req.body = body.to_json if body
    req
  end
end
get(path) click to toggle source
# File lib/dnsmadeeasyapi-good.rb, line 140
def get(path)
  request(path) do |uri|
    Net::HTTP::Get.new(uri.path)
  end
end
post(path, body) click to toggle source
# File lib/dnsmadeeasyapi-good.rb, line 162
def post(path, body)
  request(path) do |uri|
    req = Net::HTTP::Post.new(uri.path)
    req.body = body.to_json
    req
  end
end
put(path, body = nil) click to toggle source
# File lib/dnsmadeeasyapi-good.rb, line 154
def put(path, body = nil)
  request(path) do |uri|
    req = Net::HTTP::Put.new(uri.path)
    req.body = body.to_json if body
    req
  end
end
request(path) { |uri| ... } click to toggle source
# File lib/dnsmadeeasyapi-good.rb, line 170
def request(path)
  uri = URI("#{base_uri}#{path}")

  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true

  request = yield(uri)

  request_headers.each do |key, value|
    request[key] = value
  end

  response = http.request(request)

  JSON.parse(response.body)
end
request_headers() click to toggle source
# File lib/dnsmadeeasyapi-good.rb, line 187
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