]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/WWW.pm
get rid of Message-ID compression entirely
[public-inbox.git] / lib / PublicInbox / WWW.pm
index 9ae7f7be40296ce11f68f9c3416cffb68ab901a8..11b540276d8c57a96e6c0335493314d7049819fb 100644 (file)
@@ -88,7 +88,14 @@ sub preload {
 
 # private functions below
 
-sub r404 { r(404, 'Not Found') }
+sub r404 {
+       my ($ctx) = @_;
+       if ($ctx && $ctx->{mid}) {
+               require PublicInbox::ExtMsg;
+               return PublicInbox::ExtMsg::ext_msg($ctx);
+       }
+       r(404, 'Not Found');
+}
 
 # simple response for errors
 sub r { [ $_[0], ['Content-Type' => 'text/plain'], [ join(' ', @_, "\n") ] ] }
@@ -109,8 +116,18 @@ sub invalid_list {
 sub invalid_list_mid {
        my ($ctx, $listname, $mid) = @_;
        my $ret = invalid_list($ctx, $listname, $mid);
-       $ctx->{mid} = uri_unescape($mid) unless $ret;
-       $ret;
+       return $ret if $ret;
+
+       $ctx->{mid} = $mid = uri_unescape($mid);
+       if ($mid =~ /\A[a-f0-9]{40}\z/) {
+               if ($mid = mid2blob($ctx)) {
+                       require Email::Simple;
+                       use PublicInbox::MID qw/mid_clean/;
+                       $mid = Email::Simple->new($mid);
+                       $ctx->{mid} = mid_clean($mid->header('Message-ID'));
+               }
+       }
+       undef;
 }
 
 # /$LISTNAME/new.atom                     -> Atom feed, includes replies
@@ -151,7 +168,7 @@ sub mid2blob {
 # /$LISTNAME/$MESSAGE_ID/raw                    -> raw mbox
 sub get_mid_txt {
        my ($ctx) = @_;
-       my $x = mid2blob($ctx) or return r404();
+       my $x = mid2blob($ctx) or return r404($ctx);
        require PublicInbox::Mbox;
        PublicInbox::Mbox::emit1($x);
 }
@@ -159,7 +176,7 @@ sub get_mid_txt {
 # /$LISTNAME/$MESSAGE_ID/                   -> HTML content (short quotes)
 sub get_mid_html {
        my ($ctx) = @_;
-       my $x = mid2blob($ctx) or return r404();
+       my $x = mid2blob($ctx) or return r404($ctx);
 
        require PublicInbox::View;
        my $foot = footer($ctx);
@@ -173,7 +190,7 @@ sub get_mid_html {
 # /$LISTNAME/$MESSAGE_ID/f/                   -> HTML content (fullquotes)
 sub get_full_html {
        my ($ctx) = @_;
-       my $x = mid2blob($ctx) or return r404();
+       my $x = mid2blob($ctx) or return r404($ctx);
 
        require PublicInbox::View;
        my $foot = footer($ctx);