78 lines
2.2 KiB
Perl
78 lines
2.2 KiB
Perl
package Lemonldap::NG::Handler::ApacheMP2::Request;
|
|
|
|
use strict;
|
|
use base 'Plack::Request';
|
|
use Plack::Util;
|
|
use URI;
|
|
use URI::Escape;
|
|
|
|
# Build Plack::Request (inspired from Plack::Handler::Apache2)
|
|
sub new {
|
|
my ( $class, $r ) = @_;
|
|
|
|
# $r->subprocess_env breaks header modification. That's why it is not used
|
|
# here
|
|
my ( $uri, $args ) = ( $r->uri, $r->args );
|
|
my $uri_full = $uri . ( $args ? "?$args" : '' );
|
|
my $env = {
|
|
|
|
#%ENV,
|
|
HTTP_HOST => $r->hostname,
|
|
REMOTE_ADDR => (
|
|
$r->connection->can('remote_ip') ? $r->connection->remote_ip
|
|
: $r->connection->client_ip
|
|
),
|
|
QUERY_STRING => $args,
|
|
REQUEST_URI => $uri_full,
|
|
PATH_INFO => '',
|
|
SERVER_PORT => $ENV{SERVER_PORT} || $r->get_server_port,
|
|
REQUEST_METHOD => $r->method,
|
|
'psgi.version' => [ 1, 1 ],
|
|
'psgi.url_scheme' => ( $ENV{HTTPS} || 'off' ) =~ /^(?:on|1)$/i
|
|
? 'https'
|
|
: 'http',
|
|
'psgi.input' => $r,
|
|
'psgi.errors' => *STDERR,
|
|
'psgi.multithread' => Plack::Util::FALSE,
|
|
'psgi.multiprocess' => Plack::Util::TRUE,
|
|
'psgi.run_once' => Plack::Util::FALSE,
|
|
'psgi.streaming' => Plack::Util::TRUE,
|
|
'psgi.nonblocking' => Plack::Util::FALSE,
|
|
'psgix.harakiri' => Plack::Util::TRUE,
|
|
'psgix.cleanup' => Plack::Util::TRUE,
|
|
'psgix.cleanup.handlers' => [],
|
|
'psgi.r' => $r,
|
|
};
|
|
$r->headers_in->do(
|
|
sub {
|
|
my $h = shift;
|
|
my $k = uc($h);
|
|
if ( $k ne 'HOST' ) {
|
|
$k =~ s/-/_/g;
|
|
$env->{"HTTP_$k"} = $r->headers_in->{$h};
|
|
}
|
|
return 1;
|
|
}
|
|
);
|
|
my $uri = URI->new( "http://" . $r->hostname . $r->unparsed_uri );
|
|
$env->{PATH_INFO} = uri_unescape( $uri->path );
|
|
|
|
my $self = Plack::Request->new($env);
|
|
bless $self, $class;
|
|
return $self;
|
|
}
|
|
|
|
sub data {
|
|
my ($self) = @_;
|
|
return $self->{data} ||= {};
|
|
}
|
|
|
|
sub wantJSON {
|
|
return 1
|
|
if ( defined $_[0]->accept
|
|
and $_[0]->env->{HTTP_ACCEPT} =~ m#(?:application|text)/json#i );
|
|
return 0;
|
|
}
|
|
|
|
1;
|