1
0
Fork 0
mirror of https://github.com/fog/fog.git synced 2022-11-09 13:51:43 -05:00
fog--fog/lib/fog/dnsmadeeasy/dns.rb
Paul Thornthwaite 0e1daf3ddd [GH-2711] Replace Fog::Connection with XML shim
Unlike last attempt this replaces Fog::Connection with
Fog::XML::Connection which should be directly compatible.

Fog::Connection is there for old PRs but should be removed real soon.

Providers using JSON should be able to replace "XML" with "Core" within
their code to cut down on the dependency.

If I get the time I may attempt to clean up some but testing with Mock
will mean that is mostly educated guesswork.
2014-02-27 00:54:17 +00:00

134 lines
3.8 KiB
Ruby

require 'fog/dnsmadeeasy/core'
module Fog
module DNS
class DNSMadeEasy < Fog::Service
requires :dnsmadeeasy_api_key, :dnsmadeeasy_secret_key
recognizes :host, :path, :port, :scheme, :persistent
model_path 'fog/dnsmadeeasy/models/dns'
model :record
collection :records
model :zone
collection :zones
request_path 'fog/dnsmadeeasy/requests/dns'
request :list_domains
request :get_domain
request :create_domain
request :delete_domain
request :delete_all_domains
request :list_records
request :create_record
request :update_record
request :get_record
request :delete_record
request :list_secondary
request :delete_all_secondary
request :get_secondary
request :create_secondary
request :update_secondary
request :delete_secondary
class Mock
def self.data
@data ||= Hash.new do |hash, key|
hash[key] = {}
end
end
def self.reset
@data = nil
end
def initialize(options={})
@dnsmadeeasy_api_key = options[:dnsmadeeasy_api_key]
@dnsmadeeasy_secret_key = options[:dnsmadeeasy_secret_key]
end
def data
self.class.data[@dnsmadeeasy_api_key]
end
def reset_data
self.class.data.delete(@dnsmadeeasy_api_key)
end
end
class Real
# Initialize connection to DNS Made Easy
#
# ==== Notes
# options parameter must include values for :dnsmadeeasy_api_key and
# :dnsmadeeasy_secret_key in order to create a connection
#
# ==== Examples
# dns = Fog::DNS::DNSMadeEasy.new(
# :dnsmadeeasy_api_key => your_dnsmadeeasy_api_key,
# :dnsmadeeasy_secret_key => your_dnsmadeeasy_secret_key
# )
#
# ==== Parameters
# * options<~Hash> - config arguments for connection. Defaults to {}.
#
# ==== Returns
# * dns object with connection to aws.
def initialize(options={})
require 'fog/core/parser'
@dnsmadeeasy_api_key = options[:dnsmadeeasy_api_key]
@dnsmadeeasy_secret_key = options[:dnsmadeeasy_secret_key]
@connection_options = options[:connection_options] || {}
@host = options[:host] || 'api.dnsmadeeasy.com'
@persistent = options.fetch(:persistent, true)
@port = options[:port] || 80 #443 Not yet
@scheme = options[:scheme] || 'http' #'https Not yet
@connection = Fog::XML::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options)
end
def reload
@connection.reset
end
private
def request(params)
params[:headers] ||= {}
params[:headers]['x-dnsme-apiKey'] = @dnsmadeeasy_api_key
params[:headers]['x-dnsme-requestDate'] = Fog::Time.now.to_date_header
params[:headers]['x-dnsme-hmac'] = signature(params)
params[:headers]['Accept'] = 'application/json'
params[:headers]['Content-Type'] = 'application/json'
begin
response = @connection.request(params)
rescue Excon::Errors::HTTPStatusError => error
raise case error
when Excon::Errors::NotFound
Fog::DNS::DNSMadeEasy::NotFound.slurp(error)
else
error
end
end
unless response.body.empty?
response.body = Fog::JSON.decode(response.body)
end
response
end
def signature(params)
string_to_sign = params[:headers]['x-dnsme-requestDate']
OpenSSL::HMAC.hexdigest('sha1', @dnsmadeeasy_secret_key, string_to_sign)
end
end
end
end
end