Coding Challenge #2! (115)

81 Name: #!/usr/bin/anonymous : 2006-05-28 14:13 ID:SGly+VD1

#!/usr/bin/perl

use CGI;
use CGI::Carp qw(fatalsToBrowser);

my $query=new CGI;
my $task=$query->param("task");

my $text=$query->param("text");
do_post($text) if $text;

unless (-e "index.xhtml") {
build_main_page();
}

print "Status: 303 Go West\n",
"Location: index.xhtml\n",
"Content-type: application/xhtml+xml; charset=utf-8\n\n",
"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\"\n",
"\"http://www.w3.org/TR/xhtml1/DTD/xhtml11.dtd\">\n",
"<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\">\n",
"<head><title>redirect</title></head><body>\n",
"<p><a href=\"index.xhtml\">go to index.xhtml</a></p></body></html>\n";

sub do_post($) {
$text=shift;
$text=~s/[\x00-\x08\x0b\x0c\x0e-\x1f]//g;
$text=~s/&/&amp;/g;
$text=~s/\</&lt;/g;
$text=~s/\>/&gt;/g;
$text=~s/"/&quot;/g;
$text=~s/'/'/g;
$text=~s/,/,/g;
$text=~s/&amp;(\#[0-9]+;)/&$1/g;
$text=~s/&amp;(\#x[0-9a-f]+;)/&$1/gi;
$text=~s/&\#([0-9]+);/$1<=1114111?"&#$1;":""/ge;
$text=~s/&\#x([0-9a-f]+);/hex($1)<=1114111?"&#x$1;":""/gei;
if(length($text)>4096) {
too_long_error();
} else {
my $filename="data/".int(rand(20));
open POSTFILE,">$filename";
print POSTFILE $text;
close POSTFILE;
}
build_main_page();
}

sub too_long_error() {
print "Content-type: application/xhtml+xml; charset=utf-8\n\n",
"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\"\n",
"\"http://www.w3.org/TR/xhtml1/DTD/xhtml11.dtd\">\n",
"<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\">\n",
"<head><title>error!</title></head>\n<body>\n",
"<p>your text is too long.</p></body></html>\n";
}

sub build_main_page() {
open MAINPAGE,">index.xhtml";
print MAINPAGE "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\"\n",
"\"http://www.w3.org/TR/xhtml1/DTD/xhtml11.dtd\">\n",
"<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\">\n",
"<head><title>a web 3.0 page</title></head>\n",
"<body>\n",
"<form action=\"web3.0.pl\" method=\"post\">\n",
"<p><textarea name=\"text\" cols=\"64\" rows=\"10\"></textarea><br/>\n",
"<input type=\"submit\" value=\"submit\" /></p></form>\n";
@posts=glob("data/*");
for(@posts) {
open POSTFILE,"<$_";
read POSTFILE,$text,4096;
close POSTFILE;
print MAINPAGE "<hr><p>$text</p>\n";
}
print MAINPAGE "</body>\n</html>\n";
close MAINPAGE;
}
Name: Link:
Leave these fields empty (spam trap):
More options...
Verification: