]> git.treefish.org Git - wirbrennen/flipacoin.git/blobdiff - flipacoin.cgi
Separated functional perl code and html using perl html template module.
[wirbrennen/flipacoin.git] / flipacoin.cgi
index 408c44533ad726425c5aad2673b84a12c358e4b8..95bf6c1761af28a8e3c1d4cd2dc36d32801f68fe 100755 (executable)
@@ -2,6 +2,7 @@
 
 use DB_File;
 use CGI;
+use HTML::Template;
 
 my $COINLIFETIME = 30;
 
@@ -12,24 +13,28 @@ 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);
+    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 +60,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 +83,42 @@ 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);
+    $template->param(HTTP_HOST => $ENV{HTTP_HOST});
 }
 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(HTTP_HOST => $ENV{HTTP_HOST});
+    $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(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(COINSTATUS => "Just flipped");
+       $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(COINSTATUS => "Flipped @ " . localtime($coininfo[1]));
+       $template->param(COINRESULT => translateresult($coininfo[2]));
     }
-
-    print "</pre>";
 }
 
-print "</body>";
-print "</html>";
+printpage();
 
 untie(%coins_db);