aboutsummaryrefslogtreecommitdiffstats
path: root/sitesummary-upload
diff options
context:
space:
mode:
authorPetter Reinholdtsen <pere@hungry.com>2006-08-25 15:21:17 +0000
committerPetter Reinholdtsen <pere@hungry.com>2006-08-25 15:21:17 +0000
commit080b37d0ed5d04702452743bbeb7ae38a7f3d415 (patch)
tree8f37f53d8d7b91db90ebd4ec07129457b0738d14 /sitesummary-upload
parent066354fec00687bc2325ae58963b7df2816caa01 (diff)
downloadsitesummary-080b37d0ed5d04702452743bbeb7ae38a7f3d415.tar.gz
sitesummary-080b37d0ed5d04702452743bbeb7ae38a7f3d415.tar.bz2
sitesummary-080b37d0ed5d04702452743bbeb7ae38a7f3d415.tar.xz
More work on the server. Make gpg encryption optional for now, as it does not work.
Diffstat (limited to 'sitesummary-upload')
-rwxr-xr-xsitesummary-upload102
1 files changed, 102 insertions, 0 deletions
diff --git a/sitesummary-upload b/sitesummary-upload
new file mode 100755
index 0000000..6e5504c
--- /dev/null
+++ b/sitesummary-upload
@@ -0,0 +1,102 @@
+#!/usr/bin/perl -w
+# Written by Bill Allombert for the Debian popularity-contest project.
+# This file is placed in the public domain.
+# Rewritten for sitesummary by Petter Reinholdtsen
+
+use strict;
+use IO::Socket;
+use Getopt::Std;
+use File::Basename;
+
+my %opts;
+getopts("du:f:", \%opts);
+
+sub usage {
+ print <<"EOF";
+Usage: $0 [-Cd] [-u <url>] [-f <file>]
+ -d enable debugging
+ -u <url> submit to the given URL (default localhost)
+ -f <file> read popcon report from file (default stdin)
+EOF
+}
+
+my ($submiturl) = $opts{'u'} || "http://localhost/cgi-bin/sitesummary-collector.cgi";
+my ($file) = $opts{'f'} || "-";
+
+my ($host) = $submiturl =~ m%http://([^/]+)%;
+
+print "Unable to parse url\n" if ($opts{'d'} && ! $host);
+
+# Configure the proxy:
+my ($http_proxy,$proxy,$port,$remote);
+
+$http_proxy=$ENV{'http_proxy'};
+if (defined($http_proxy))
+{
+ $http_proxy =~ m{http://([^:]*)(?::([0-9]+))?}
+ or die ("unrecognized http_proxy");
+ $proxy=$1; $port=$2;
+}
+
+$proxy=$host unless (defined($proxy));
+$port=80 unless (defined($port));
+
+# Compress the report:
+my ($str,$len);
+my $encoding;
+open FILE, "< $file" or die "reading from '$file'";
+$encoding = "identity";
+$str .= $_ while(<FILE>);
+close(FILE);
+$len = length($str);
+
+# 30 second timeout on http connections
+$SIG{ALRM} = sub { die "timeout in sitesummary-upload\n" };
+alarm(30);
+
+# Connect to server
+$remote = IO::Socket::INET->new(Proto => "tcp", PeerAddr => $proxy,
+ PeerPort => $port);
+unless ($remote) { die "cannot connect to $proxy:$port" }
+
+my $boundary = "----------ThIs_Is_tHe_bouNdaRY_\$";
+
+my $basefile = basename($file);
+
+#Content-Length: $len
+# text/plain; charset=utf-8
+my $ORS = "\r\n"; # Use DOS line endings to make HTTP happy
+my $form;
+$form .= "--${boundary}$ORS";
+$form .= "Content-Disposition: form-data; name=\"sitesummary\"; filename=\"$basefile\"$ORS";
+$form .= "Content-Encoding: $encoding$ORS";
+$form .= "Content-Type: application/octet-stream$ORS$ORS";
+$form .= "$str$ORS";
+$form .= "--${boundary}--$ORS";
+$form .= "$ORS";
+
+my $formlen = length($form);
+
+#Send data
+print $remote <<"EOF";
+POST $submiturl HTTP/1.1
+User-Agent: sitesummary-upload
+Host: $host
+content-type: multipart/form-data; boundary=$boundary
+content-length: $formlen
+
+$form
+EOF
+
+#Get answer
+my($answer)="";
+while(<$remote>)
+{
+ $answer.=$_;
+ m/SITESUMMARY HTTP-POST OK/ and last;
+}
+close ($remote);
+#Check answer
+my $status = ($answer =~ m/SITESUMMARY HTTP-POST OK/) ? 0 : 1;
+print "Failed to upload, answer '$answer'\n" if $status && $opts{'d'};
+exit $status;