diff --git a/ietf/doc/tests.py b/ietf/doc/tests.py index 1cb40116b..e8fa33891 100644 --- a/ietf/doc/tests.py +++ b/ietf/doc/tests.py @@ -690,6 +690,14 @@ Man Expires September 22, 2015 [Page 3] r = self.client.get(urlreverse("ietf.doc.views_doc.document_html", kwargs=dict(name=draft.name, rev=draft.rev))) self.assertEqual(r.status_code, 200) + rfc = WgRfcFactory() + r = self.client.get(urlreverse("ietf.doc.views_doc.document_html", kwargs=dict(name=rfc.canonical_name()))) + self.assertEqual(r.status_code, 200) + r = self.client.get(urlreverse("ietf.doc.views_doc.document_html", kwargs=dict(name=rfc.rfc_number()))) + self.assertRedirects(r, urlreverse("ietf.doc.views_doc.document_html", kwargs=dict(name=rfc.canonical_name()))) + r = self.client.get(urlreverse("ietf.doc.views_doc.document_html", kwargs=dict(name=f'RFC {rfc.rfc_number()}'))) + self.assertRedirects(r, urlreverse("ietf.doc.views_doc.document_html", kwargs=dict(name=rfc.canonical_name()))) + # expired draft draft.set_state(State.objects.get(type="draft", slug="expired")) diff --git a/ietf/doc/urls.py b/ietf/doc/urls.py index fc4e0d959..f6afcc2db 100644 --- a/ietf/doc/urls.py +++ b/ietf/doc/urls.py @@ -66,6 +66,7 @@ urlpatterns = [ url(r'^html/(?P<name>bcp[0-9]+?)(\.txt|\.html)?/?$', RedirectView.as_view(url=settings.RFC_EDITOR_INFO_BASE_URL+"%(name)s", permanent=False)), url(r'^html/(?P<name>std[0-9]+?)(\.txt|\.html)?/?$', RedirectView.as_view(url=settings.RFC_EDITOR_INFO_BASE_URL+"%(name)s", permanent=False)), url(r'^html/%(name)s(?:-%(rev)s)?(\.txt|\.html)?/?$' % settings.URL_REGEXPS, views_doc.document_html), + url(r'^html/(?P<name>[Rr][Ff][Cc] [0-9]+?)(\.txt|\.html)?/?$', views_doc.document_html), url(r'^all/?$', views_search.index_all_drafts), url(r'^active/?$', views_search.index_active_drafts), diff --git a/ietf/doc/views_doc.py b/ietf/doc/views_doc.py index c1b4a59eb..cc83cb9eb 100644 --- a/ietf/doc/views_doc.py +++ b/ietf/doc/views_doc.py @@ -670,6 +670,10 @@ def document_html(request, name, rev=None): if rev and not name.startswith('charter-') and re.search('[0-9]{1,2}-[0-9]{2}', rev): name = "%s-%s" % (name, rev[:-3]) rev = rev[-2:] + if re.match("^[0-9]+$", name): + return redirect('ietf.doc.views_doc.document_html',name=f'rfc{name}') + if re.match("^[Rr][Ff][Cc] [0-9]+$",name): + return redirect('ietf.doc.views_doc.document_html',name=f'rfc{name[4:]}') docs = Document.objects.filter(docalias__name=name) if rev and not docs.exists(): # handle some special cases, like draft-ietf-tsvwg-ieee-802-11