Taylor Venable avatar Taylor Venable committed 549064f

Move request method converter into cgichamp

Comments (0)

Files changed (2)

 use strict;
 use autodie;
 
+use CGI;
 use Cwd;
 use Data::Dumper;
 use File::Basename;
 use Net::Address::IP::Local;
 use URI::Escape;
 
-my $config = {
-    debug => {
-        input_file => '.cgichamp',
-        output_file => 'cgi-debug-stdin',
-        tool => 'gdb'
-    }
-};
-
 sub read_config($) {
     my ($config) = @_;
 }
     chdir $cwd;
 }
 
-process_args($config);
-read_config($config);
+sub interface_cli() {
+    my $config = {
+        debug => {
+            input_file => '.cgichamp',
+            output_file => 'cgi-debug-stdin',
+            tool => 'gdb'
+        }
+    };
 
-my $op = shift @ARGV;
+    process_args($config);
+    read_config($config);
 
-given ($op) {
-    when ('debug') {
-        op_debug($config);
+    my $op = shift @ARGV;
+
+    given ($op) {
+        when ('debug') {
+            op_debug($config);
+        }
+        default {
+            help();
+        }
     }
-    default {
-        help();
+}
+
+sub web_print_input($) {
+    my ($q) = @_;
+
+    my $instructions =<<EOS
+
+Use the form below to provide a query string. When you submit the form, a new
+form will be produced, with all the parameters you supplied turned into hidden
+inputs and the form action set to POST to the location you specify. In this way
+your GET will be turned into a POST.
+
+EOS
+      ;
+
+    print $q->p($instructions);
+    print $q->start_form({-action => '', -method => 'POST', -enctype => 'multipart/form-data'});
+    print $q->radio_group({
+        -name => 'op',
+        -values => ['hash', 'post'],
+        -default => 'post',
+        -linebreak => 'false',
+        -labels => {
+            hash => 'Build Perl Hash',
+            post => 'Generate POST Form'
+        }
+    });
+    print $q->label('Action:'), ' ', $q->textfield({-name => 'action', -size => 60, -class => 'url'}), $q->br();
+    print $q->textarea({-name => 'data', -rows => 10, -columns => 80});
+    print $q->br();
+    print $q->submit({-name => 'submit', -value => 'Convert'});
+    print $q->end_form();
+}
+
+sub web_print_output($) {
+    my ($q) = @_;
+    my $data = CGI->new($q->param('data'));
+    my $vars = $data->Vars();
+
+    given ($q->param('op')) {
+        when ('post') {
+            print $q->p("You're all ready to go; check the data below and hit the Submit button.");
+
+            print $data->Dump();
+
+            print $q->start_form({-action => $q->param('action') // '', -method => 'POST', -enctype => 'multipart/form-data'});
+            foreach my $name (keys $vars) {
+                print $q->hidden({-name => $name, -default => [(split '\0', $$vars{$name})]});
+            }
+            print $q->submit({-name => '__taylors_secret_submit', -value => 'Submit'});
+            print $q->end_form();
+        }
+        when ('hash') {
+            print $q->pre(Dumper($vars));
+        }
     }
 }
 
+sub interface_web($) {
+    my ($q) = @_;
+
+    my $style =<<EOS
+input.url {
+  font-family: "monospace";
+}
+EOS
+      ;
+
+    print $q->header();
+    print $q->start_html({
+        -title => "Request Converter",
+        -style => {
+            -src => 'http://metasyntax.net/style.css',
+            -code => $style
+        }
+    });
+    print $q->h1('Request Converter');
+
+    if (defined $q->param('data')) {
+        web_print_output($q);
+    }
+    else {
+        web_print_input($q);
+    }
+    print $q->end_html();
+}
+
+my $q = CGI->new();
+
+if (defined $q->request_method()) {
+    interface_web($q);
+}
+else {
+    interface_cli();
+}
+
 =pod
 
 =head1 NAME

bin/post.cgi

-#!/usr/bin/env perl
-
-### Copyright (c) 2012, Taylor Venable
-### All rights reserved.
-###
-### Redistribution and use in source and binary forms, with or without
-### modification, are permitted provided that the following conditions are met:
-###
-###     * Redistributions of source code must retain the above copyright
-###       notice, this list of conditions and the following disclaimer.
-###
-###     * Redistributions in binary form must reproduce the above copyright
-###       notice, this list of conditions and the following disclaimer in the
-###       documentation and/or other materials provided with the distribution.
-###
-### THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-### AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-### IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-### ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-### LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-### CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-### SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-### INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-### CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-### ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-### POSSIBILITY OF SUCH DAMAGE.
-
-use v5.16;
-
-use warnings;
-use strict;
-use autodie qw(:all);
-
-use CGI;
-
-sub print_input($) {
-    my ($q) = @_;
-
-    my $instructions =<<EOS
-
-Use the form below to provide a query string. When you submit the form, a new
-form will be produced, with all the parameters you supplied turned into hidden
-inputs and the form action set to POST to the location you specify. In this way
-your GET will be turned into a POST.
-
-EOS
-      ;
-
-    print $q->p($instructions);
-    print $q->start_form({-action => '', -method => 'POST', -enctype => 'multipart/form-data'});
-    print $q->label('Action:'), ' ', $q->textfield({-name => 'action', -size => 60, -class => 'url'}), $q->br();
-    print $q->textarea({-name => 'data', -rows => 10, -columns => 80});
-    print $q->br();
-    print $q->submit({-name => 'submit', -value => 'Convert'});
-    print $q->end_form();
-}
-
-sub print_output($) {
-    my ($q) = @_;
-    my $data = CGI->new($q->param('data'));
-    my $vars = $data->Vars();
-
-    print $q->p("You're all ready to go; check the data below and hit the Submit button.");
-
-    print $data->Dump();
-
-    print $q->start_form({-action => $q->param('action') // '', -method => 'POST', -enctype => 'multipart/form-data'});
-    foreach my $name (keys $vars) {
-        print $q->hidden({-name => $name, -default => [(split '\0', $$vars{$name})]});
-    }
-    print $q->submit({-name => '__taylors_secret_submit', -value => 'Submit'});
-    print $q->end_form();
-}
-
-my $q = CGI->new();
-
-my $style =<<EOS
-input.url {
-  font-family: "monospace";
-}
-EOS
-  ;
-
-print $q->header();
-print $q->start_html({
-    -title => "Request Converter",
-    -style => {
-        -src => 'http://metasyntax.net/style.css',
-        -code => $style
-    }
-});
-print $q->h1('Request Converter');
-
-if (defined $q->param('data')) {
-    print_output($q);
-}
-else {
-    print_input($q);
-}
-print $q->end_html();
-
-# Local Variables:
-# mode: cperl
-# End:
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.