X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FWeb%2FSimple%2FApplication.pm;h=65919ad4cb97bf7c29581db9ee9b1f6eaba1d9a2;hb=ea54c010c46fee647172945fae6dd4523ff6ffd2;hp=24d346302898ca6048f0f083adc82412cbfe3d97;hpb=7b930ebb30cddbb0133a0ad20e72d60a5eed5d19;p=catagits%2FWeb-Simple.git diff --git a/lib/Web/Simple/Application.pm b/lib/Web/Simple/Application.pm index 24d3463..65919ad 100644 --- a/lib/Web/Simple/Application.pm +++ b/lib/Web/Simple/Application.pm @@ -25,7 +25,6 @@ has '_dispatcher' => (is => 'lazy'); sub _build__dispatcher { my $self = shift; require Web::Dispatch; - require Web::Simple::DispatchNode; my $final = $self->_build_final_dispatcher; # We need to weaken both the copy of $self that the @@ -37,13 +36,12 @@ sub _build__dispatcher { # closes back over $self weaken($self); - my $node_args = { app_object => $self }; - weaken($node_args->{app_object}); - Web::Dispatch->new( - app => sub { $self->dispatch_request(@_), $final }, - node_class => 'Web::Simple::DispatchNode', - node_args => $node_args + my %dispatch_args = ( + dispatch_app => sub { $self->dispatch_request(@_), $final }, + dispatch_object => $self ); + weaken($dispatch_args{dispatch_object}); + Web::Dispatch->new(%dispatch_args); } sub _build_final_dispatcher { @@ -94,13 +92,13 @@ sub run { } elsif ($ENV{GATEWAY_INTERFACE}) { return $self->_run_cgi; } - unless (@ARGV && $ARGV[0] =~ m{^[A-Z/]}) { + unless (@ARGV && $ARGV[0] =~ m{(^[A-Z/])|\@}) { return $self->_run_cli(@ARGV); } my @args = @ARGV; - unshift(@args, 'GET') if $args[0] =~ m{^/}; + unshift(@args, 'GET') if $args[0] !~ /^[A-Z]/; $self->_run_cli_test_request(@args); } @@ -111,6 +109,12 @@ sub _test_request_spec_to_http_request { # if it's a reference, assume a request object return $method if ref($method); + if ($path =~ s/^(.*?)\@//) { + my $basic = $1; + require MIME::Base64; + unshift @rest, 'Authorization:', 'Basic '.MIME::Base64::encode($basic); + } + my $request = HTTP::Request->new($method => $path); my @params; @@ -146,6 +150,7 @@ sub run_test_request { my ($self, @req) = @_; require HTTP::Request; + require Plack::Test; my $request = $self->_test_request_spec_to_http_request(@req); @@ -299,6 +304,10 @@ The body of the response is sent to STDOUT and the headers to STDERR, so will generally do the right thing. +To send basic authentication credentials, use user:pass@ syntax - + + $ ./myapp GET bob:secret@/protected/path + Additionally, you can treat the file as though it were a standard PSGI application file (*.psgi). For example you can start up up with C @@ -315,11 +324,10 @@ for use via L and L. If you want to globally add middleware, you can override this method: use Web::Simple 'HelloWorld'; - use Plack::Builder; { package HelloWorld; - + use Plack::Builder; around 'to_psgi_app', sub { my ($orig, $self) = (shift, shift); @@ -370,6 +378,13 @@ this to create a form style message body. If you need to test an upload, then create an L object by hand or use the C subroutine provided by L. +If you prefix the URL with 'user:pass@' this will be converted into +an Authorization header for HTTP basic auth: + + my $res = $app->run_test_request( + GET => 'bob:secret@/protected/resource' + ); + If pairs are passed where the key ends in :, it is instead treated as a headers, so: