use DB_File;
use CGI;
+use HTML::Template;
my $COINLIFETIME = 30;
my $coinsindb=0;
my $flippedcoinsindb=0;
-sub alert {
- print "<b>ERROR:</b> @_[0]\n";
+my $template;
+
+sub setprotocolparam {
+ {
+ no warnings 'uninitialized';
+ if( length $ENV{HTTPS} ) {
+ $template->param(PROTOCOL => "https");
+ }
+ else {
+ $template->param(PROTOCOL => "http");
+ }
+ }
+}
+
+sub printpage {
+ $template->param(COINLIFETIME => $COINLIFETIME);
+ $template->param(FLIPPEDCOINSINDB => $flippedcoinsindb);
+ $template->param(COINSINDB => $coinsindb);
+
+ my $rootloc = $ENV{SCRIPT_FILENAME};
+ $rootloc =~ s/$ENV{DOCUMENT_ROOT}//g;
+ $rootloc =~ s/\/[^\/]*$//g;
+ $template->param( ROOTURL => $ENV{HTTP_HOST} . $rootloc );
+
+ print "Content-type: text/html\n\n", $template->output;
}
-sub printcoin {
- print "<a href=/@_[0]>";
- print "<font style=\"BACKGROUND-COLOR: yellow\" color=blue><b>";
- print "http://$ENV{HTTP_HOST}/@_[0]";
- print "</b></font>";
- print "</a>";
+sub exitalert {
+ $template = HTML::Template->new(filename => 'alert.html');
+ $template->param(ALERTMSG => @_[0]);
+ printpage();
+ exit();
}
-sub printresult {
+sub translateresult {
if ( @_[0] == 0 ) {
- print "Heads";
+ return "Heads";
}
else {
- print "Tails";
+ return "Tails";
}
}
}
}
-print "Content-type: text/html\n\n";
-print "<html>";
-print "<head>";
-print "<title>flipacoin.org - The Internet's first coinflipping service.</title>";
-print "</head>";
-print "<body>";
-
if ( ! ($requestedcoinid =~ /\A[a-z0-9]*\z/) ) {
- alert("You sent me an invalid coin!");
- exit;
+ exitalert("You sent me an invalid coin!");
}
if ( ! ($requestedaction =~ /\A[a-z]*\z/) ) {
- alert("You sent me an invalid action!");
- exit;
+ exitalert("You sent me an invalid action!");
}
-print "<font size=1>During the last $COINLIFETIME days $flippedcoinsindb/$coinsindb coins were flipped/created.</font>";
-print "<hr>";
-print "<h3>flipacoin.org - The Internet's first coinflipping service.</h3>";
-
if ( length($requestedcoinid) == 0 && $requestedaction eq "" ) {
- print "<a href=/?action=create><font color=blue>[Create a coin]</font></a>";
- print " to make a decision.";
+ $template = HTML::Template->new(filename => 'create.html');
}
elsif ( length($requestedcoinid) == 0 && $requestedaction eq "create" ) {
my @chars = ("a".."z", "0".."9");
my $newcoinid;
+
$newcoinid .= $chars[rand @chars] for 1..13;
while ( exists $coins_db{$newcoinid} ) {
$newcoinid = "";
$coins_db{$newcoinid} = time;
- print "Created a new coin ";
- printcoin($newcoinid);
- print " for you.<br>";
- print "<br>";
- print "Send the coin to the other party and tell them to flip it to make a decision.";
+ $template = HTML::Template->new(filename => 'created.html');
+ $template->param(NEWCOINID => $newcoinid);
+ setprotocolparam();
}
elsif ( length($requestedcoinid) > 0 ) {
if ( ! exists $coins_db{$requestedcoinid} ) {
- alert("The coinid $requestedcoinid does not exist!");
- exit;
+ exitalert("The coinid $requestedcoinid does not exist!");
}
my @coininfo = split(/,/, $coins_db{$requestedcoinid});
my $coininfosize = $#coininfo + 1;
- printcoin($requestedcoinid);
- print "<br>";
- print "<pre>";
- print "<b>Creation time:</b> " . localtime($coininfo[0]);
- print "<br>";
+ $template = HTML::Template->new(filename => 'usecoin.html');
+
+ $template->param(REQUESTEDCOINID => $requestedcoinid);
+ $template->param(COINCREATIONTIME => localtime($coininfo[0])."");
+ setprotocolparam();
if ( $coininfosize == 1 && $requestedaction eq "" ) {
- print "<b>Status:</b> Not yet flipped ";
- print "<a href=/$requestedcoinid?action=flip>";
- print "<font color=blue>[flip it]</font>";
- print "</a>";
+ $template->param(STATUS_NOTYETFLIPPED => 1);
}
elsif ( $coininfosize == 1 && $requestedaction eq "flip" ) {
$result = int(rand(2));
$coins_db{$requestedcoinid} = $coins_db{$requestedcoinid} .
"," . time .
"," . $result;
- print "<b>Status:</b> Just flipped";
- print "<br>";
- print "<b>Result:</b> ";
- printresult($result);
+ $template->param(STATUS_JUSTFLIPPED => 1);
+ $template->param(COINRESULT => translateresult($result));
}
elsif ( $coininfosize == 3 ) {
- print "<b>Status:</b> Flipped @ " . localtime($coininfo[1]);
- print "<br>";
- print "<b>Result:</b> ";
- printresult($coininfo[2]);
+ $template->param(STATUS_FLIPPED => 1);
+ $template->param(COINFLIPPEDTIME => localtime($coininfo[1])."");
+ $template->param(COINRESULT => translateresult($coininfo[2]));
}
-
- print "</pre>";
}
-print "</body>";
-print "</html>";
+printpage();
untie(%coins_db);