#!/usr/bin/perl -w
use strict;
use warnings;
use CGI;
use CGI::Carp "fatalsToBrowser";
my $q = new CGI (\&hook);
sub hook {
my ($filename,$buffer,$bytes_read,$file) = @_;
my ($sessid) = $ENV{QUERY_STRING};
$sessid =~ s/[^A-F0-9]//g;
my $length = $ENV{'CONTENT_LENGTH'};
my $percent = 0;
if ($length > 0) {
$percent = sprintf("%.1f",
(( $bytes_read / $length ) * 100)
);
}
open (SES, ">$sessid.session");
print SES "$bytes_read:$length:$percent";
close (SES);
}
print "Content-Type: text/html\n\n";
my $action = $q->param("do") || "unknown";
if ($action eq "upload") {
my $filename = $q->param("incoming");
my $handle = $q->upload("incoming");
my $sessid = $q->param("sessid");
$sessid =~ s/[^A-F0-9]//g;
$filename =~ s/(?:\\|\/)([^\\\/]+)$/$1/g;
open (FILE, ">./files/$filename") or die "Can't create file: $!";
my $buffer;
while (read($handle,$buffer,2048)) {
print FILE $buffer;
}
close (FILE);
unlink("./$sessid.session");
print "Thank you for your file. <a href=\"files/$filename\">Here it is again.</a>";
}
elsif ($action eq "ping") {
my $sessid = $q->param("sessid");
$sessid =~ s/[^A-F0-9]//g;
if (-f "./$sessid.session") {
open (READ, "./$sessid.session");
my $data = <READ>;
close (READ);
print $data;
}
else {
print "0:0:0:error session $sessid doesn't exist";
}
}
else {
print "0:0:0:error invalid action $action";
}