diff --git a/cgi2-1.cgi b/cgi2-1.cgi new file mode 100644 index 0000000..429d380 --- /dev/null +++ b/cgi2-1.cgi @@ -0,0 +1,14 @@ +#!/usr/bin/perl +use strict; +use warnings; +use CGI ':standard'; + +my $file = param('filename'); + +print header(-type => 'text/plain'); + +open my $fh, '<', $file or die "Can't open $file: $!\n"; + +while (<$fh>) { + print; +} diff --git a/cgi2-2.cgi b/cgi2-2.cgi new file mode 100644 index 0000000..4a41f94 --- /dev/null +++ b/cgi2-2.cgi @@ -0,0 +1,15 @@ +#!/usr/bin/perl +use strict; +use warnings; +use CGI ':standard'; + +my $dir = '/path/to/data/files/'; +my $file = $dir . param('filename'); + +print header(-type => 'text/plain'); + +open my $fh, '<', $file or die "Can't open $file: $!\n"; + +while (<$fh>) { + print; +} diff --git a/cgi2-3.cgi b/cgi2-3.cgi new file mode 100644 index 0000000..7a70f9e --- /dev/null +++ b/cgi2-3.cgi @@ -0,0 +1,13 @@ +#!/usr/bin/perl +use strict; +use warnings; +use CGI ':standard'; + +my $user = param('user'); +my $who = `finger $user`; + +print header(-type => 'text/plain'); + +print "Here are the results for user $user\n\n"; + +print $who; diff --git a/cgi2-4.cgi b/cgi2-4.cgi new file mode 100644 index 0000000..8cba781 --- /dev/null +++ b/cgi2-4.cgi @@ -0,0 +1,22 @@ +#!/usr/bin/perl -T +use strict; +use warnings; +use CGI ':standard'; + +$ENV{PATH} = '/bin:/usr/bin:/usr/local/bin'; + +my $user = param('user'); + +if ($user =~ /^(\w+)$/) { + $user = $1; +} else { + die "Invalid user: $user\n"; +} + +my $who = `finger $user`; + +print header(-type => 'text/plain'); + +print "Here are the results for user $user\n\n"; + +print $who; diff --git a/cgi2-5.cgi b/cgi2-5.cgi new file mode 100644 index 0000000..8584e27 --- /dev/null +++ b/cgi2-5.cgi @@ -0,0 +1,21 @@ +#!/usr/bin/perl -T +use strict; +use warnings; +use CGI ':standard'; + +my $dir = '/path/to/data/files/'; +my $file = param('filename'); + +if ($file =~ /^(\w[\w\.]*)$/) { + $file = $1; +} else { + die "Bad filename: $file\n"; +} + +print header(-type => 'text/plain'); + +open my $fh, '<', $file or die "Can't open $file: $!\n"; + +while (<$fh>) { + print; +} diff --git a/cgi2-6.cgi b/cgi2-6.cgi new file mode 100755 index 0000000..cdae249 --- /dev/null +++ b/cgi2-6.cgi @@ -0,0 +1,37 @@ +#!usr/bin/perl -T + +use strict; +use warnings; +use CGI ':standard'; + +my $name = param('name'); +my $age = param('age'); +my $gender = param('gender'); +my @hobbies = param('hobby'); + +my $list; + +if (@hobbies) { + $list = join ', ', @hobbies; +} else { + $list = 'None'; +} + +$name =~ s/$name), + h1("Welcome $name"), + p('Here are your details:'), + table(Tr(td('Name:'), + td($name)), + Tr(td('Age:'), + td($age)), + Tr(td('Gender:'), + td($gender)), + Tr(td('Hobbies:'), + td($list))), + end_html; diff --git a/psgi2-1.psgi b/psgi2-1.psgi new file mode 100644 index 0000000..3cae8f8 --- /dev/null +++ b/psgi2-1.psgi @@ -0,0 +1,14 @@ +#!/usr/bin/plackup +use strict; +use warnings; +use Plack::Request; + +my $app = sub { + my $req = Plack::Request->new(shift); + my $file = $req->parameters->{filename}; + + open my $fh, '<', $file or die "Can't open $file: $!\n"; + + return [ 200, [ 'Content-type' => 'text/plain' ], + [ <$fh> ] ]; +}; diff --git a/psgi2-2.psgi b/psgi2-2.psgi new file mode 100644 index 0000000..13e87aa --- /dev/null +++ b/psgi2-2.psgi @@ -0,0 +1,16 @@ +#!/usr/bin/plackup +use strict; +use warnings; +use Plack::Request; + +my $dir = '/path/to/data/files/'; + +my $app = sub { + my $req = Plack::Request->new(shift); + my $file = $dir . $req->parameters->{filename}; + + open my $fh, '<', $file or die "Can't open $file: $!\n"; + + return [ 200, [ 'Content-type' => 'text/plain' ], + [ <$fh> ] ] +} diff --git a/psgi2-3.psgi b/psgi2-3.psgi new file mode 100644 index 0000000..4558f7f --- /dev/null +++ b/psgi2-3.psgi @@ -0,0 +1,15 @@ +#!/usr/bin/plackup +use strict; +use warnings; +use Plack::Request; + +my $app = sub { + + my $req = Plack::Request->new(shift); + my $user = $req->parameters->{user}; + my $who = `finger $user`; + + return [ 200, [ 'Content-type' => 'text/plain' ], + [ "Here are the results for user $user\n\n", + $who ] ]; +} diff --git a/psgi2-4.psgi b/psgi2-4.psgi new file mode 100644 index 0000000..575a691 --- /dev/null +++ b/psgi2-4.psgi @@ -0,0 +1,23 @@ +#!/usr/bin/plackup +use strict; +use warnings; +use Plack::Request; + +$ENV{PATH} = '/bin:/usr/bin:/usr/local/bin'; + +my $app = sub { + my $req = Plack::Request->new(shift); + my $user = $req->parameters->{user}; + + if ($user =~ /^(\w+)$/) { + $user = $1; + } else { + die "Invalid user: $user\n"; + } + + my $who = `finger $user`; + + return [ 200, [ 'Content-type' => 'text/plain' ], + [ "Here are the results for user $user\n\n", + $who ] ]; +}; diff --git a/psgi2-5.psgi b/psgi2-5.psgi new file mode 100644 index 0000000..cc6d35e --- /dev/null +++ b/psgi2-5.psgi @@ -0,0 +1,22 @@ +#!/usr/bin/plackup +use strict; +use warnings; +use Plack::Request; + +my $dir = '/path/to/data/files/'; + +my $app = sub { + my $req = Plack::Request(shift); + my $file = $req->parameters->{filename}; + + if ($file =~ /^(\w[\w\.]*)$/) { + $file = $1; + } else { + die "Bad filename: $file\n"; + } + + open my $fh, '<', $file or die "Can't open $file: $!\n"; + + return [ 200, [ 'Content-type' => 'text/plain' ], + [ <$fh> ] ]; +}; diff --git a/psgi2-6.psgi b/psgi2-6.psgi new file mode 100755 index 0000000..7da59d6 --- /dev/null +++ b/psgi2-6.psgi @@ -0,0 +1,53 @@ +#!/usr/bin/plackup + +use strict; +use warnings; + +use Plack::Request; +use HTML::Tiny; + +my $app = sub { + my $req = Plack::Request->new(shift); + + my $name = $req->parameters->{name}; + my $age = $req->parameters->{age}; + my $gender = $req->parameters->{gender}; + my @hobbies = $req->parameters->get_all('hobby'); + + my $list; + + if (@hobbies) { + $list = join ', ', @hobbies; + } else { + $list = 'None'; + } + + s/new; + my $body = $h->html([ + $h->head($h->title($name)), + $h->body([ + $h->h1("Welcome $name"), + $h->p('Here are your details:'), + $h->table([ + $h->tr([ + $h->td('Name:'), + $h->td($name), + ], [ + $h->td('Age:'), + $h->td($age), + ], [ + $h->td('Gender:'), + $h->td($gender), + ], [ + $h->td('Hobbies:'), + $h->td($list), + ]), + ]), + ]), + ]); + + return [ 200, [ 'Content-type' => 'text/html' ], [ $body ] ]; +}; +