# single pass linkification of <Message-ID@example.com> within $str
# with $pfx being the URL prefix
sub linkify_mids {
- my ($self, $pfx, $str) = @_;
+ my ($self, $pfx, $str, $raw) = @_;
$$str =~ s!<([^>]+)>!
my $msgid = PublicInbox::Hval->new_msgid($1);
my $html = $msgid->as_html;
# salt this, as this could be exploited to show
# links in the HTML which don't show up in the raw mail.
my $key = sha1_hex($html . $SALT);
- $self->{$key} = [ $href, $html ];
- '<PI-LINK-'. $key . '>';
+ my $repl = qq(<<a\nhref="$pfx/$href/">$html</a>>);
+ $repl .= qq{ (<a\nhref="$pfx/$href/raw">raw</a>)} if $raw;
+ $self->{$key} = $repl;
+ 'PI-LINK-'. $key;
!ge;
$$str = ascii_html($$str);
$$str =~ s!\bPI-LINK-([a-f0-9]{40})\b!
my $key = $1;
my $repl = $_[0]->{$key};
if (defined $repl) {
- "<a\nhref=\"$pfx/$repl->[0]/\">$repl->[1]</a>";
+ $repl;
} else {
# false positive or somebody tried to mess with us
$key;
$rv .= "Message-ID: <$mhtml> ";
$rv .= "(<a\nhref=\"raw\">raw</a>)\n";
} else {
- foreach (@$mids) {
- my $mid = PublicInbox::Hval->new_msgid($_);
- my $mhtml = $mid->as_html;
- my $href = $mid->{href};
- $rv .= "Message-ID: ";
- $rv .= "<<a\nhref=\"../$href/\">$mhtml</a>> ";
- $rv .= "(<a\nhref=\"../$href/raw\">raw</a>)\n";
- }
+ my $lnk = PublicInbox::Linkify->new;
+ my $s = '';
+ $s .= "Message-ID: $_\n" for ($hdr->header_raw('Message-ID'));
+ $lnk->linkify_mids('..', \$s, 1);
+ $rv .= $s;
}
$rv .= _parent_headers($hdr, $over);
$rv .= "\n";