From 1151816fc42c7d69c2417d58abb31d214ad06780 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Wed, 2 Sep 2015 02:37:22 +0000 Subject: view: avoid links to unknown compressed Message-IDs Compressed Message-IDs are irreversible and may not be used at other sites. So avoid compressing Message-IDs we do not know about so users have a chance of finding the message in other archives by doing a Message-ID lookup. --- lib/PublicInbox/Hval.pm | 4 ++-- lib/PublicInbox/View.pm | 33 +++++++++++++++++++-------------- 2 files changed, 21 insertions(+), 16 deletions(-) (limited to 'lib/PublicInbox') diff --git a/lib/PublicInbox/Hval.pm b/lib/PublicInbox/Hval.pm index 21efe40e..0445e575 100644 --- a/lib/PublicInbox/Hval.pm +++ b/lib/PublicInbox/Hval.pm @@ -25,9 +25,9 @@ sub new { } sub new_msgid { - my ($class, $msgid) = @_; + my ($class, $msgid, $no_compress) = @_; $msgid = mid_clean($msgid); - $class->new($msgid, mid_compress($msgid)); + $class->new($msgid, $no_compress ? $msgid : mid_compress($msgid)); } sub new_oneline { diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm index 98fc133d..1528a874 100644 --- a/lib/PublicInbox/View.pm +++ b/lib/PublicInbox/View.pm @@ -132,7 +132,7 @@ sub index_entry { if (defined $irt) { unless (defined $parent_anchor) { - my $v = PublicInbox::Hval->new_msgid($irt); + my $v = PublicInbox::Hval->new_msgid($irt, 1); $v = $v->as_href; $parent_anchor = "${path}$v/"; } @@ -452,22 +452,25 @@ sub thread_inline { if ($nr <= 1) { $$dst .= "\n[no followups, yet]\n"; - return; + return (undef, in_reply_to($cur)); } my $upfx = $full_pfx ? '' : '../'; $$dst .= "\n\n~$nr messages in thread: ". "(expand)\n"; my $subj = $srch->subject_path($cur->header('Subject')); + my $parent = in_reply_to($cur); my $state = { seen => { $subj => 1 }, srch => $srch, cur => $mid, + parent_cmp => $parent ? mid_compress($parent) : '', + parent => $parent, }; for (thread_results(load_results($res))->rootset) { inline_dump($dst, $state, $upfx, $_, 0); } - $state->{next_msg}; + ($state->{next_msg}, $state->{parent}); } sub _parent_headers_nosrch { @@ -476,7 +479,7 @@ sub _parent_headers_nosrch { my $irt = in_reply_to($header_obj); if (defined $irt) { - my $v = PublicInbox::Hval->new_msgid($irt); + my $v = PublicInbox::Hval->new_msgid($irt, 1); my $html = $v->as_html; my $href = $v->as_href; $rv .= "In-Reply-To: <"; @@ -493,7 +496,7 @@ sub _parent_headers_nosrch { foreach my $ref (@raw_refs) { next if $seen{$ref}; $seen{$ref} = 1; - push @refs, linkify_ref($ref); + push @refs, linkify_ref_nosrch($ref); } if (@refs) { @@ -536,12 +539,11 @@ sub html_footer { my $upfx = $full_pfx ? '../' : '../../'; my $idx = $standalone ? " index" : ''; if ($idx && $srch) { - my $next = thread_inline(\$idx, $ctx, $mime, $full_pfx); - $irt = in_reply_to($mime->header_obj); - if (defined $irt) { - $irt = PublicInbox::Hval->new_msgid($irt); - $irt = $irt->as_href; - $irt = "parent "; + my ($next, $p) = thread_inline(\$idx, $ctx, $mime, $full_pfx); + if (defined $p) { + $p = PublicInbox::Hval->new_oneline($p); + $p = $p->as_href; + $irt = "parent "; } else { $irt = ' ' x length('parent '); } @@ -557,8 +559,8 @@ sub html_footer { "$irtreply' . $idx; } -sub linkify_ref { - my $v = PublicInbox::Hval->new_msgid($_[0]); +sub linkify_ref_nosrch { + my $v = PublicInbox::Hval->new_msgid($_[0], 1); my $html = $v->as_html; my $href = $v->as_href; "<$html>"; @@ -699,8 +701,11 @@ sub _inline_header { sub inline_dump { my ($dst, $state, $upfx, $node, $level) = @_; return unless $node; - return if $state->{stopped}; if (my $mime = $node->message) { + my $mid = mid_clean($mime->header('Message-ID')); + if ($mid eq $state->{parent_cmp}) { + $state->{parent} = $mid; + } _inline_header($dst, $state, $upfx, $mime, $level); } inline_dump($dst, $state, $upfx, $node->child, $level+1); -- cgit v1.2.3-24-ge0c7