Redirect archives URLs including <> in the messageid
authorMagnus Hagander <magnus@hagander.net>
Tue, 4 Nov 2014 13:57:07 +0000 (14:57 +0100)
committerMagnus Hagander <magnus@hagander.net>
Tue, 4 Nov 2014 13:58:59 +0000 (14:58 +0100)
< and > are not part of the actual message id, but some user agents will include
it when copying it (for example Thunderbird). Catch when this happens and redirect
the browser back to the proper URL instead of giving a 404.

django/archives/mailarchives/views.py
django/archives/urls.py

index f6c401a6458ee16050fcd5837a33e848d3cb7644..e01182766dabd5a0805f0d0fa24c925c96d3156c 100644 (file)
@@ -556,3 +556,11 @@ def base_css(request):
 @cache(hours=8)
 def slash_redirect(request, url):
        return HttpResponsePermanentRedirect("/%s" % url)
+
+
+# Redirect the requested URL to whatever happens to be in the regexp capture.
+# This is used for user agents that generate broken URLs that are easily
+# captured using regexp.
+@cache(hours=8)
+def re_redirect(request, prefix, msgid):
+       return HttpResponsePermanentRedirect("/%s%s" % (prefix, msgid))
index d524999dcca8a123b05c294c218d7d93977f4060..16fc7186410877fa9e7dca0ba5cc23b85d651cff 100644 (file)
@@ -19,9 +19,16 @@ urlpatterns = patterns('',
     (r'^$', 'archives.mailarchives.views.index'),
     (r'^list/$', 'archives.mailarchives.views.index'),
     (r'^list/group/(\d+)/$', 'archives.mailarchives.views.groupindex'),
+
+    # some user agents generate broken URLs that include <>
+    (r'^(?P<prefix>message-id/(|flat/|raw/))<(?P<msgid>.*)>$', 'archives.mailarchives.views.re_redirect'),
+
+    # Match regular messages
     (r'^message-id/([^/]+)$', 'archives.mailarchives.views.message'),
     (r'^message-id/flat/([^/]+)$', 'archives.mailarchives.views.message_flat'),
     (r'^message-id/raw/([^/]+)$', 'archives.mailarchives.views.message_raw'),
+
+    # Search
     (r'^archives-search/', 'archives.mailarchives.views.search'),
 
     # message-id with a slash needs to be redirected to one without it