#!/usr/bin/perl

package EPP::whois;

use strict;
use lib('/home/httpd/lib');
use UBILIBET::Debug;
use UBILIBET::Config qw(:path :epp :eurid);
use EURid::Client;
use EURid::Command;
use EURid::Actions;
use EURid::Actions::Domain;
use EURid::Actions::Contact;

use UBILIBET::Log;
our $log = new UBILIBET::Log({'filename' => '/var/log/whois.log', 'screen' => 0, 'write' => 1, 'open' => 0});

use Data::Dumper;
################################################################################

my $nom = $ARGV[0] || die("No s'ha especificat cap domini");
my $domain = {'nom' => $nom, 'extensio' => 'eu' }; 
my $client = new EURid::client({ 
               'server'  => EURID_SERVER_IP,	'port' => EURID_SERVER_PORT,
               'user'    => EURID_USER, 	'password' => EURID_PASSWORD,
               'debug'	 => 0,
             });
	$client->connect(1);
	$client->login();
	
$log->log("Dominio consultado: " .$domain->{'nom'}.".".$domain->{'extensio'});

my ($error, $response, $msg) = EURid::Actions::Domain::info($client, $domain);
if ($error) {
    $log->log("Resultado: ERROR - " .$error->{'num'});
	if ($error->{'num'} eq '2303') {
		print("Dominio no registrado en EURid\n");
		exit();
	} elsif ($error->{'num'} eq '2201') {
		print <<BODY;
		
################################################################################
# EURID WHOIS
################################################################################

La informaci�n de este dominio s�lo esta disponible en la web del registro.
Por favor visita su web:

<a href="http://www1.whois.eu/whois/GetDomainStatus.htm?domainName=$nom" target="_blank">WHOIS EURid</a>

BODY
		exit();
	} else {
		print Dumper($error);
		exit();
	}
}

my $dominiInfo = $response->{'resData'}->{'domain:infData'};
my $handles = {'registrant' => $dominiInfo->{'domain:registrant'}};
$log->log("Resultado: ". $dominiInfo->{'domain:name'});
foreach(@{$dominiInfo->{'domain:contact'}}) {
	$handles->{$_->{'type'}}=$_->{'content'};
}			
my $dns_str = '';
foreach(@{$dominiInfo->{'domain:ns'}->{'domain:hostAttr'}}) {
	$dns_str.=$_->{'domain:hostName'}."\n";
}

my ($error, $response, $msg) = EURid::Actions::Contact::info($client, $handles->{'registrant'});
my $cr = $response->{'resData'}->{'contact:infData'};
if (ref($cr->{'contact:postalInfo'}->{'contact:addr'}->{'contact:street'}) eq 'ARRAY') {
	$cr->{'contact:postalInfo'}->{'contact:addr'}->{'contact:street'} = 
		join ("\n            ", @{$cr->{'contact:postalInfo'}->{'contact:addr'}->{'contact:street'}});
}
my ($error, $response, $msg) = EURid::Actions::Contact::info($client, $handles->{'tech'});
my $ct = $response->{'resData'}->{'contact:infData'};
if (ref($ct->{'contact:postalInfo'}->{'contact:addr'}->{'contact:street'}) eq 'ARRAY') {
	$ct->{'contact:postalInfo'}->{'contact:addr'}->{'contact:street'} = 
		join ("\n            ", @{$ct->{'contact:postalInfo'}->{'contact:addr'}->{'contact:street'}});
}
my $body = <<BODY;
################################################################################
# EURID WHOIS
################################################################################

___[ DOMINIO ]__________________________________________________________________
Nombre:           $dominiInfo->{'domain:name'}
Fecha creaci�n:   $dominiInfo->{'domain:crDate'}
Fecha expiraci�n: $dominiInfo->{'domain:exDate'}

___[ TITULAR ]__________________________________________________________________
Nombre:     $cr->{'contact:postalInfo'}->{'contact:name'} ($cr->{'contact:email'})
Organiz.:   $cr->{'contact:postalInfo'}->{'contact:org'}
Handle:     $handles->{'registrant'}
Direcci�n:  $cr->{'contact:postalInfo'}->{'contact:addr'}->{'contact:street'}
            $cr->{'contact:postalInfo'}->{'contact:addr'}->{'contact:pc'}, $cr->{'contact:postalInfo'}->{'contact:addr'}->{'contact:city'}
            $cr->{'contact:postalInfo'}->{'contact:addr'}->{'contact:cc'}
Tel�fono:   $cr->{'contact:voice'}
Fax:        $cr->{'contact:fax'}

___[ CONTACTO T�CNICO ]_________________________________________________________
Nombre:     $ct->{'contact:postalInfo'}->{'contact:name'} ($ct->{'contact:email'})
Organiz.:   $ct->{'contact:postalInfo'}->{'contact:org'}
Handle:     $handles->{'tech'}
Direcci�n:  $ct->{'contact:postalInfo'}->{'contact:addr'}->{'contact:street'}
            $ct->{'contact:postalInfo'}->{'contact:addr'}->{'contact:pc'}, $ct->{'contact:postalInfo'}->{'contact:addr'}->{'contact:city'}
            $ct->{'contact:postalInfo'}->{'contact:addr'}->{'contact:cc'}
Tel�fono:   $ct->{'contact:voice'}
Fax:        $ct->{'contact:fax'}

___[ SERVIDORES DNS ]___________________________________________________________
$dns_str

BODY

print($body); 

1;
