diff options
-rw-r--r-- | sitesummary-collector.cgi | 76 |
1 files changed, 73 insertions, 3 deletions
diff --git a/sitesummary-collector.cgi b/sitesummary-collector.cgi index afdeb50..e4217cd 100644 --- a/sitesummary-collector.cgi +++ b/sitesummary-collector.cgi @@ -1,5 +1,75 @@ -#!/bin +#!/usr/bin/perl -wT +# +# Receive HTTP post request with a file upload and process it as a +# sitesummary submission. +# +# Handle three different submission methods +# - simple post message, where the complete body is the popcon report +# (used by popcon version 1.30). +# - mime-encoded upload with report in compressed form (used by +# popcon version 1.31 and newer). +# - mime-encoded upload with report in uncompressed form (used by +# ubuntu popcon). -# Script to collect HW info using HTTP put +use strict; +use CGI; -true +my $basedir = "/var/lib/sitesummary"; + +$ENV{PATH}=""; + +print "Content-Type: text/plain\n\n"; +if (exists $ENV{REQUEST_METHOD} && $ENV{REQUEST_METHOD} ne "POST") +{ + print "Sitesummary HTTP-POST submission URL\n"; + print "Visit http://debian-edu.alioth.debian.org/ for more info.\n"; + exit 0; +} + +# Extract post data, handle both simple and multipart way +my @entry; +if (exists $ENV{CONTENT_TYPE} && $ENV{CONTENT_TYPE} =~ m%multipart/form-data%){ + my $query = new CGI; + my $fh = $query->upload("popcondata"); + if ($fh) { + my $filename = $query->param("popcondata"); + my $type = $query->uploadInfo($filename)->{'Content-Type'}; + if ("text/plain; charset=utf-8" ne $type && + "application/octet-stream" ne $type) { # Used by ubuntu script + print "Only 'text/plain; charset=utf-8' and 'application/octet-stream +' is supported (not $type)!"; + die; + } else { + my $encoding = $query->uploadInfo($filename)->{'Content-Encoding'}; + if ("x-gzip" eq $encoding || "gzip" eq $encoding) { + # Uncompress + print "Compressed ($encoding) encoding detected.\n"; + my $data; + # $data = join("", <$fh>); + my $len = (stat($fh))[7]; + read $fh, $data, $len; + $data = Compress::Zlib::memGunzip($data); + @entry = ($data); + } else { # Pass throught + print "Identity encoding detected.\n"; + @entry = <$fh>; + } + } + } else { + print $query->cgi_error; + die; + } +} else { + print <<EOF; +Unsupported submission method. +EOF +} + +open(SITESUMMARY, "$basedir/storage") or die "Unable to pipe to prepop.pl"; +print SITESUMMARY @entry; +close SITESUMMARY; + +print "Thanks for your submission to site-summary!\n"; +print "SITESUMMARY HTTP-POST OK\n"; + +exit 0; |