#!/usr/bin/perl
# Simple script to generate a POST result.
#
# Depending on which button was pushed in the form, we either generate a direct
# result page, or we use the pattern where the post returns a 303 redirect,
# and then the resulting GET yields the true POST result.  Sites do this trick
# to avoid having POSTS in the b/f list, so you don't run into POSTs getting
# resubmitted by accident.

use CGI;
$query = new CGI;
$submitWithPost = $query->param('submitwithpost');
$submitWithPostRedirect = $query->param('submitwithpostredirect');
$submitWithPostRedirectReload = $query->param('submitwithpostredirectreload');
$redirectHappened = $query->param('redirectHappened');
$method = $query->request_method();

if (($submitWithPost && $method eq "POST") || ($redirectHappened && $method eq "GET")) {

    $textFieldData = $query->param('textfield1');

    print "Content-type: text/html\r\n";
    print "Cache-Control: no-store, no-cache, must-revalidate\r\n";
    print "\r\n";

    print <<HERE_DOC_END;
    <html>
    <body style="font-size: 32">
    This is just a minimal page that we navigate in response to an HTTP POST.
    <br>
    <br>
    If the next line is empty after the colon, it probably means that we made
    a mistake and requested this page with a GET with no query instead of a POST.
    <br>
    <br>
    The first text field contained: $textFieldData
    <br>
    This page was requested with an HTTP $method
    </body>
    </html>
HERE_DOC_END

} elsif ($submitWithPostRedirectReload && $method eq "POST") {

    print "Status: 303 See Other\r\n";
    print "Location: reloadresult.pl\r\n";
    print "Content-type: text/html\r\n";
    print "\r\n";

    print <<HERE_DOC_END
    <html>
    <body style="font-size: 32">
    This page should not be seen - it is a 303 redirect to another page.
    </body>
    </html>
HERE_DOC_END

} elsif ($submitWithPostRedirect && $method eq "POST") {

    $urlQuery = $query->query_string;
    $urlQuery =~ s/;/&/g;       # cheapo conversion from POST data to URL query format
    # redirect to the same page, with an added param to show we've already been here
    $urlQuery .= "&redirectHappened=true";

    print "Status: 303 See Other\r\n";
    printf "Location: postresult.pl?%s\r\n", $urlQuery;
    print "Content-type: text/html\r\n";
    print "\r\n";

    print <<HERE_DOC_END
    <html>
    <body style="font-size: 32">
    This page should not be seen - it is a 303 redirect to another page.
    </body>
    </html>
HERE_DOC_END

} else {

    $queryString = $query->query_string;
    print "Content-type: text/html\r\n";
    print "\r\n";

    print <<HERE_DOC_END
    <html>
    <body style="font-size: 32">
    Test failure: postresult.pl was called with an unexpected set of parameters.
    <br>
    This page was requested with an HTTP $method
    <br>
    The query parameters are: $queryString
    </body>
    </html>
HERE_DOC_END

}

