use Plack::Loader;
use Plack::Middleware::Conditional;
use Plack::Middleware::ReverseProxy;
+use Encode ();
+use utf8;
use namespace::clean -except => 'meta';
$c->res->content_type('text/html; charset=utf-8');
my $name = ref($c)->config->{name} || join(' ', split('::', ref $c));
+
+ # Prevent Catalyst::Plugin::Unicode::Encoding from running.
+ # This is a little nasty, but it's the best way to be clean whether or
+ # not the user has an encoding plugin.
+
+ if ($c->can('encoding')) {
+ $c->{encoding} = '';
+ }
my ( $title, $error, $infos );
if ( $c->debug ) {
</body>
</html>
-
# Trick IE. Old versions of IE would display their own error page instead
# of ours if we'd give it less than 512 bytes.
$c->res->{body} .= ( ' ' x 512 );
+ $c->res->{body} = Encode::encode("UTF-8", $c->res->{body});
+
# Return 500
$c->res->status(500);
}
my $base_path = $env->{SCRIPT_NAME} || "/";
# set the request URI
- my $req_uri = $env->{REQUEST_URI};
- $req_uri =~ s/\?.*$//;
- my $path = $req_uri;
- $path =~ s{^/+}{};
+ my $path;
+ if (!$ctx->config->{use_request_uri_for_path}) {
+ my $path_info = $env->{PATH_INFO};
+ if ( exists $env->{REDIRECT_URL} ) {
+ $base_path = $env->{REDIRECT_URL};
+ $base_path =~ s/\Q$path_info\E$//;
+ }
+ $path = $base_path . $path_info;
+ $path =~ s{^/+}{};
+ $path =~ s/([^$URI::uric])/$URI::Escape::escapes{$1}/go;
+ $path =~ s/\?/%3F/g; # STUPID STUPID SPECIAL CASE
+ }
+ else {
+ my $req_uri = $env->{REQUEST_URI};
+ $req_uri =~ s/\?.*$//;
+ $path = $req_uri;
+ $path =~ s{^/+}{};
+ }
# Using URI directly is way too slow, so we construct the URLs manually
my $uri_class = "URI::$scheme";
=cut
sub run {
- my ($self, $app, @args) = @_;
+ my ($self, $app, $psgi, @args) = @_;
+ # FIXME - Do something sensible with the options we're passed
my $server = pop @args if blessed $args[-1];
$server ||= Plack::Loader->auto(); # We're not being called from a script,
# so auto detect what backend to run on.
# This does *NOT* cover mod_perl.
- # FIXME - Do something sensible with the options we're passed
- my $psgi = $self->build_psgi_app($app, @args);
$server->run($psgi);
}
sub build_psgi_app {
my ($self, $app, @args) = @_;
- my $psgi_app = sub {
+ return sub {
my ($env) = @_;
return sub {
$app->handle_request(env => $env);
};
};
-
- $psgi_app = Plack::Middleware::Conditional->wrap(
- $psgi_app,
- condition => sub {
- my ($env) = @_;
- return if $app->config->{ignore_frontend_proxy};
- return $env->{REMOTE_ADDR} eq '127.0.0.1' || $app->config->{using_frontend_proxy};
- },
- builder => sub { Plack::Middleware::ReverseProxy->wrap($_[0]) },
- );
-
- return $psgi_app;
}
=head2 $self->write($c, $buffer)