From 97bef984363d1279a6ac130d35f063a834e9c241 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Tue, 1 Sep 2015 08:55:25 +0000 Subject: www: root atom feed is "new.atom" and not "atom.xml" The MIME type entry for Atom feed relies on "atom", so allow properly-configured static file servers to serve it with the correct Content-Type header. --- Documentation/design_www.txt | 36 ++++++++++++++++++++---------------- lib/PublicInbox/Feed.pm | 4 ++-- lib/PublicInbox/WWW.pm | 4 ++-- t/plack.t | 2 +- 4 files changed, 25 insertions(+), 21 deletions(-) diff --git a/Documentation/design_www.txt b/Documentation/design_www.txt index d25afca3..a11c3896 100644 --- a/Documentation/design_www.txt +++ b/Documentation/design_www.txt @@ -3,34 +3,38 @@ URL naming ### Unstable endpoints /$LISTNAME/?r=$GIT_COMMIT -> HTML only -/$LISTNAME/atom.xml -> Atom feed +/$LISTNAME/new.atom -> Atom feed #### Optional, relies on Search::Xapian -/$LISTNAME/t/$MESSAGE_ID/ -> HTML content of thread -/$LISTNAME/t/$MESSAGE_ID/atom -> Atom feed for thread -/$LISTNAME/t/$MESSAGE_ID/mbox.gz -> gzipped mbox of thread +/$LISTNAME/t/$MESSAGE_ID/ -> HTML content of thread +/$LISTNAME/t/$MESSAGE_ID/atom -> Atom feed for thread +/$LISTNAME/t/$MESSAGE_ID/mbox.gz -> gzipped mbox of thread ### Stable endpoints -/$LISTNAME/m/$MESSAGE_ID/ -> HTML content (short quotes) -/$LISTNAME/m/$MESSAGE_ID -> 301 to above -/$LISTNAME/m/$MESSAGE_ID/raw -> raw mbox -/$LISTNAME/f/$MESSAGE_ID/ -> HTML content (full quotes) -/$LISTNAME/f/$MESSAGE_ID -> 301 to above -/$LISTNAME/f/$MESSAGE_ID/raw (*) -> 301 to ../m/$MESSAGE_ID/raw +/$LISTNAME/m/$MESSAGE_ID/ -> HTML content (short quotes) +/$LISTNAME/m/$MESSAGE_ID -> 301 to above +/$LISTNAME/m/$MESSAGE_ID/raw -> raw mbox +/$LISTNAME/f/$MESSAGE_ID/ -> HTML content (full quotes) +/$LISTNAME/f/$MESSAGE_ID -> 301 to above +/$LISTNAME/f/$MESSAGE_ID/raw [1] -> 301 to ../m/$MESSAGE_ID/raw -### Legacy endpoints (may be ambiguous given Message-IDs with similar suffies) -/$LISTNAME/m/$MESSAGE_ID.html -> 301 to $MESSAGE_ID/ -/$LISTNAME/m/$MESSAGE_ID.txt -> 301 to $MESSAGE_ID/raw -/$LISTNAME/f/$MESSAGE_ID.html -> 301 to $MESSAGE_ID/ -/$LISTNAME/f/$MESSAGE_ID.txt (*) -> 301 to ../m/$MESSAGE_ID/raw +### Legacy endpoints (may be ambiguous given Message-IDs with similar suffixes) +/$LISTNAME/m/$MESSAGE_ID.html -> 301 to $MESSAGE_ID/ +/$LISTNAME/m/$MESSAGE_ID.txt -> 301 to $MESSAGE_ID/raw +/$LISTNAME/f/$MESSAGE_ID.html -> 301 to $MESSAGE_ID/ +/$LISTNAME/f/$MESSAGE_ID.txt [1] -> 301 to ../m/$MESSAGE_ID/raw +/$LISTNAME/atom.xml [2] -> identical to /$LISTNAME/new.atom FIXME: we must refactor/cleanup/add tests for most of our CGI before adding more endpoints and features. -(*) These URLs were never linked, but only exist as a convenience to folks +[1] These URLs were never linked, but only exist as a convenience to folks who edit existing URLs +[2] Do not make this into a 301 since feed readers may not follow them as well + as normal browsers do. + Encoding notes -------------- diff --git a/lib/PublicInbox/Feed.pm b/lib/PublicInbox/Feed.pm index 1fef9849..9d581935 100644 --- a/lib/PublicInbox/Feed.pm +++ b/lib/PublicInbox/Feed.pm @@ -287,11 +287,11 @@ sub get_feedopts { if (my $mid = $ctx->{mid}) { # per-thread feed: $rv{atomurl} = "$url_base/t/$mid/atom"; } else { - $rv{atomurl} = "$url_base/atom.xml"; + $rv{atomurl} = "$url_base/new.atom"; } } else { $url_base = "http://example.com"; - $rv{atomurl} = "$url_base/atom.xml"; + $rv{atomurl} = "$url_base/new.atom"; } $rv{url} ||= "$url_base/"; $rv{midurl} = "$url_base/m/"; diff --git a/lib/PublicInbox/WWW.pm b/lib/PublicInbox/WWW.pm index 278d786d..a9cb6d71 100644 --- a/lib/PublicInbox/WWW.pm +++ b/lib/PublicInbox/WWW.pm @@ -34,7 +34,7 @@ sub run { invalid_list(\%ctx, $1) || redirect_list_index($cgi); } elsif ($path_info =~ m!$LISTNAME_RE(?:/|/index\.html)?\z!o) { invalid_list(\%ctx, $1) || get_index(\%ctx); - } elsif ($path_info =~ m!$LISTNAME_RE/atom\.xml\z!o) { + } elsif ($path_info =~ m!$LISTNAME_RE/(?:atom\.xml|new\.atom)\z!o) { invalid_list(\%ctx, $1) || get_atom(\%ctx); # single-message pages @@ -128,7 +128,7 @@ sub invalid_list_mid { $ret; } -# /$LISTNAME/atom.xml -> Atom feed, includes replies +# /$LISTNAME/new.atom -> Atom feed, includes replies sub get_atom { my ($ctx) = @_; require PublicInbox::Feed; diff --git a/t/plack.t b/t/plack.t index b3c87642..50c9e605 100644 --- a/t/plack.t +++ b/t/plack.t @@ -83,7 +83,7 @@ EOF test_psgi($app, sub { my ($cb) = @_; - my $atomurl = 'http://example.com/test/atom.xml'; + my $atomurl = 'http://example.com/test/new.atom'; my $res = $cb->(GET('http://example.com/test/')); is(200, $res->code, 'success response received'); like($res->content, qr!href="\Q$atomurl\E"!, -- cgit v1.2.3-24-ge0c7