File Coverage

blib/lib/SRS/EPP/Command/Info/Domain.pm
Criterion Covered Total %
statement 1 3 33.3
branch n/a
condition n/a
subroutine 1 1 100.0
pod n/a
total 2 4 50.0


line stmt bran cond sub pod time code
1             package SRS::EPP::Command::Info::Domain;
2              
3 1     1   1975 use Moose;
  0            
  0            
4             extends 'SRS::EPP::Command::Info';
5             use MooseX::Method::Signatures;
6             use Crypt::Password;
7             use SRS::EPP::Session;
8             use XML::EPP::Domain;
9             use Digest::MD5 qw(md5_hex);
10             use Data::Dumper;
11              
12             use XML::EPP::Common;
13             use XML::EPP::Domain::NS::List;
14              
15             my $status_map = {
16             Active => 'ok',
17             PendingRelease => 'pendingRenew',
18             # shouldn't ever need this one
19             Available => '',
20             };
21              
22             # for plugin system to connect
23             sub xmlns {
24             XML::EPP::Domain::Node::xmlns();
25             }
26              
27             method process( SRS::EPP::Session $session ) {
28             $self->session($session);
29             my $epp = $self->message;
30             my $payload = $epp->message->argument->payload;
31              
32             # we're not supporting authInfo, so get out of here with an EPP response
33             if ( $payload->has_auth_info ) {
34             return $self->make_response(code => 2307);
35             }
36              
37             return (
38             XML::SRS::Whois->new(
39             domain => $payload->name->value,
40             full => 0,
41             ),
42             XML::SRS::Domain::Query->new(
43             domain_name_filter => $payload->name->value
44             )
45             );
46             }
47              
48             method notify( SRS::EPP::SRSResponse @rs ) {
49             # check there are two responses
50             my $whois = $rs[0]->message->response;
51             my $domain = $rs[1]->message->response;
52              
53             # if status is available, then the object doesn't exist
54             if ( $whois->status eq 'Available' ) {
55             # since this is available, we already know the result is 'Object does not exist'
56             return $self->make_response(code => 2303);
57             }
58              
59             # if there was no domain, this registrar doesn't have access to it
60             unless ( $domain ) {
61             return $self->make_response(code => 2201);
62             }
63              
64             # we have a domain, therefore we have a full response :)
65             # let's do this one bit at a time
66             my $payload = $self->message->message->argument->payload;
67             # print Dumper($domain);
68              
69             # Status:
70             my @status;
71             if ( $domain->delegate() == 0 ) {
72             push @status, 'inactive';
73             }
74             elsif ( $domain->status eq 'PendingRelease' ) {
75             push @status, 'pendingDelete';
76             }
77             elsif ( defined $domain->locked_date() ) {
78             push @status, qw( serverDeleteProhibited serverHold serverRenewProhibited serverTransferProhibited serverUpdateProhibited );
79             }
80             else {
81             push @status, 'ok';
82             }
83              
84             # get some things out to make it easier on the eye below
85             # @status = map { XML::EPP::Domain::Status->new( status => $_ ) } @status;
86             my @nameservers = map { $_->fqdn } @{$domain->nameservers->nameservers};
87              
88             my $r = XML::EPP::Domain::Info::Response->new(
89             name => $payload->name->value,
90             roid => substr(md5_hex($payload->name->value), 0, 12) . '-DOM',
91             # status => \@status,
92             status => [
93             map { XML::EPP::Domain::Status->new( status => $_ ) } @status
94             ],
95             # registrant # skipping, since contacts can't be seen from EPP
96             # contact # skipping, since contacts can't be seen from EPP
97             ns => XML::EPP::Domain::NS::List->new( ns => [ @nameservers ] ),
98             # host # not doing this
99             client_id => $domain->registrar_id(), # clID
100             # crID => '',
101             created => srs_date_to_epp_date($domain->registered_date()), # crDate
102             expiry_date => srs_date_to_epp_date($domain->billed_until()), # exDate
103             # upID
104             updated => srs_date_to_epp_date($domain->audit->when->begin()), # upDate
105             # trDate
106             # authInfo
107             );
108              
109             return $self->make_response(
110             'Info',
111             code => 1000,
112             payload => $r,
113             );
114             }
115              
116             sub srs_date_to_epp_date {
117             my ($srs) = @_;
118              
119             return
120             $srs->year
121             . '-'
122             . $srs->month
123             . '-'
124             . $srs->day
125             . 'T'
126             . $srs->hour
127             . ':'
128             . $srs->minute
129             . ':'
130             . $srs->second
131             . $srs->tz_offset
132             ;
133             }
134              
135             1;