diff options
author | Petter Reinholdtsen <pere@hungry.com> | 2006-08-25 15:21:17 +0000 |
---|---|---|
committer | Petter Reinholdtsen <pere@hungry.com> | 2006-08-25 15:21:17 +0000 |
commit | 080b37d0ed5d04702452743bbeb7ae38a7f3d415 (patch) | |
tree | 8f37f53d8d7b91db90ebd4ec07129457b0738d14 /sitesummary-upload | |
parent | 066354fec00687bc2325ae58963b7df2816caa01 (diff) | |
download | sitesummary-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-x | sitesummary-upload | 102 |
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; |