X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FExtMsg.pm;h=e15ababcde05e50ec515590c14a7537463045988;hb=2c69f7bc34a2b12dc7f55e2bb24fa28565f24f03;hp=a56df335d61adcf3217b9848f9d16944c570c730;hpb=fb72c5fb4353103b7928780f83d5e79b78038823;p=public-inbox.git diff --git a/lib/PublicInbox/ExtMsg.pm b/lib/PublicInbox/ExtMsg.pm index a56df335..e15ababc 100644 --- a/lib/PublicInbox/ExtMsg.pm +++ b/lib/PublicInbox/ExtMsg.pm @@ -16,15 +16,18 @@ use PublicInbox::MID qw/mid2path/; our @EXT_URL = ( 'http://mid.gmane.org/%s', 'https://lists.debian.org/msgid-search/%s', - 'http://mid.mail-archive.com/%s', - 'http://marc.info/?i=%s', + # leading "//" denotes protocol-relative (http:// or https://) + '//mid.mail-archive.com/%s', + '//marc.info/?i=%s', ); sub ext_msg { my ($ctx) = @_; my $pi_config = $ctx->{pi_config}; - my $listname = $ctx->{listname}; + my $inbox = $ctx->{inbox}; my $mid = $ctx->{mid}; + my $cgi = $ctx->{cgi}; + my $env = $cgi->{env}; eval { require PublicInbox::Search }; my $have_xap = $@ ? 0 : 1; @@ -32,16 +35,17 @@ sub ext_msg { foreach my $k (keys %$pi_config) { $k =~ /\Apublicinbox\.([A-Z0-9a-z-]+)\.url\z/ or next; - my $list = $1; - next if $list eq $listname; + my $name = $1; + next if $name eq $inbox; - my $git_dir = $pi_config->{"publicinbox.$list.mainrepo"}; + my $git_dir = $pi_config->{"publicinbox.$name.mainrepo"}; defined $git_dir or next; - my $url = $pi_config->{"publicinbox.$list.url"}; + my $url = $pi_config->{"publicinbox.$name.url"}; defined $url or next; $url =~ s!/+\z!!; + $url = PublicInbox::Hval::prurl($env, $url); # try to find the URL with Xapian to avoid forking if ($have_xap) { @@ -84,13 +88,12 @@ sub ext_msg { eval { require PublicInbox::Msgmap }; my $have_mm = $@ ? 0 : 1; + my $base_url = $cgi->base->as_string; if ($have_mm) { my $tmp_mid = $mid; + my $url; again: - my $cgi = $ctx->{cgi}; - my $url = ref($cgi) eq 'CGI' ? $cgi->url(-base) . '/' - : $cgi->base->as_string; # Plack::Request - $url .= $listname; + $url = $base_url . $inbox; unshift @pfx, { git_dir => $ctx->{git_dir}, url => $url }; foreach my $pfx (@pfx) { my $git_dir = delete $pfx->{git_dir} or next; @@ -124,7 +127,7 @@ again: foreach my $pfx (@partial) { my $u = $pfx->{url}; foreach my $m (@{$pfx->{res}}) { - my $p = PublicInbox::Hval->new($m); + my $p = PublicInbox::Hval->new_msgid($m); my $r = $p->as_href; my $t = $p->as_html; $s .= qq{$u/$t/\n}; @@ -136,7 +139,8 @@ again: if (@EXT_URL && index($mid, '@') >= 0) { $code = 300; $s .= "\nPerhaps try an external site:\n\n"; - foreach my $u (@EXT_URL) { + foreach my $url (@EXT_URL) { + my $u = PublicInbox::Hval::prurl($env, $url); my $r = sprintf($u, $href); my $t = sprintf($u, $html); $s .= qq{$t\n}; @@ -144,7 +148,7 @@ again: } $s .= ''; - [300, ['Content-Type'=>'text/html; charset=UTF-8'], [$s]]; + [$code, ['Content-Type'=>'text/html; charset=UTF-8'], [$s]]; } # Redirect to another public-inbox which is mapped by $pi_config