X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=public-inbox.cgi;h=ee9510c1f012757163076cf8b991af64f78ac6d8;hb=65ff86f333a1f8276943248efef7fa2a64afe9e3;hp=57935c50d62fc1ed8d282a04ee2e3dede66a62a9;hpb=a6134a0ca3ac69f2dfe353019c35eb36db3d831e;p=public-inbox.git diff --git a/public-inbox.cgi b/public-inbox.cgi index 57935c50..ee9510c1 100755 --- a/public-inbox.cgi +++ b/public-inbox.cgi @@ -1,40 +1,32 @@ #!/usr/bin/perl -w -# Copyright (C) 2014, Eric Wong and all contributors -# License: AGPLv3 or later (https://www.gnu.org/licenses/agpl-3.0.txt) +# Copyright (C) 2014-2016 all contributors +# License: AGPL-3.0+ or later +# +# Enables using PublicInbox::WWW as a CGI script use strict; use warnings; -require PublicInbox::WWW; -use CGI qw/-nosticky/; -our $NO_SCRIPT_NAME; -BEGIN { - $NO_SCRIPT_NAME = 1 if $ENV{NO_SCRIPT_NAME}; - CGI->compile if $ENV{MOD_PERL}; -} +use Plack::Loader; +use Plack::Builder; +use Plack::Request; +use Plack::Handler::CGI; +use PublicInbox::WWW; +BEGIN { PublicInbox::WWW->preload if $ENV{MOD_PERL} } +my $www = PublicInbox::WWW->new; +my $have_deflater = eval { require Plack::Middleware::Deflater; 1 }; +my $app = builder { + if ($have_deflater) { + enable 'Deflater', + content_type => [ 'text/html', 'text/plain', + 'application/atom+xml' ]; + } -# some servers (Ruby webrick) include scheme://host[:port] here, -# which confuses CGI.pm when generating self_url. -# RFC 3875 does not mention REQUEST_URI at all, -# so nuke it since CGI.pm functions without it. -delete $ENV{REQUEST_URI}; -$ENV{SCRIPT_NAME} = '' if $NO_SCRIPT_NAME; -my $req = CGI->new; -my $ret = PublicInbox::WWW::run($req, $req->request_method); -binmode STDOUT; -if (@ARGV && $ARGV[0] eq 'static') { - print $ret->[2]->[0]; # only show the body -} else { # CGI - my ($status, $headers, $body) = @$ret; - my %codes = ( - 200 => 'OK', - 301 => 'Moved Permanently', - 404 => 'Not Found', - 405 => 'Method Not Allowed', - ); + # Enable to ensure redirects and Atom feed URLs are generated + # properly when running behind a reverse proxy server which + # sets X-Forwarded-For and X-Forwarded-Proto request headers. + # See Plack::Middleware::ReverseProxy documentation for details + # enable 'ReverseProxy'; - print "Status: $status $codes{$status}\r\n"; - my @tmp = @$headers; - while (my ($k, $v) = splice(@tmp, 0, 2)) { - print "$k: $v\r\n"; - } - print "\r\n", $body->[0]; -} + enable 'Head'; + sub { $www->call(@_) }; +}; +Plack::Handler::CGI->new->run($app);