X-Git-Url: https://git.treefish.org/wirbrennen/flipacoin.git/blobdiff_plain/0e6a8202464aa57c8ab060c8e939283c7c024b1b..e8fcf9abaacf8fc9989567ab2b69c95a40b0c889:/flipacoin.cgi

diff --git a/flipacoin.cgi b/flipacoin.cgi
index 772b90e..15ac6a4 100755
--- a/flipacoin.cgi
+++ b/flipacoin.cgi
@@ -2,6 +2,7 @@
 
 use DB_File;
 use CGI;
+use HTML::Template;
 
 my $COINLIFETIME = 30;
 
@@ -12,24 +13,29 @@ my $requestedaction = $cgi->param('action');
 my $coinsindb=0;
 my $flippedcoinsindb=0;
 
-sub alert {
-    print "<b>ERROR:</b> @_[0]\n";
+my $template;
+
+sub printpage {
+    $template->param(COINLIFETIME => $COINLIFETIME);
+    $template->param(FLIPPEDCOINSINDB => $flippedcoinsindb);
+    $template->param(COINSINDB => $coinsindb);
+    $template->param(HTTP_HOST => $ENV{HTTP_HOST});
+    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";
     }
 }
 
@@ -55,34 +61,21 @@ foreach my $key ( keys %coins_db )
     }
 }
 
-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. | Browse <a href='http://git.treefish.org/wirbrennen/flipacoin.git' target='_blank'>code</a> and send patches to <a href='mailto:patchme\@flipacoin.org'>patchme\@flipacoin.org</a>.</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 = "";
@@ -91,55 +84,41 @@ elsif ( length($requestedcoinid) == 0 && $requestedaction eq "create" ) {
 
     $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);
 }
 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])."");
 
     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);