#!/usr/athena/bin/perl
#use strict;
#package main;
#my ($WEBZEPHYRDIR, $query, %resp);
#$WEBZEPHYRDIR = "/usr/local/apache/webzephyr/";
#unshift (@INC, $WEBZEPHYRDIR);
#require "zsend.pl";
#require "parseform.pl";

if ($ENV{REQUEST_METHOD} eq "GET") {
    $query=$ENV{QUERY_STRING};
} else {
    $query = "";
    $read = read(STDIN, $query, $ENV{CONTENT_LENGTH});
}
print "Content-Type: text/html\n\n";
warn "querry read: $query $read\n";

%resp = parseform($query);	


print "<H1>$0 $$</H1>";

if ($ENV{SSL_CLIENT_EMAIL}) {
    print <<EOF;
<H2> Authenticated as:<BR>
$ENV{SSL_CLIENT_CN} &lt;$ENV{SSL_CLIENT_EMAIL}&gt;<BR>
by $ENV{SSL_CLIENT_IO}: $ENV{SSL_CLIENT_OU}
</H2>
EOF
}

sub printinc {
    print "<H3>\@INC</H3><PRE>";
    foreach my $path (@INC) {
	print $path, "\n";
    }
}

sub printfields {
    print "</PRE><H3>Fields</H3><PRE>";
    
    foreach my $key (keys(%resp)) {
	print "$key: $resp{$key}\n";
    }
}


sub printenv {
    print "</PRE><H3>Environment</H3><PRE>";
    
    foreach my $key (keys(%ENV)) {
	print "$key: $ENV{$key}\n";
    }
}

my $HOSTNAME = $ENV{HTTP_HOST} || "$ENV{SERVER_NAME}:$ENV{SERVER_PORT}";
my $HTTP_FOO = $ENV{HTTPS} && $ENV{HTTPS} eq 'on' ? "https" : "http";
$ENV{URL} = "$HTTP_FOO://$HOSTNAME$ENV{SCRIPT_NAME}";
print <<EOF;

<form method=POST action=$ENV{URL}>
<input name=foo value=bar>
<input type=submit value=POST>
</form>
<form method=GET action=$ENV{URL}>
<input name=baz value=qux>
<input type=submit value=GET>
</form>
EOF

&printinc();
&printfields();
&printenv();

print "\n</PRE>done\n";

sub parseform {
    my ($formthing, @fields, %lookup, $f, $name, $value);
    ($formthing) = @_;# Expects something like:
    # foo=wow%21&bar=hello&baz=blah
    return () unless $formthing;
    @fields = split('&', $formthing);
    %lookup = ();
    foreach $f (@fields) {
	($name, $value) = split('=', $f);
	$value =~ y/\+/ /;
	$value =~ s/%([\da-f]{1,2})/pack('C',hex($1))/eig; # remove % escapes
	$lookup{$name} = $value;
    }
    
    return(%lookup);
}
warn "done\n";
