From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS16276 167.114.0.0/16 X-Spam-Status: No, score=-2.2 required=3.0 tests=AWL,BAYES_00,RCVD_IN_XBL, URIBL_BLOCKED shortcircuit=no autolearn=no version=3.3.2 X-Original-To: meta@public-inbox.org Received: from 80x24.org (mars.m3l.io [167.114.185.125]) by dcvr.yhbt.net (Postfix) with ESMTP id BE37F63385A for ; Thu, 3 Sep 2015 01:57:26 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 3/3] ExtMsg: 300 to external mailing list archives Date: Thu, 3 Sep 2015 01:57:12 +0000 Message-Id: <1441245432-16378-4-git-send-email-e@80x24.org> In-Reply-To: <1441245432-16378-1-git-send-email-e@80x24.org> References: <1441245432-16378-1-git-send-email-e@80x24.org> List-Id: Since cross-posting is inevitable, we shall link to external message archives for interopability. --- lib/PublicInbox/ExtMsg.pm | 30 ++++++++++++++++++++++++++++-- public-inbox.cgi | 1 + t/cgi.t | 6 +++--- 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/lib/PublicInbox/ExtMsg.pm b/lib/PublicInbox/ExtMsg.pm index bdbff78..3e0e6e4 100644 --- a/lib/PublicInbox/ExtMsg.pm +++ b/lib/PublicInbox/ExtMsg.pm @@ -7,6 +7,14 @@ use URI::Escape qw(uri_escape_utf8); use PublicInbox::Hval; use PublicInbox::MID qw/mid_compress mid2path/; +# TODO: user-configurable +our @EXT_URL = ( + 'http://mid.gmane.org/%s', + 'https://lists.debian.org/msgid-search/%s', + 'http://mid.mail-archive.com/%s', + 'http://marc.info/?i=%s', +); + sub ext_msg { my ($ctx) = @_; my $pi_config = $ctx->{pi_config}; @@ -74,9 +82,27 @@ sub ext_msg { } } - # Fall back to external repos + my $code = 404; + my $h = PublicInbox::Hval->new_msgid($mid, 1); + my $href = $h->as_href; + my $html = $h->as_html; + my $title = "Message-ID <$html> not found"; + + # Fall back to external repos if configured + my $s = "$title" . + "
$title";
+
+	if (@EXT_URL) {
+		$code = 300;
+		$s .= "\n\nPerhaps try an external site:\n\n";
+		foreach my $u (@EXT_URL) {
+			my $r = sprintf($u, $href);
+			my $t = sprintf($u, $html);
+			$s .= qq{$t\n};
+		}
+	}
 
-	[404, ['Content-Type'=>'text/plain'], ['Not found']];
+	[300, ['Content-Type'=>'text/html; charset=UTF-8'], [$s]];
 }
 
 # Redirect to another public-inbox which is mapped by $pi_config
diff --git a/public-inbox.cgi b/public-inbox.cgi
index 1fcc04f..b095621 100755
--- a/public-inbox.cgi
+++ b/public-inbox.cgi
@@ -17,6 +17,7 @@ BEGIN {
 
 	%HTTP_CODES = (
 		200 => 'OK',
+		300 => 'Multiple Choices',
 		301 => 'Moved Permanently',
 		302 => 'Found',
 		404 => 'Not Found',
diff --git a/t/cgi.t b/t/cgi.t
index a6600c2..b0af8ae 100644
--- a/t/cgi.t
+++ b/t/cgi.t
@@ -160,19 +160,19 @@ EOF
 	like($res->{body}, qr/Message-Id: /,
 		"mid raw hit");
 	$res = cgi_run("/test/blahblah\@example.con/raw");
-	like($res->{head}, qr/Status: 404 Not Found/, "mid raw miss");
+	like($res->{head}, qr/Status: 300 Multiple Choices/, "mid raw miss");
 
 	$res = cgi_run("/test/blahblah\@example.com/");
 	like($res->{body}, qr/\A/, "mid html hit");
 	like($res->{head}, qr/Status: 200 OK/, "200 response");
 	$res = cgi_run("/test/blahblah\@example.con/");
-	like($res->{head}, qr/Status: 404 Not Found/, "mid html miss");
+	like($res->{head}, qr/Status: 300 Multiple Choices/, "mid html miss");
 
 	$res = cgi_run("/test/blahblah\@example.com/f/");
 	like($res->{body}, qr/\A/, "mid html");
 	like($res->{head}, qr/Status: 200 OK/, "200 response");
 	$res = cgi_run("/test/blahblah\@example.con/f/");
-	like($res->{head}, qr/Status: 404 Not Found/, "mid html miss");
+	like($res->{head}, qr/Status: 300 Multiple Choices/, "mid html miss");
 
 	$res = cgi_run("/test/");
 	like($res->{body}, qr/slashy%2Fasdf%40example\.com/,
-- 
EW