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);