#!/usr/bin/perl
 
use Captcha::reCAPTCHA;


my @known_words = ('Marasan','booYone','oranGe','turIn','Towers','TripTaMine','Perpetuum','Apec','SlafKof','lazzna','synteZa','psyTrance','SemoTamo');
my $chat_history = "guests_pukes_c";

sub parse_form_data {
	local (*FORM_DATA) = @_;
	local ( $request_method, $query_string, @key_value_pairs, @key_value, $key, $value );
	
	$request_method = $ENV{'REQUEST_METHOD'};
	if (($request_method eq "GET") || ($request_method eq "get")) {
		$query_string = $ENV{'QUERY_STRING'};
	} elsif (($request_method eq "POST") || ($request_method eq "post")) {
		read (STDIN, $query_string, $ENV{'CONTENT_LENGTH'});
	} else {
		&return_error (500, "Server Error", "Server method '" . $request_method . "' sux");
	}

	@key_value_pairs = split(/&/, $query_string);

	foreach $key_value (@key_value_pairs) {
		($key, $value) = split (/=/, $key_value);
		$value =~ tr/+/ /;
		$value =~ s/%([\dA-Fa-f][\dA-Fa-f])/pack ("C", hex ($1))/eg;

		if (defined($FORM_DATA{$key})) {
			$FORM_DATA{$key} = join ("\0", $FORM_DATA{$key}, $value);
		} else {
			$FORM_DATA{$key} = $value;
		}
	};
}

sub return_error {
	local ($status, $keyword, $message) = @_;
	print "Content-Type: text/html\n";
	print "Status: ", $status, " ", $keyword, "\n\n";

	print "<html><head><title> ...chyba... </title></head>";
	print "<body><h1>$keyword</h1><hr>$message<hr></body></html>";

	exit(1);
}

sub is_it_in {
	return 0;
	local ($look_for) = @_[0];
#	print "\nLookFor $look_for.<br />\n";
	foreach (@known_words) {
		return 1 if $_ eq $look_for;
	}
#	print "return 0<br />\n";
	return 0;
}

&parse_form_data (*form_data);

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$mon = $mon + 1;
# $min $mday $mon potrebujou nekdy na zacatku 0 ;-)
$min =~ s/^(\d{1})$/0$+/;
$mday =~ s/^(\d{1})$/0$+/;
$mon =~ s/^(\d{1})$/0$+/;
$sec =~ s/^(\d{1})$/0$+/;
$year = $year + 1900; 

my $timestamp = "$year.$mon.$mday $hour:$min:$sec";
my $captcha = Captcha::reCAPTCHA->new;
my $nol_to_show = 30;

print "Content-Type: text/html\n";
print "Pragma: no-cache\n\n";
print '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">',"\n";

print <<ENDE;
<html><head><title>booYone phoroom</title>
<link href="/style01.css" type="text/css" rel="stylesheet">
<style>textarea { width=340; height=90;}
</style>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
</head>
<body bgcolor="#161616" topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0">
<table border="0" cellpadding="25" cellspacing="0" width="100%">
<tr><td>
	<form><!-- method="POST" -->
	<table border="0" cellpadding="3" width="100%" bgcolor="#303030" cellspacing="0">
		<tbody>
		<tr height="10"><td height="10" colspan="2"></td></tr>
		<tr><td align="right"><font color="#cccccc">nick:</font></td><td><input type="text" name="nick" size="30" maxlength="50"></td></tr>
		<tr><td align="right"><font color="#cccccc">e-mail:</font></td><td><input type="text" name="email" size="30" maxlength="50"></td></tr>
		<tr><td align="right"><font color="#cccccc">zpráva:</font></td><td><textarea name="zprava" rows="5" cols="50"></textarea></td></tr>
		<tr><td align="right"><font color="#cccccc"><a target="_blank" href="http://recaptcha.net/">reCaptcha</a>:</font></td><td>
ENDE
print $captcha->get_html( '6LfmpQIAAAAAAMTrOgwwcj8DTxwsm4Qx0UkxD2Jm' );

print <<ENDE;
		</td></tr>
		<tr><td align="right"><input type="submit" name="odeslat" value="odeslat"></td>
		<td align="right">&nbsp; <a href="http://www.mozilla.org/products/firefox/" target="_blank"
		title="Get Firefox - Web Browsing Redefined"><img
		src="http://www.mozilla.org/products/firefox/buttons/firefox_pixel.png" width="94"
		height="15" border="0" alt="Get Firefox"></a> &nbsp; </td></tr>
		<tr height="10"><td height="10" colspan="2"></td></tr>
		</tbody>
	</table>
	</form>
	<br><br>
