From 5f6816d74235d2a6d3aa40833a2acedcec03fdbf Mon Sep 17 00:00:00 2001 From: Robert Sparks Date: Mon, 7 Jun 2021 21:25:42 +0000 Subject: [PATCH] Handle bare numbers and rfc names with a space for the /doc/html view. Fixes #1999. Commit ready for merge. - Legacy-Id: 19095 --- ietf/doc/tests.py | 8 ++++++++ ietf/doc/urls.py | 1 + ietf/doc/views_doc.py | 4 ++++ 3 files changed, 13 insertions(+) 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/(?Pbcp[0-9]+?)(\.txt|\.html)?/?$', RedirectView.as_view(url=settings.RFC_EDITOR_INFO_BASE_URL+"%(name)s", permanent=False)), url(r'^html/(?Pstd[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[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