From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.0 required=3.0 tests=ALL_TRUSTED,BAYES_00 shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 488691F8C6; Thu, 2 Sep 2021 22:12:59 +0000 (UTC) Date: Thu, 2 Sep 2021 22:12:59 +0000 From: Eric Wong To: Konstantin Ryabitsev Cc: meta@public-inbox.org Subject: [PATCH] www: handle name-only publicinbox.*.url entries Message-ID: <20210902221259.GA21730@dcvr> References: <20210902191239.cmbxlmjqcsmdzmqp@meerkat.local> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <20210902191239.cmbxlmjqcsmdzmqp@meerkat.local> List-Id: Konstantin Ryabitsev wrote: > Hello: > > As reported to me today, the following page generates broken links: > > https://lore.kernel.org/lkml/20210902185610.aejfdhjl52l2ivpb@meerkat.local/ > > The url= entry in PI_CONFIG is just: > > url = tools > > Theoretically, it would be fixed if the URL was with a leading /, like so: > > url = /tools > > I can fix this in the config file, but I'm curious if that should work > regardless? I'm not sure if missing "://" is close to working, but I guess this is enough to get this part working (and fixed another bug), too: -------------8<----------- Subject: [PATCH] www: handle name-only publicinbox.*.url entries 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 Link: https://public-inbox.org/meta/20210902191239.cmbxlmjqcsmdzmqp@meerkat.local/ --- lib/PublicInbox/ExtMsg.pm | 18 ++++++++++++------ lib/PublicInbox/View.pm | 2 +- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/lib/PublicInbox/ExtMsg.pm b/lib/PublicInbox/ExtMsg.pm index 5c8bf561..b7427b1b 100644 --- a/lib/PublicInbox/ExtMsg.pm +++ b/lib/PublicInbox/ExtMsg.pm @@ -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 = "<$html> not found"; my $s = "
Message-ID <$html>\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 .= '
'; $ctx->{-title_html} = $title; - $ctx->{-upfx} = '../'; html_oneshot($ctx, $code); } @@ -253,13 +259,13 @@ sub exact { my $title = "<$html> 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('', "
Message-ID: <$html>\nfound in $end:\n\n",
 				(map {
-					my $u = $_->base_url;
+					my $u = _url_pfx($ctx, $_->base_url);
 					qq($u$html/\n)
 				} @$found),
 			$ext_urls, '
'); diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm index 94ea6148..805e785b 100644 --- a/lib/PublicInbox/View.pm +++ b/lib/PublicInbox/View.pm @@ -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: mbox.gz"; $skel .= " / follow: Atom feed)\n"; $skel .= "-- links below jump to the message on this page --\n"; - $ctx->{-upfx} = '../../'; $ctx->{cur_level} = 0; $ctx->{skel} = \$skel; $ctx->{prev_attr} = '';