ENDE

my $challenge = $form_data{'recaptcha_challenge_field'};
my $response = $form_data{'recaptcha_response_field'};

# print "<!-- response: $response, challenge: $challenge. -->\n";

my $result = $captcha->check_answer( '6LfmpQIAAAAAAFDPhd2Cwb4X_dSEzTEUuLP9YN8O', $ENV{'REMOTE_ADDR'}, $challenge, $response );


if (defined($form_data{'odeslat'})) {
	if ((($form_data{'nick'} eq '') &&
		($form_data{'email'} !~ /[\d\w.]+\@[\d\w.]+\.[\d\w]+/)) ||
		($form_data{'zprava'} eq '')) {
		print "<!-- chybi nick nebo email nebo je email njakej divnej -->\n";
		print "... aspon nick nebo e-mail a zpravu.<br /><br />"; 
	} elsif ( ($challenge ne "") && ( $response ne "" ) && ( !$result->{is_valid} ) ) {
		print "chybná reCaptcha.<br /><br />\n";
#		print "<!-- reCaptcha error: ";
#		print $result->{error};
#		print " -->\n";
	} elsif ( $result->{is_valid} ) {
#		print "<!-- tady je vse OK -->\n";
		$radek_out  = $timestamp . '||';
		$radek_out .= $ENV{'REMOTE_ADDR'} . '||';
		$radek_out .= $form_data{'nick'} . '||';
		$radek_out .= $form_data{'email'} . '||';

		if ($form_data{'email'} =~ /rootsproduction.*/ ) {
			$form_data{'zprava'} = "..."
		}

		$radek_out =~ s/\@/\&\#64;/g ;

		$form_data{'zprava'} =~ s/\&/\&amp;/g;
#		$form_data{'zprava'} =~ s/<.*>/<>/g;
		$form_data{'zprava'} =~ s/</\&lt;/g;
		$form_data{'zprava'} =~ s/>/\&gt;/g;
		$form_data{'zprava'} =~ s/\r\n/<br>/g;
		$form_data{'zprava'} =~ s/\|/./g;

		$radek_out .= $form_data{'zprava'};
#		print "<!-- $radek_out -->\n";
		open DATAF,">>".$chat_history;
		print DATAF $radek_out,"\n";
		close DATAF;
	}
}

#print "\n<br />now exit</body></html>\n";
#exit;

if (defined($form_data{'go_other'})) {
	$wieviel = $form_data{'wieviel'};
} else {
	$wieviel = $nol_to_show;
}

open DATAF,"tail -n $wieviel $chat_history |";

my $discussion;
my $nolts = $nol_to_show;

while (($radek = <DATAF>) && ($nolts-- > 0)) {
	($timestamp, $IP, $nick, $email, $zprava) = split (/\|\|/, $radek);
	$timestamp =~ s: : | : ;
	$prispevek  = '<font size="1" color="#969696">';
	$prispevek .= " $timestamp | ";
	$prispevek .= " $nick | " if $nick ne '';
	##$prispevek .= " <a href=\"mailto:$email\">$email</a>" if $email =~ /[\d\w.]+\@[\d\w.]+.[\d\w]+/;
	$prispevek .= " <a href=\"mailto:$email\">$email</a>" if $email =~ /[\d\w.]+\&#64;[\d\w.]+.[\d\w]+/;
	$prispevek .= '</font><br>' . $zprava . '<br><br>' . "\n";
	
	$discussion = $prispevek . $discussion;
}
close DATAF;
print $discussion;

open NOL,"cat $chat_history | wc -l|";
$radek = <NOL>;
close NOL;

$nol = $radek;
$cnol = $radek;

if ($cnol > $nol_to_show) {
	print '<FORM method="POST"><table width="100%" cellpadding="10" cellspacing="0" bgcolor="#242424">',
		'<tr><td valign="top"><SELECT size="1" name="wieviel">';
	while ($cnol > 0) {
		$od = $cnol - $nol_to_show;
		if ($od < 0) {
			$od = 0;
			$do = $nol_to_show;
		} else {
			$do = $cnol;
		}

		$cnol = $cnol - $nol_to_show;
		$wieviel = $nol - $od;
		print '<OPTION value="',$wieviel,'">',"$od - $do</OPTION>";
	}
	print '</SELECT> <INPUT type="submit" value="zobrazit starsí příspěvky" name="go_other"></td></tr></table></FORM>';
}

print "</td></tr></table>\n";

# FOOTER
open FOOTERF,'footer';
print $radek while $radek = <FOOTERF>;
close FOOTERF;
########

print '</body></html>';
