From: Christian Hansen Date: Sun, 24 Apr 2005 15:12:52 +0000 (+0000) Subject: Added $c-req->protocol and $c->req->secure X-Git-Tag: 5.7099_04~1442 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=commitdiff_plain;h=bfde09a29c9b25cca920350488ddda743a606031 Added $c-req->protocol and $c->req->secure --- diff --git a/lib/Catalyst/Engine.pm b/lib/Catalyst/Engine.pm index 1a2d3ee..9b47011 100644 --- a/lib/Catalyst/Engine.pm +++ b/lib/Catalyst/Engine.pm @@ -404,12 +404,18 @@ sub prepare { cookies => {}, headers => HTTP::Headers->new, parameters => {}, + secure => 0, snippets => [], uploads => {} } ), response => Catalyst::Response->new( - { cookies => {}, headers => HTTP::Headers->new, status => 200 } + { + body => undef, + cookies => {}, + headers => HTTP::Headers->new, + status => 200 + } ), stash => {}, state => 0 @@ -425,10 +431,10 @@ sub prepare { } $c->prepare_request($engine); - $c->prepare_path; + $c->prepare_connection; $c->prepare_headers; $c->prepare_cookies; - $c->prepare_connection; + $c->prepare_path; $c->prepare_action; my $method = $c->req->method || ''; diff --git a/lib/Catalyst/Engine/Apache.pm b/lib/Catalyst/Engine/Apache.pm index 6667669..e3c5230 100644 --- a/lib/Catalyst/Engine/Apache.pm +++ b/lib/Catalyst/Engine/Apache.pm @@ -72,8 +72,13 @@ sub prepare_body { sub prepare_connection { my $c = shift; - $c->request->hostname( $c->apache->connection->remote_host ); $c->request->address( $c->apache->connection->remote_ip ); + $c->request->hostname( $c->apache->connection->remote_host ); + $c->request->protocol( $c->apache->protocol ); + + if ( $ENV{HTTPS} ) { + $c->request->secure(1); + } } =item $c->prepare_headers @@ -101,7 +106,7 @@ sub prepare_parameters { return 1; }); - $c->request->param(\@params); + $c->request->param(@params); } =item $c->prepare_path diff --git a/lib/Catalyst/Engine/Apache/MP13.pm b/lib/Catalyst/Engine/Apache/MP13.pm index 9198b50..a9a5794 100644 --- a/lib/Catalyst/Engine/Apache/MP13.pm +++ b/lib/Catalyst/Engine/Apache/MP13.pm @@ -92,7 +92,7 @@ sub prepare_uploads { push( @uploads, $upload->name, $object ); } - $c->request->upload(\@uploads); + $c->request->upload(@uploads); } =back diff --git a/lib/Catalyst/Engine/Apache/MP19.pm b/lib/Catalyst/Engine/Apache/MP19.pm index d6b1fe0..02f9a87 100644 --- a/lib/Catalyst/Engine/Apache/MP19.pm +++ b/lib/Catalyst/Engine/Apache/MP19.pm @@ -83,7 +83,7 @@ sub prepare_request { sub prepare_uploads { my $c = shift; - # This is a workaround for a know bug with libapreq <= 2.0.5 + # This is a workaround for a know bug with libapreq <= 2.0.4 # http://svn.apache.org/viewcvs.cgi?rev=122925&view=rev my @uploads; @@ -103,7 +103,7 @@ sub prepare_uploads { } } - $c->request->upload(\@uploads); + $c->request->upload(@uploads); } =back diff --git a/lib/Catalyst/Engine/Apache/MP20.pm b/lib/Catalyst/Engine/Apache/MP20.pm index b5d38ba..7a00895 100644 --- a/lib/Catalyst/Engine/Apache/MP20.pm +++ b/lib/Catalyst/Engine/Apache/MP20.pm @@ -99,7 +99,7 @@ sub prepare_uploads { return 1; }); - $c->request->upload(\@uploads); + $c->request->upload(@uploads); } =back diff --git a/lib/Catalyst/Engine/CGI.pm b/lib/Catalyst/Engine/CGI.pm index 8950d73..3028080 100644 --- a/lib/Catalyst/Engine/CGI.pm +++ b/lib/Catalyst/Engine/CGI.pm @@ -101,8 +101,13 @@ sub prepare_body { sub prepare_connection { my $c = shift; - $c->req->hostname( $ENV{REMOTE_HOST} ); - $c->req->address( $ENV{REMOTE_ADDR} ); + $c->request->address( $ENV{REMOTE_ADDR} ); + $c->request->hostname( $ENV{REMOTE_HOST} ); + $c->request->protocol( $ENV{SERVER_PROTOCOL} ); + + if ( $ENV{HTTPS} || $ENV{SERVER_PORT} == 443 ) { + $c->request->secure(1); + } } =item $c->prepare_headers @@ -130,9 +135,9 @@ sub prepare_headers { sub prepare_parameters { my $c = shift; - + my ( @params ); - + if ( $c->request->method eq 'POST' ) { for my $param ( $c->cgi->url_param ) { for my $value ( $c->cgi->url_param($param) ) { @@ -141,13 +146,13 @@ sub prepare_parameters { } } - for my $param ( $c->cgi->param ) { + for my $param ( $c->cgi->param ) { for my $value ( $c->cgi->param($param) ) { push ( @params, $param, $value ); } } - - $c->request->param(\@params); + + $c->request->param(@params); } =item $c->prepare_path @@ -159,7 +164,7 @@ sub prepare_path { my $base; { - my $scheme = $ENV{HTTPS} ? 'https' : 'http'; + my $scheme = $c->request->secure ? 'https' : 'http'; my $host = $ENV{HTTP_HOST} || $ENV{SERVER_NAME}; my $port = $ENV{SERVER_PORT} || 80; my $path = $ENV{SCRIPT_NAME} || '/'; @@ -185,7 +190,7 @@ sub prepare_path { =cut -sub prepare_request { +sub prepare_request { my ( $c, $cgi ) = @_; $c->cgi( $cgi || CGI->new ); $c->cgi->_reset_globals; @@ -199,9 +204,9 @@ sub prepare_uploads { my $c = shift; my @uploads; - + for my $param ( $c->cgi->param ) { - + my @values = $c->cgi->param($param); next unless ref( $values[0] ); @@ -222,12 +227,12 @@ sub prepare_uploads { tempname => $tempname, type => $type ); - + push( @uploads, $param, $upload ); } } - - $c->request->upload(\@uploads); + + $c->request->upload(@uploads); } =item $c->run diff --git a/lib/Catalyst/Engine/Test.pm b/lib/Catalyst/Engine/Test.pm index 779a636..290df14 100644 --- a/lib/Catalyst/Engine/Test.pm +++ b/lib/Catalyst/Engine/Test.pm @@ -87,8 +87,9 @@ sub prepare_body { sub prepare_connection { my $c = shift; - $c->req->hostname( $c->http->hostname ); - $c->req->address( $c->http->address ); + $c->request->address( $c->http->address ); + $c->request->hostname( $c->http->hostname ); + $c->request->protocol( $c->http->request->protocol ); } =item $c->prepare_headers @@ -97,8 +98,8 @@ sub prepare_connection { sub prepare_headers { my $c = shift; - $c->req->method( $c->http->request->method ); - $c->req->headers( $c->http->request->headers ); + $c->request->method( $c->http->request->method ); + $c->request->headers( $c->http->request->headers ); } =item $c->prepare_parameters @@ -151,8 +152,8 @@ sub prepare_parameters { } } - $c->req->_assign_values( $c->req->parameters, \@params ); - $c->req->_assign_values( $c->req->uploads, \@uploads ); + $c->request->param(@params); + $c->request->upload(@uploads); } =item $c->prepare_path diff --git a/lib/Catalyst/Request.pm b/lib/Catalyst/Request.pm index d6fb488..d8b69b2 100644 --- a/lib/Catalyst/Request.pm +++ b/lib/Catalyst/Request.pm @@ -5,7 +5,7 @@ use base 'Class::Accessor::Fast'; __PACKAGE__->mk_accessors( qw/action address arguments body base cookies headers hostname match - method parameters path snippets uploads/ + method parameters path protocol secure snippets uploads/ ); *args = \&arguments; @@ -19,23 +19,6 @@ sub header { shift->headers->header(@_) } sub referer { shift->headers->referer(@_) } sub user_agent { shift->headers->user_agent(@_) } -sub _assign_values { - my ( $self, $map, $values ) = @_; - - while ( my ( $name, $value ) = splice( @{$values}, 0, 2 ) ) { - - if ( exists $map->{$name} ) { - for ( $map->{$name} ) { - $_ = [$_] unless ref($_) eq "ARRAY"; - push( @$_, $value ); - } - } - else { - $map->{$name} = $value; - } - } -} - =head1 NAME Catalyst::Request - Catalyst Request Class @@ -64,7 +47,9 @@ Catalyst::Request - Catalyst Request Class $req->params; $req->parameters; $req->path; + $req->protocol; $req->referer; + $req->secure; $req->snippets; $req->upload; $req->uploads; @@ -184,21 +169,40 @@ sub param { return keys %{ $self->parameters }; } - my $param = shift; + if ( @_ == 1 ) { - unless ( exists $self->parameters->{$param} ) { - return wantarray ? () : undef; - } + my $param = shift; - if ( ref $self->parameters->{$param} eq 'ARRAY' ) { - return (wantarray) - ? @{ $self->parameters->{$param} } - : $self->parameters->{$param}->[0]; + unless ( exists $self->parameters->{$param} ) { + return wantarray ? () : undef; + } + + if ( ref $self->parameters->{$param} eq 'ARRAY' ) { + return (wantarray) + ? @{ $self->parameters->{$param} } + : $self->parameters->{$param}->[0]; + } + else { + return (wantarray) + ? ( $self->parameters->{$param} ) + : $self->parameters->{$param}; + } } - else { - return (wantarray) - ? ( $self->parameters->{$param} ) - : $self->parameters->{$param}; + + if ( @_ => 2 ) { + + while ( my ( $field, $value ) = splice( @_, 0, 2 ) ) { + + if ( exists $self->parameters->{$field} ) { + for ( $self->parameters->{$field} ) { + $_ = [$_] unless ref($_) eq "ARRAY"; + push( @$_, $value ); + } + } + else { + $self->parameters->{$field} = $value; + } + } } } @@ -220,10 +224,18 @@ Contains the path. print $c->request->path; +=item $req->protocol + +Contains the protocol. + =item $req->referer Shortcut to $req->headers->referer. Referring page. +=item $req->secure + +Contains a boolean whether the communciation is secure. + =item $req->snippets Returns a reference to an array containing regex snippets. @@ -237,7 +249,7 @@ A convenient method to $req->uploads. $upload = $c->request->upload('field'); @uploads = $c->request->upload('field'); @fields = $c->request->upload; - + for my $upload ( $c->request->upload('field') ) { print $upload->filename; } @@ -251,27 +263,46 @@ sub upload { return keys %{ $self->uploads }; } - my $upload = shift; + if ( @_ == 1 ) { - unless ( exists $self->uploads->{$upload} ) { - return wantarray ? () : undef; - } + my $upload = shift; + + unless ( exists $self->uploads->{$upload} ) { + return wantarray ? () : undef; + } - if ( ref $self->uploads->{$upload} eq 'ARRAY' ) { - return (wantarray) - ? @{ $self->uploads->{$upload} } - : $self->uploads->{$upload}->[0]; + if ( ref $self->uploads->{$upload} eq 'ARRAY' ) { + return (wantarray) + ? @{ $self->uploads->{$upload} } + : $self->uploads->{$upload}->[0]; + } + else { + return (wantarray) + ? ( $self->uploads->{$upload} ) + : $self->uploads->{$upload}; + } } - else { - return (wantarray) - ? ( $self->uploads->{$upload} ) - : $self->uploads->{$upload}; + + if ( @_ => 2 ) { + + while ( my ( $field, $upload ) = splice( @_, 0, 2 ) ) { + + if ( exists $self->uploads->{$field} ) { + for ( $self->uploads->{$field} ) { + $_ = [$_] unless ref($_) eq "ARRAY"; + push( @$_, $upload ); + } + } + else { + $self->uploads->{$field} = $upload; + } + } } } =item $req->uploads -Returns a reference to a hash containing uploads. Values can be either a +Returns a reference to a hash containing uploads. Values can be either a hashref or a arrayref containing C objects. my $upload = $c->request->uploads->{field};