- } elsif ($path_info =~ m!$LISTNAME_RE\z!o) {
- invalid_list($ctx, $1) || r301($ctx, $1);
- } 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|new\.atom)\z!o) {
- invalid_list($ctx, $1) || get_atom($ctx);
-
- } elsif ($path_info =~ m!$LISTNAME_RE/$MID_RE/$END_RE\z!o) {
- msg_page($ctx, $1, $2, $3);
-
- # some Message-IDs have slashes in them and the HTTP server
- # may try to be clever and unescape them :<
- } elsif ($path_info =~ m!$LISTNAME_RE/(\S+/\S+)/$END_RE\z!o) {
- msg_page($ctx, $1, $2, $3);
+ } elsif ($path_info =~ m!$INBOX_RE\z!o) {
+ invalid_inbox($self, $ctx, $1) || r301($ctx, $1);
+ } elsif ($path_info =~ m!$INBOX_RE(?:/|/index\.html)?\z!o) {
+ invalid_inbox($self, $ctx, $1) || get_index($ctx);
+ } elsif ($path_info =~ m!$INBOX_RE/(?:atom\.xml|new\.atom)\z!o) {
+ invalid_inbox($self, $ctx, $1) || get_atom($ctx);
+ } elsif ($path_info =~ m!$INBOX_RE/new\.html\z!o) {
+ invalid_inbox($self, $ctx, $1) || get_new($ctx);
+ } elsif ($path_info =~ m!$INBOX_RE/
+ ($PublicInbox::GitHTTPBackend::ANY)\z!ox) {
+ my $path = $2;
+ invalid_inbox($self, $ctx, $1) ||
+ serve_git($env, $ctx->{git}, $path);
+ } elsif ($path_info =~ m!$INBOX_RE/([\w-]+).mbox\.gz\z!o) {
+ serve_mbox_range($self, $ctx, $1, $2);
+ } elsif ($path_info =~ m!$INBOX_RE/$MID_RE/$END_RE\z!o) {
+ msg_page($self, $ctx, $1, $2, $3);
+
+ } elsif ($path_info =~ m!$INBOX_RE/$MID_RE/$ATTACH_RE\z!o) {
+ my ($idx, $fn) = ($3, $4);
+ invalid_inbox_mid($self, $ctx, $1, $2) ||
+ get_attach($ctx, $idx, $fn);
+ # in case people leave off the trailing slash:
+ } elsif ($path_info =~ m!$INBOX_RE/$MID_RE/(T|t)\z!o) {
+ my ($inbox, $mid, $suffix) = ($1, $2, $3);
+ $suffix .= $suffix =~ /\A[tT]\z/ ? '/#u' : '/';
+ r301($ctx, $inbox, $mid, $suffix);
+
+ } elsif ($path_info =~ m!$INBOX_RE/$MID_RE/R/?\z!o) {
+ my ($inbox, $mid) = ($1, $2);
+ r301($ctx, $inbox, $mid, '#R');
+
+ } elsif ($path_info =~ m!$INBOX_RE/$MID_RE/f/?\z!o) {
+ r301($ctx, $1, $2);