File Coverage

blib/lib/WWW/DNSMadeEasy.pm
Criterion Covered Total %
statement 29 60 48.3
branch 1 10 10.0
condition n/a
subroutine 10 16 62.5
pod 3 7 42.8
total 43 93 46.2


line stmt bran cond sub pod time code
1             package WWW::DNSMadeEasy;
2             BEGIN {
3 3     3   83857 $WWW::DNSMadeEasy::AUTHORITY = 'cpan:GETTY';
4             }
5             {
6             $WWW::DNSMadeEasy::VERSION = '0.001';
7             }
8             # ABSTRACT: Accessing DNSMadeEasy API
9              
10 3     3   2712 use Moo;
  3         40295  
  3         17  
11 3     3   13266 use DateTime;
  3         899472  
  3         135  
12 3     3   3386 use DateTime::Format::HTTP;
  3         35583  
  3         353  
13 3     3   13210 use Digest::HMAC_SHA1 qw(hmac_sha1 hmac_sha1_hex);
  3         36990  
  3         191  
14 3     3   6114 use LWP::UserAgent;
  3         221594  
  3         130  
15 3     3   37 use HTTP::Request;
  3         6  
  3         81  
16 3     3   4717 use JSON;
  3         75682  
  3         24  
17              
18 3     3   2856 use WWW::DNSMadeEasy::Domain;
  3         12  
  3         2742  
19              
20             our $VERSION ||= '0.0development';
21              
22             has api_key => (
23             is => 'ro',
24             required => 1,
25             );
26              
27             has secret => (
28             is => 'ro',
29             required => 1,
30             );
31              
32             has sandbox => (
33             is => 'ro',
34             default => sub { 0 },
35             );
36              
37             has _http_agent => (
38             is => 'ro',
39             lazy => 1,
40             default => sub {
41             my $self = shift;
42             my $ua = LWP::UserAgent->new;
43             $ua->agent($self->http_agent_name);
44             return $ua;
45             },
46             );
47              
48             has http_agent_name => (
49             is => 'ro',
50             lazy => 1,
51             default => sub { __PACKAGE__.'/'.$VERSION },
52             );
53              
54             sub api_endpoint {
55 0     0 0 0 my ( $self ) = @_;
56 0 0       0 if ($self->sandbox) {
57 0         0 return 'http://api.sandbox.dnsmadeeasy.com/V1.2/';
58             } else {
59 0         0 return 'http://api.dnsmadeeasy.com/V1.2/';
60             }
61             }
62              
63             sub get_request_headers {
64 1     1 0 1510 my ( $self, $dt ) = @_;
65 1 50       6 $dt = DateTime->now->set_time_zone( 'GMT' ) if !$dt;
66 1         63 my $date_string = DateTime::Format::HTTP->format_datetime($dt);
67             return {
68 1         430 'x-dnsme-requestDate' => $date_string,
69             'x-dnsme-apiKey' => $self->api_key,
70             'x-dnsme-hmac' => hmac_sha1_hex($date_string, $self->secret),
71             };
72             }
73              
74             sub request {
75 0     0 0   my ( $self, $method, $path, $data ) = @_;
76 0           my $url = $self->api_endpoint.$path;
77 0           my $request = HTTP::Request->new( $method => $url );
78 0           my $headers = $self->get_request_headers;
79 0           $request->header($_ => $headers->{$_}) for (keys %{$headers});
  0            
80 0           $request->header('Accept' => 'application/json');
81 0 0         if (defined $data) {
82 0           $request->header('Content-Type' => 'application/json');
83 0           $request->content(encode_json($data));
84             }
85 0           my $res = $self->_http_agent->request($request);
86 0 0         if ($res->is_success) {
87 0           return decode_json($res->content);
88             } else {
89 0           die __PACKAGE__.' HTTP request failed: '.$res->status_line, "\n";
90             }
91             }
92              
93             #
94             # DOMAINS
95             #
96              
97 0     0 0   sub path_domains { 'domains' }
98              
99             sub create_domain {
100 0     0 1   my ( $self, $domain_name ) = @_;
101 0           return WWW::DNSMadeEasy::Domain->create({
102             name => $domain_name,
103             dme => $self,
104             });
105             }
106              
107             sub domain {
108 0     0 1   my ( $self, $domain_name ) = @_;
109 0           return WWW::DNSMadeEasy::Domain->new({
110             name => $domain_name,
111             dme => $self,
112             });
113             }
114              
115             sub all_domains {
116 0     0 1   my ( $self ) = @_;
117 0           my $data = $self->request('GET',$self->path_domains);
118 0 0         return if !$data->{list};
119 0           my @domains;
120 0           for (@{$data->{list}}) {
  0            
121 0           push @domains, WWW::DNSMadeEasy::Domain->new({
122             dme => $self,
123             name => $_,
124             });
125             }
126 0           return @domains;
127             }
128              
129             1;
130              
131              
132              
133             __END__