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 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172
|
#! /usr/bin/perl -w
use strict;
use utf8;
use open qw/:std :encoding(utf8)/;
use Net::HTTPS;
use XML::LibXML;
my %urls;
my %known;
sub getignores
{
open FILE,"<:encoding(utf-8)","josm_httpsignores.txt" or die;
for my $line (<FILE>)
{
if($line =~ /\|\| TestHTTPS \|\| \{\{\{(.*)\}\}\} \|\|/)
{
$known{$1} = 1;
}
}
close FILE;
}
sub getmaps
{
my $dom = XML::LibXML->load_xml(location => "imagery_josm.imagery.xml");
my $xpc = XML::LibXML::XPathContext->new($dom);
$xpc->registerNs('j', 'http://josm.openstreetmap.de/maps-1.0');
foreach my $entry ($xpc->findnodes("//j:entry"))
{
my $name = $xpc->findvalue("./j:name", $entry);
for my $e ($xpc->findnodes(".//j:*", $entry))
{
if($e->textContent =~ /^http:\/\/(.*?)(:\d+)?[\/]/)
{
my $u = $1;
if($u =~ /^(.*)\{switch:(.*)\}(.*)$/)
{
my ($f,$switch,$e) = ($1, $2, $3);
for my $s (split(",", $switch))
{
$urls{"$f$s$e"}{"MAP:$name"}++;
}
}
else
{
$urls{$u}{"MAP:$name"}++;
}
}
}
}
}
sub getfile($$)
{
my ($type, $file) = @_;
open FILE,"<:encoding(utf-8)",$file or die;
my $name;
for my $line (<FILE>)
{
if($line =~ /^([^ \t].*);(.*)/)
{
my ($n, $url) = ($1, $2);
if($url =~ /josm\.openstreetmap\.de/)
{
$name = "WIKI$type:$n";
}
else
{
$name = "$type:$n";
}
}
if($line =~ /http:\/\/(.*?)(:\d+)?[\/]/)
{
$urls{$1}{$name}++;
}
}
close FILE;
}
sub getdump()
{
open FILE,"<:encoding(utf-8)","josm_dump.txt" or die;
local $/;
undef $/;
my $file = <FILE>;
close FILE;
eval $file;
}
print "Options: \n PLUGIN STYLE RULE PRESET MAP DUMP\n GETPLUGIN GETSTYLE GETRULE GETPRESET GETMAP GETDUMP\n LOCAL\n IGNORES GETIGNORES\n ALL GETALL\n" if !@ARGV;
open OUTFILE,">","josm_https.txt" or die "Could not open output file";
open OUTFILENH,">","josm_no_https.txt" or die "Could not open no-https output file";
sub doprint($)
{
my $t = $_[0];
for my $k (sort keys %known)
{
$known{$k}++ if($t =~ s/(\Q$k\E)/~~$1~~/g);
}
print OUTFILE $t;
print $t;
}
my $local = 0;
for my $ARG (@ARGV)
{
if($ARG eq "ALL") {push(@ARGV, "PLUGIN", "STYLE", "RULE", "PRESET", "MAP", "DUMP", "IGNORES");}
if($ARG eq "GETALL") {push(@ARGV, "GETPLUGIN", "GETSTYLE", "GETRULE", "GETPRESET", "GETMAP", "GETDUMP", "GETIGNORES");}
}
my %ARGS = map {$_ => 1} @ARGV; # prevent double arguments by passing through a hash
for my $ARG (sort keys %ARGS)
{
if($ARG eq "GETIGNORES") { system "curl https://josm.openstreetmap.de/wiki/IntegrationTestIgnores?format=txt -o josm_httpsignores.txt"; getignores();}
if($ARG eq "IGNORES") { getignores(); }
if($ARG eq "LOCAL") {$local = 1; }
if($ARG eq "GETDUMP") { system "scp josm\@josm.openstreetmap.de:auto/httpinfo.dump josm_dump.txt"; getdump();}
if($ARG eq "DUMP") { getdump(); }
if($ARG eq "GETMAP") { system "curl https://josm.openstreetmap.de/maps -o imagery_josm.imagery.xml"; getmaps();}
if($ARG eq "MAP") { getmaps(); }
for my $x ("PLUGIN", "STYLE", "RULE", "PRESET")
{
my $t = lc($x);
my $url = $x eq "PLUGIN" ? $t : "${t}s";
my $file = "josm_$t.xml";
if($ARG eq "GET$x") { system "curl https://josm.openstreetmap.de/$url -o $file"; getfile($x, $file);}
if($ARG eq $x) { getfile($x, $file); }
}
}
for my $url (sort keys %urls)
{
my $i = join(" # ", sort keys %{$urls{$url}});
if($local) # skip test
{
doprint "* $url:$i\n";
next;
}
eval
{
local $SIG{ALRM} = sub {die "--Alarm--"};
alarm(5);
my $s = Net::HTTPS->new(Host => $url) || die $@;
$s->write_request(GET => "/", 'User-Agent' => "TestHTTPS/1.0");
my($code, $mess, %h) = $s->read_response_headers;
alarm(0);
doprint "* $url [$code $mess]: $i\n";
};
if($@)
{
my $e = $@||"";
$e =~ s/[\r\n]//g;
$e =~ s/ at scripts\/TestHTTPS.pl .*//;
if($@ !~ "(--Alarm--|Connection refused)")
{
doprint "* $url [Error $e] :$i\n";
}
elsif($@)
{
print OUTFILENH "* $url [$e] :$i\n";
}
}
}
for my $k (sort keys %known)
{
print "Unused ignores $k\n" if $known{$k} == 1;
}
|