-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgenerate_pdns_hazard.pl
116 lines (101 loc) · 3.43 KB
/
generate_pdns_hazard.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/usr/bin/perl
use XML::Simple;
use LWP::UserAgent;
use IO::Socket::SSL;
use POSIX qw(strftime mktime ceil locale_h);
use Net::IDN::Encode ':all';
use Data::Dumper;
my @domeny;
my @domeny_sort;
my $urlHazardXML = "https://hazard.mf.gov.pl/api/Register";
my $pdns_directory = "/var/lib/powerdns/etc/powerdns";
my $pdns_hazard_log_directory = "/var/log/hazard";
my $ua = LWP::UserAgent->new;
$ua->default_header('Accept-Language' => "pl");
$ua->ssl_opts(%{{'verify_hostname' => 0, 'SSL_verify_mode' => SSL_VERIFY_NONE}});
my $response = $ua->get($urlHazardXML);
if($response->is_success)
{
my $xml = new XML::Simple;
$data = $xml->XMLin($response->content);
my $date = strftime('%d-%m-%Y %H:%M:%S',localtime(time));
my $date_file = strftime('%d-%m-%Y_%H:%M:%S',localtime(time));
my $dumpNew = "";
my $filePDNSNew;
my %isAdd;
my $couter;
foreach my $domain (@{$data->{'PozycjaRejestru'}})
{
my $domena = $domain->{'AdresDomeny'};
if(!$isAdd{$domena})
{
# haszuje jak wykre.lono z listy
if($domain->{'DataWykreslenia'})
{
$dumpNew .= "\"$domena\|.$domain->{'DataWpisu'}."|".$domain->{'DataWykreslenia'}."|".domain_to_ascii($domena)\n";
}
else
{
if ($domain == ${$data->{'PozycjaRejestru'}}[-1])
{
#$filePDNSNew .= "\"$domena\"";
push @domeny, domain_to_ascii($domena);
}
else
{
#$filePDNSNew .= "\"$domena\",";
push @domeny, domain_to_ascii($domena);
}
$dumpNew .= "$domena"."|".$domain->{'DataWpisu'}."|".domain_to_ascii($domena)."\n";
}
$isAdd{$domena} = $domena;
}
}
my %legal=map{ $_ => 1} qw(.co.uk .foo .com .edu);
@list=map { shift @$_ }
sort { $b->[2] <=> $a->[2] || $a->[1] cmp $b->[1] || $a->[0] cmp
+ $b->[0]}
map { my ($ext)=m/(\..*)$/; [ $_, $ext, $legal{$ext} ] }
@domeny;
my $dumpOld = ( -e "$pdns_hazard_log_directory/dump.txt" ? join("\n", fileRead("$pdns_hazard_log_directory/log_$date_file.txt")) : "");
if(trim($dumpOld) ne trim($dumpNew))
{
fileWrite("$pdns_directory/data_aktualizacji.txt", $date);
fileWrite("$pdns_hazard_log_directory/log_$date_file.txt", $dumpNew);
}
my $filePDNSOld = ( -e "$pdns_directory/hazard.dane" ? join("\n", fileRead("$pdns_directory/hazard.dane")) : "");
foreach (@list) {
$filePDNSNew .= $_."\n";
}
if(trim($filePDNSOld) ne trim($filePDNSNew))
{
fileWrite("$pdns_directory/hazard.dane", $filePDNSNew);
}
system("rec_control reload-lua-script");
}
else
{
print STDERR "Error: ".$response->status_line."\n";
}
sub fileRead {
my($plik) = @_;
my @wyjscie;
open($UCHWYT, $plik);
while (my $row = <$UCHWYT>) {
push(@wyjscie, trim($row));
}
close ($UCHWYT);
return @wyjscie;
}
sub fileWrite {
my($plik, $co) = @_;
open(UCHWYT, '>', $plik) or die "Nie można otworz.. $plik: $!";
print UCHWYT $co;
close UCHWYT;
}
sub trim($) {
my $string = shift;
$string =~ s/^\s+//;
$string =~ s/\s+$//;
return $string;
}