summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
41d5b5f)
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.
### Unstable endpoints
/$LISTNAME/?r=$GIT_COMMIT -> HTML only
### Unstable endpoints
/$LISTNAME/?r=$GIT_COMMIT -> HTML only
-/$LISTNAME/atom.xml -> Atom feed
+/$LISTNAME/new.atom -> Atom feed
#### Optional, relies on Search::Xapian
#### 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
-/$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.
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
+[2] Do not make this into a 301 since feed readers may not follow them as well
+ as normal browsers do.
+
Encoding notes
--------------
Encoding notes
--------------
if (my $mid = $ctx->{mid}) { # per-thread feed:
$rv{atomurl} = "$url_base/t/$mid/atom";
} else {
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";
}
} 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/";
}
$rv{url} ||= "$url_base/";
$rv{midurl} = "$url_base/m/";
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);
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
invalid_list(\%ctx, $1) || get_atom(\%ctx);
# single-message pages
-# /$LISTNAME/atom.xml -> Atom feed, includes replies
+# /$LISTNAME/new.atom -> Atom feed, includes replies
sub get_atom {
my ($ctx) = @_;
require PublicInbox::Feed;
sub get_atom {
my ($ctx) = @_;
require PublicInbox::Feed;
test_psgi($app, sub {
my ($cb) = @_;
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"!,
my $res = $cb->(GET('http://example.com/test/'));
is(200, $res->code, 'success response received');
like($res->content, qr!href="\Q$atomurl\E"!,