]> Sergey Matveev's repositories - public-inbox.git/commitdiff
www: handle name-only publicinbox.*.url entries
authorEric Wong <e@80x24.org>
Thu, 2 Sep 2021 22:12:59 +0000 (22:12 +0000)
committerEric Wong <e@80x24.org>
Thu, 2 Sep 2021 22:58:21 +0000 (22:58 +0000)
Apparently URLs can be configured relatively for HTTP(S) setups,
attempt to support them when linking to cross-posted messages.

This also fixes the top-row (mirror/help/color/Atom feed) links
in /$INBOX_URL/$EXTMSG_MSGID/T/ (and /t/) URLs.

Reported-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
Link: https://public-inbox.org/meta/20210902191239.cmbxlmjqcsmdzmqp@meerkat.local/
lib/PublicInbox/ExtMsg.pm
lib/PublicInbox/View.pm

index 5c8bf5611bff1900747cd3c90c366682ad37985b..b7427b1bcbcaca89836aab1692bf149fab8f3566 100644 (file)
@@ -117,7 +117,7 @@ sub ext_msg_ALL ($) {
                        $k =~ s/:[0-9]+:$x->{blob}\z// or next;
                        next if $k eq $cur_key;
                        my $ibx = $by_eidx_key->{$k} // next;
-                       my $url = $ibx->base_url or next;
+                       $ibx->base_url or next;
                        push(@{$ctx->{found}}, $ibx) unless $seen{$k}++;
                }
        }
@@ -188,6 +188,12 @@ sub finalize_exact {
        finalize_partial($ctx);
 }
 
+sub _url_pfx ($$) {
+       my ($ctx, $u) = @_;
+       (index($u, '://') < 0 && index($u, '/') != 0) ?
+               "$ctx->{-upfx}../$u" : $u;
+}
+
 sub partial_response ($) {
        my ($ctx) = @_;
        my $mid = $ctx->{mid};
@@ -196,6 +202,7 @@ sub partial_response ($) {
        my $html = ascii_html($mid);
        my $title = "&lt;$html&gt; not found";
        my $s = "<pre>Message-ID &lt;$html&gt;\nnot found\n";
+       $ctx->{-upfx} //= '../';
        if (my $n_partial = $ctx->{n_partial}) {
                $code = 300;
                my $es = $n_partial == 1 ? '' : 'es';
@@ -204,8 +211,8 @@ sub partial_response ($) {
                my $cur_name = $ctx->{ibx}->{name};
                foreach my $pair (@{$ctx->{partial}}) {
                        my ($ibx, $res) = @$pair;
-                       my $env = $ctx->{env} if $ibx->{name} eq $cur_name;
-                       my $u = $ibx->base_url($env) or next;
+                       my $e = $ibx->{name} eq $cur_name ? $ctx->{env} : undef;
+                       my $u = _url_pfx($ctx, $ibx->base_url($e) // next);
                        foreach my $m (@$res) {
                                my $href = mid_href($m);
                                my $html = ascii_html($m);
@@ -220,7 +227,6 @@ sub partial_response ($) {
        }
        $ctx->{-html_tip} = $s .= '</pre>';
        $ctx->{-title_html} = $title;
-       $ctx->{-upfx} = '../';
        html_oneshot($ctx, $code);
 }
 
@@ -253,13 +259,13 @@ sub exact {
        my $title = "&lt;$html&gt; found in ";
        my $end = @$found == 1 ? 'another inbox' : 'other inboxes';
        $ctx->{-title_html} = $title . $end;
-       $ctx->{-upfx} = '../';
+       $ctx->{-upfx} //= '../';
        my $ext_urls = ext_urls($ctx, $mid, $href, $html);
        my $code = (@$found == 1 && $ext_urls eq '') ? 200 : 300;
        $ctx->{-html_tip} = join('',
                        "<pre>Message-ID: &lt;$html&gt;\nfound in $end:\n\n",
                                (map {
-                                       my $u = $_->base_url;
+                                       my $u = _url_pfx($ctx, $_->base_url);
                                        qq(<a\nhref="$u$href/">$u$html/</a>\n)
                                } @$found),
                        $ext_urls, '</pre>');
index 94ea614894e9d653926c3b89224f01a22b2f0684..805e785bfedca66385e2ecc056cd4c26ceaf7971 100644 (file)
@@ -432,6 +432,7 @@ sub stream_thread ($$) {
 # /$INBOX/$MSGID/t/ and /$INBOX/$MSGID/T/
 sub thread_html {
        my ($ctx) = @_;
+       $ctx->{-upfx} = '../../';
        my $mid = $ctx->{mid};
        my $ibx = $ctx->{ibx};
        my ($nr, $msgs) = $ibx->over->get_thread($mid);
@@ -455,7 +456,6 @@ EOF
        $skel .= " (download: <a\nhref=\"../t.mbox.gz\">mbox.gz</a>";
        $skel .= " / follow: <a\nhref=\"../t.atom\">Atom feed</a>)\n";
        $skel .= "-- links below jump to the message on this page --\n";
-       $ctx->{-upfx} = '../../';
        $ctx->{cur_level} = 0;
        $ctx->{skel} = \$skel;
        $ctx->{prev_attr} = '';