X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FWWW.pm;h=534ee0285c8b6c5294b27b71ec605ed25fc5e828;hb=b836c9d3a2053fa97a98cc38e1657d3266173c7e;hp=99f9f1dc258d2af531349e22eec173c64abd4119;hpb=02f9b34f398bef722159cd54a629441f861d37b7;p=public-inbox.git diff --git a/lib/PublicInbox/WWW.pm b/lib/PublicInbox/WWW.pm index 99f9f1dc..534ee028 100644 --- a/lib/PublicInbox/WWW.pm +++ b/lib/PublicInbox/WWW.pm @@ -1,4 +1,4 @@ -# Copyright (C) 2014-2019 all contributors +# Copyright (C) 2014-2020 all contributors # License: AGPL-3.0+ # # Main web interface for mailing list archives @@ -19,10 +19,9 @@ use PublicInbox::Config; use PublicInbox::Hval; use URI::Escape qw(uri_unescape); use PublicInbox::MID qw(mid_escape); -require PublicInbox::Git; use PublicInbox::GitHTTPBackend; use PublicInbox::UserContent; -use PublicInbox::WwwStatic qw(r); +use PublicInbox::WwwStatic qw(r path_info_raw); # TODO: consider a routing tree now that we have more endpoints: our $INBOX_RE = qr!\A/([\w\-][\w\.\-]*)!; @@ -43,19 +42,6 @@ sub run { PublicInbox::WWW->new->call($req->env); } -# PATH_INFO is decoded, and we want the undecoded original -my %path_re_cache; -sub path_info_raw ($) { - my ($env) = @_; - my $sn = $env->{SCRIPT_NAME}; - my $re = $path_re_cache{$sn} ||= do { - $sn = '/'.$sn unless index($sn, '/') == 0; - $sn =~ s!/\z!!; - qr!\A(?:https?://[^/]+)?\Q$sn\E(/[^\?\#]+)!; - }; - $env->{REQUEST_URI} =~ $re ? $1 : $env->{PATH_INFO}; -} - sub call { my ($self, $env) = @_; my $ctx = { env => $env, www => $self }; @@ -83,7 +69,7 @@ sub call { return invalid_inbox($ctx, $1) || mbox_results($ctx); } } - elsif ($method !~ /\AGET|HEAD\z/) { + elsif ($method !~ /\A(?:GET|HEAD)\z/) { return r(405); } @@ -98,6 +84,8 @@ sub call { invalid_inbox($ctx, $1) || get_atom($ctx); } elsif ($path_info =~ m!$INBOX_RE/new\.html\z!o) { invalid_inbox($ctx, $1) || get_new($ctx); + } elsif ($path_info =~ m!$INBOX_RE/description\z!o) { + get_description($ctx, $1); } elsif ($path_info =~ m!$INBOX_RE/(?:(?:git/)?([0-9]+)(?:\.git)?/)? ($PublicInbox::GitHTTPBackend::ANY)\z!ox) { my ($epoch, $path) = ($2, $3); @@ -147,18 +135,21 @@ sub call { # for CoW-friendliness, MOOOOO! sub preload { my ($self) = @_; + require PublicInbox::ExtMsg; require PublicInbox::Feed; require PublicInbox::View; require PublicInbox::SearchThread; require PublicInbox::MIME; - require Digest::SHA; - require POSIX; + require PublicInbox::Mbox; + require PublicInbox::ViewVCS; + require PublicInbox::WwwText; + require PublicInbox::WwwAttach; eval { require PublicInbox::Search; PublicInbox::Search::load_xapian(); }; foreach (qw(PublicInbox::SearchView - PublicInbox::Mbox IO::Compress::Gzip + PublicInbox::MboxGz PublicInbox::NewsWWW)) { eval "require $_;"; } @@ -634,4 +625,13 @@ sub get_css ($$$) { [ 200, $h, [ $css ] ]; } +sub get_description { + my ($ctx, $inbox) = @_; + invalid_inbox($ctx, $inbox) || do { + my $d = $ctx->{-inbox}->description . "\n"; + [ 200, [ 'Content-Length', bytes::length($d), + 'Content-Type', 'text/plain' ], [ $d ] ]; + }; +} + 1;