X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FExtMsg.pm;h=e15ababcde05e50ec515590c14a7537463045988;hb=2c69f7bc34a2b12dc7f55e2bb24fa28565f24f03;hp=d89a7e3097b50489f0e92a5df3d8eb8e7c618f86;hpb=e6085d1526b0948de16c145e11e511226126b7fa;p=public-inbox.git diff --git a/lib/PublicInbox/ExtMsg.pm b/lib/PublicInbox/ExtMsg.pm index d89a7e30..e15ababc 100644 --- a/lib/PublicInbox/ExtMsg.pm +++ b/lib/PublicInbox/ExtMsg.pm @@ -24,8 +24,10 @@ our @EXT_URL = ( 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; @@ -33,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) { @@ -85,21 +88,12 @@ sub ext_msg { eval { require PublicInbox::Msgmap }; my $have_mm = $@ ? 0 : 1; - my $cgi = $ctx->{cgi}; - my $base_url; - my $scheme; - if (ref($cgi) eq 'CGI') { - $base_url = $cgi->url(-base) . '/'; - $scheme = $cgi->protocol; - } else { # Plack::Request - $base_url = $cgi->base->as_string; - $scheme = $cgi->env->{'psgi.url_scheme'}; - } + my $base_url = $cgi->base->as_string; if ($have_mm) { my $tmp_mid = $mid; my $url; again: - $url = $base_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; @@ -145,8 +139,8 @@ again: if (@EXT_URL && index($mid, '@') >= 0) { $code = 300; $s .= "\nPerhaps try an external site:\n\n"; - foreach my $u (@EXT_URL) { - $u = "$scheme:$u" if $u =~ m!\A//!; + 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}; @@ -154,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