PEF-Front

 view release on metacpan or  search on metacpan

lib/PEF/Front/Request.pm  view on Meta::CPAN

package PEF::Front::Request;
use strict;
use warnings;
use JSON;
use Carp ();
use utf8;
use Encode;
use PEF::Front::Headers;
use PEF::Front::File;
use PEF::Front::Config;
use XML::Simple;
use URI;

my $coro_ae = $INC{'Coro/AnyEvent.pm'} ? 1 : 0;

sub new {
	my ($class, $env) = @_;
	Carp::croak(q{$env is required})
		unless defined $env && ref($env) eq 'HASH';
	my $self = bless {env => $env}, $class;
	$self->_parse;
	$self;
}
sub env               {$_[0]->{env}}
sub remote_ip         {$_[0]->{env}{REMOTE_ADDR}}
sub protocol          {$_[0]->{env}{SERVER_PROTOCOL}}
sub http_method       {$_[0]->{env}{REQUEST_METHOD}}
sub port              {$_[0]->{env}{SERVER_PORT}}
sub user              {$_[0]->{env}{REMOTE_USER}}
sub request_uri       {$_[0]->{env}{REQUEST_URI}}
sub path_info         {$_[0]->{env}{PATH_INFO}}
sub query_string      {$_[0]->{env}{QUERY_STRING}}
sub script_name       {$_[0]->{env}{SCRIPT_NAME}}
sub scheme            {$_[0]->{env}{'psgi.url_scheme'}}
sub uri               {URI->new($_[0]->base)}
sub secure            {$_[0]->scheme eq 'https'}
sub _input            {$_[0]->{env}{'psgi.input'}}
sub content_length    {$_[0]->{env}{CONTENT_LENGTH}}
sub content_type      {$_[0]->{env}{CONTENT_TYPE}}
sub raw_body          {$_[0]->{raw_body}}
sub content_encoding  {$_[0]->headers->get_header("content_encoding")}
sub header            {$_[0]->headers->get_header($_[1])}
sub referer           {$_[0]->headers->get_header("referer")}
sub user_agent        {$_[0]->headers->get_header("user_agent")}
sub set_out_header    {$_[0]->out_headers->set_header($_[1] => $_[2])}
sub remove_out_header {$_[0]->out_headers->remove_header($_[1])}
sub get_out_header    {$_[0]->out_headers->get_header($_[1])}
sub set_out_cookie    {$_[0]->out_cookies->set_header($_[1] => $_[2])}
sub remove_out_cookie {$_[0]->out_cookies->remove_header($_[1])}
sub get_out_cookie    {$_[0]->out_cookies->get_header($_[1])}

sub method {
	my $xm = $_[0]{method};
	return $xm if $xm;
	if (my $hmo = $_[0]->{env}{HTTP_X_HTTP_METHOD_OVERRIDE}) {
		$_[0]{method} = uc $hmo;
	} elsif (
		$_[0]->{env}{HTTP_UPGRADE}
		&& $_[0]->{env}{HTTP_CONNECTION}
		&& $_[0]->{env}{HTTP_UPGRADE} eq 'WebSocket'
		&& $_[0]->{env}{HTTP_CONNECTION} eq 'Upgrade'
		)
	{
		$_[0]{method} = 'WEBSOCKET';
	} elsif ($_[0]->{env}{HTTP_ACCEPT}
		&& $_[0]->{env}{HTTP_ACCEPT} eq 'text/event-stream')
	{
		$_[0]{method} = 'SSE';
	} else {
		$_[0]{method} = $_[0]->{env}{REQUEST_METHOD};
	}
	$_[0]{method};
}



( run in 0.704 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )