From f8581257c89be900c61cb5fa66b582c206ed3513 Mon Sep 17 00:00:00 2001 From: "753.network" Date: Fri, 14 Feb 2025 14:53:06 -0500 Subject: [PATCH] Add AllowAllCORSMixin Add AllowAllCORSMixin and apply it to legacy profile retrieval API and package version APIs --- django/thunderstore/core/mixins.py | 9 +++++++++ .../modpacks/api/experimental/views/legacyprofile.py | 3 ++- .../repository/api/experimental/views/package.py | 5 ++++- .../repository/api/experimental/views/package_version.py | 7 ++++--- 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/django/thunderstore/core/mixins.py b/django/thunderstore/core/mixins.py index 846581331..96f090f0c 100644 --- a/django/thunderstore/core/mixins.py +++ b/django/thunderstore/core/mixins.py @@ -118,3 +118,12 @@ def get_admin_url(self): class Meta: abstract = True + + +# AllowAllCORSMixin must be inherited before APIView / GenericAPIView +class AllowAllCORSMixin: + def finalize_response(self, request, response, *args, **kwargs): + response = super().finalize_response(request, response, *args, **kwargs) + response["Access-Control-Allow-Origin"] = "*" + response["Access-Control-Allow-Methods"] = "GET" + return response diff --git a/django/thunderstore/modpacks/api/experimental/views/legacyprofile.py b/django/thunderstore/modpacks/api/experimental/views/legacyprofile.py index 86c11443c..fb771b2bd 100644 --- a/django/thunderstore/modpacks/api/experimental/views/legacyprofile.py +++ b/django/thunderstore/modpacks/api/experimental/views/legacyprofile.py @@ -9,6 +9,7 @@ from rest_framework.throttling import UserRateThrottle from rest_framework.views import APIView +from thunderstore.core.mixins import AllowAllCORSMixin from thunderstore.core.utils import replace_cdn from thunderstore.modpacks.models import LegacyProfile @@ -53,7 +54,7 @@ def post(self, request, *args, **kwargs): ) -class LegacyProfileRetrieveApiView(APIView): +class LegacyProfileRetrieveApiView(AllowAllCORSMixin, APIView): permission_classes = [] @swagger_auto_schema( diff --git a/django/thunderstore/repository/api/experimental/views/package.py b/django/thunderstore/repository/api/experimental/views/package.py index 68d314ecb..be650090c 100644 --- a/django/thunderstore/repository/api/experimental/views/package.py +++ b/django/thunderstore/repository/api/experimental/views/package.py @@ -6,6 +6,7 @@ from thunderstore.cache.cache import ManualCacheCommunityMixin from thunderstore.cache.enums import CacheBustCondition +from thunderstore.core.mixins import AllowAllCORSMixin from thunderstore.repository.api.experimental.serializers import ( PackageSerializerExperimental, ) @@ -64,7 +65,9 @@ def get_queryset(self): return get_package_queryset() -class PackageDetailApiView(ManualCacheCommunityMixin, RetrieveAPIView): +class PackageDetailApiView( + AllowAllCORSMixin, ManualCacheCommunityMixin, RetrieveAPIView +): """ Get a single package """ diff --git a/django/thunderstore/repository/api/experimental/views/package_version.py b/django/thunderstore/repository/api/experimental/views/package_version.py index 5fd4bc66f..6c04f2907 100644 --- a/django/thunderstore/repository/api/experimental/views/package_version.py +++ b/django/thunderstore/repository/api/experimental/views/package_version.py @@ -5,6 +5,7 @@ from thunderstore.cache.cache import ManualCacheCommunityMixin from thunderstore.cache.enums import CacheBustCondition +from thunderstore.core.mixins import AllowAllCORSMixin from thunderstore.repository.api.experimental.serializers import ( MarkdownResponseSerializer, PackageVersionSerializerExperimental, @@ -54,7 +55,7 @@ def get_queryset(self): ) -class PackageVersionDetailApiView(PackageVersionDetailMixin): +class PackageVersionDetailApiView(AllowAllCORSMixin, PackageVersionDetailMixin): """ Get a single package version """ @@ -69,7 +70,7 @@ def get(self, *args, **kwargs): return super().get(*args, **kwargs) -class PackageVersionChangelogApiView(PackageVersionDetailMixin): +class PackageVersionChangelogApiView(AllowAllCORSMixin, PackageVersionDetailMixin): """ Get a package verion's changelog """ @@ -89,7 +90,7 @@ def retrieve(self, request, *args, **kwargs): return Response(serializer.data) -class PackageVersionReadmeApiView(PackageVersionDetailMixin): +class PackageVersionReadmeApiView(AllowAllCORSMixin, PackageVersionDetailMixin): """ Get a package verion's readme """