From 0c8e57768448c83625b353de16efc34f66fd49c8 Mon Sep 17 00:00:00 2001 From: Santos Gallegos Date: Thu, 30 Mar 2023 15:57:48 -0500 Subject: [PATCH 1/2] Proxito: refactor allowed_user Closes https://github.com/readthedocs/readthedocs.org/issues/10198 --- readthedocs/projects/views/public.py | 2 +- readthedocs/proxito/views/mixins.py | 2 +- readthedocs/proxito/views/serve.py | 27 ++++++++++++--------------- 3 files changed, 14 insertions(+), 17 deletions(-) diff --git a/readthedocs/projects/views/public.py b/readthedocs/projects/views/public.py index 331d822acdd..38ada629d57 100644 --- a/readthedocs/projects/views/public.py +++ b/readthedocs/projects/views/public.py @@ -369,7 +369,7 @@ def get( slug=version_slug, ) - if not self.allowed_user(request, project, version.slug): + if not self.allowed_user(request, version): return self.get_unauthed_response(request, project) # All public versions can be cached. diff --git a/readthedocs/proxito/views/mixins.py b/readthedocs/proxito/views/mixins.py index 812f000ce4f..2e98171d2d0 100644 --- a/readthedocs/proxito/views/mixins.py +++ b/readthedocs/proxito/views/mixins.py @@ -280,7 +280,7 @@ def _serve_401(self, request, project): log.debug('Unauthorized access to documentation.', project_slug=project.slug) return res - def allowed_user(self, *args, **kwargs): + def allowed_user(self, request, version): return True def get_version_from_host(self, request, version_slug): diff --git a/readthedocs/proxito/views/serve.py b/readthedocs/proxito/views/serve.py index f5eb81b2b79..42c45cc378c 100644 --- a/readthedocs/proxito/views/serve.py +++ b/readthedocs/proxito/views/serve.py @@ -265,7 +265,7 @@ def get( pass # Check user permissions and return an unauthed response if needed - if not self.allowed_user(request, final_project, version_slug): + if not version or not self.allowed_user(request, version): return self.get_unauthed_response(request, final_project) return self._serve_docs( @@ -460,7 +460,7 @@ def get_using_unresolver(self, request): pass # Check user permissions and return an unauthed response if needed. - if not self.allowed_user(request, project, version.slug): + if not self.allowed_user(request, version): return self.get_unauthed_response(request, project) return self._serve_docs( @@ -637,22 +637,19 @@ def _get_custom_404_page(self, request, project, version=None): If a 404 page is found, we return a response with the content of that file, `None` otherwise. """ - current_version_slug = version.slug if version else None - versions_slug = [] - if current_version_slug: - versions_slug.append(current_version_slug) - - default_version_slug = project.get_default_version() - if default_version_slug != current_version_slug: - versions_slug.append(default_version_slug) - - for version_slug_404 in versions_slug: - if not self.allowed_user(request, project, version_slug_404): + versions_404 = [version] if version else [] + if not version or version.slug != project.default_version: + default_version = project.versions.filter(slug=project.default_version).first() + if default_version: + versions_404.append(default_version) + + for version_404 in versions_404: + if not self.allowed_user(request, version_404): continue storage_root_path = project.get_storage_path( type_="html", - version_slug=version_slug_404, + version_slug=version_404.slug, include_file=False, version_type=self.version_type, ) @@ -664,7 +661,7 @@ def _get_custom_404_page(self, request, project, version=None): if build_media_storage.exists(storage_filename_path): log.info( "Serving custom 404.html page.", - version_slug_404=version_slug_404, + version_slug_404=version_404.slug, storage_filename_path=storage_filename_path, ) resp = HttpResponse( From 52e84770a443778625c0a3341cafa0c4af7986a6 Mon Sep 17 00:00:00 2001 From: Santos Gallegos Date: Thu, 30 Mar 2023 16:02:22 -0500 Subject: [PATCH 2/2] Black --- readthedocs/proxito/views/serve.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/readthedocs/proxito/views/serve.py b/readthedocs/proxito/views/serve.py index 42c45cc378c..eb957015400 100644 --- a/readthedocs/proxito/views/serve.py +++ b/readthedocs/proxito/views/serve.py @@ -639,7 +639,9 @@ def _get_custom_404_page(self, request, project, version=None): """ versions_404 = [version] if version else [] if not version or version.slug != project.default_version: - default_version = project.versions.filter(slug=project.default_version).first() + default_version = project.versions.filter( + slug=project.default_version + ).first() if default_version: versions_404.append(default_version)