X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/1ea91b267302b1615da6eb6a3a992c057bbdf0c6..c56d48dbd92fbb24b6d0da77df4dc5384f6e564f:/IkiWiki/Plugin/mailbox.pm diff --git a/IkiWiki/Plugin/mailbox.pm b/IkiWiki/Plugin/mailbox.pm index 14a4a7810..92ddf99f3 100644 --- a/IkiWiki/Plugin/mailbox.pm +++ b/IkiWiki/Plugin/mailbox.pm @@ -19,7 +19,8 @@ use Email::Thread; use CGI 'escapeHTML'; use File::Temp qw/tempfile/; use File::MimeInfo::Magic; - +use Date::Parse; +use Email::Address; my %metaheaders; @@ -35,9 +36,11 @@ sub import { #{{{ sub scan(@){ my %params=@_; my $page=$params{page}; + + my $linktext=$config{url}.'/mailbox.css'; push @{$metaheaders{$page}}, - '' + '' } sub preprocess (@) { #{{{ @@ -60,6 +63,12 @@ sub preprocess (@) { #{{{ } # }}} +sub mbox_htmlize(@){ + my %params=@_; + + my $path=$config{srcdir} . '/' . $params{page}.".mbox"; + return format_mailbox(path=>$path,type=>'Mbox',destpage=>$params{page}); +} ### The guts of the plugin ### parameters @@ -74,7 +83,11 @@ sub format_mailbox(@){ $threader->thread(); - return join "\n", map { format_thread(%params,thread=>$_) } $threader->rootset; + my @roots= sort { str2time($a->header('Date')) <=> + str2time($b->header('Date'))} ($threader->rootset); + + return join "\n", map { format_thread(%params,thread=>$_) } @roots; + } sub format_thread(@){ @@ -102,11 +115,36 @@ sub format_thread(@){ return $output; } +sub sanitize_address($$){ + my $hdrname=shift; + my $val=shift; + my $strategy= $config{mailbox_obfuscation_strategy} || "delete"; + + return $val if ($strategy eq "none"); + + if ($hdrname =~ qr/From|To|Reply-To|CC/){ + my @addrs=Email::Address->parse($val); + foreach my $addr (@addrs){ + if ($strategy eq "rot13"){ + my $orig=$addr->address; + $orig =~ y/A-Za-z/N-ZA-Mn-za-m/; + $addr->address($orig); + } else { + $addr->address(gettext("address deleted")); + } + } + $val=join(",",map {$_->format;} @addrs); + } + return $val; + } + sub make_pair($$){ my $message=shift; my $name=shift; - my $val=$message->header($_); - + my $val=$message->header($name); + + $val = sanitize_address($name,$val); + $val = escapeHTML($val); my $hash={'HEADERNAME'=>$name,'VAL'=>$val}; @@ -130,8 +168,10 @@ sub format_message(@){ my $output=""; my @names = grep {m/$keep_headers/;} ($message->header_names); + my @headers=map { make_pair($message,$_) } @names; + $template->param(HEADERS=>[@headers]); @@ -215,6 +255,11 @@ sub pagetemplate (@) { #{{{ my $destpage=$params{destpage}; my $template=$params{template}; + + if ($page =~ /.*comments/ && defined($config{mailbox_copyright})){ + $template->param(COPYRIGHT=>$config{mailbox_copyright}); + } + if (exists $metaheaders{$page} && $template->query(name => "meta")) { # avoid duplicate meta lines my %seen;