From ebcdff1faaf6e52c55dd1098f190f0c9726210a1 Mon Sep 17 00:00:00 2001
From: Jean-Baptiste <bleme@pm.me>
Date: Wed, 28 Oct 2020 12:44:03 +0100
Subject: [PATCH] fix: Add sentr-trace to Access-Control-Allow-Headers

---
 djangoldp/views.py | 39 +++++++++++++++++++++------------------
 1 file changed, 21 insertions(+), 18 deletions(-)

diff --git a/djangoldp/views.py b/djangoldp/views.py
index a5f6d990..9693cb29 100644
--- a/djangoldp/views.py
+++ b/djangoldp/views.py
@@ -1,37 +1,35 @@
 import json
-import time
+import logging
+
 from django.apps import apps
 from django.conf import settings
-
 from django.conf.urls import include, re_path
 from django.contrib.auth import get_user_model
 from django.core.exceptions import FieldDoesNotExist, ObjectDoesNotExist
-from django.urls.resolvers import get_resolver
 from django.db import IntegrityError, transaction
 from django.http import JsonResponse, Http404
 from django.shortcuts import get_object_or_404
+from django.urls.resolvers import get_resolver
 from django.utils.decorators import classonlymethod
 from django.views import View
 from pyld import jsonld
 from rest_framework import status
 from rest_framework.authentication import SessionAuthentication
-from rest_framework.permissions import AllowAny
 from rest_framework.parsers import JSONParser
+from rest_framework.permissions import AllowAny
 from rest_framework.renderers import JSONRenderer
 from rest_framework.response import Response
 from rest_framework.utils import model_meta
 from rest_framework.views import APIView
 from rest_framework.viewsets import ModelViewSet
 
+from djangoldp.activities import ActivityPubService
+from djangoldp.activities import ActivityQueueService, as_activitystream
+from djangoldp.activities.errors import ActivityStreamDecodeError, ActivityStreamValidationError
 from djangoldp.endpoints.webfinger import WebFingerEndpoint, WebFingerError
+from djangoldp.filters import LocalObjectOnContainerPathBackend
 from djangoldp.models import LDPSource, Model, Follower
 from djangoldp.permissions import LDPPermissions
-from djangoldp.filters import LocalObjectOnContainerPathBackend
-from djangoldp.activities import ActivityQueueService, as_activitystream
-from djangoldp.activities import ActivityPubService
-from djangoldp.activities.errors import ActivityStreamDecodeError, ActivityStreamValidationError
-import logging
-
 
 logger = logging.getLogger('djangoldp')
 get_user_model()._meta.rdf_context = {"get_full_name": "rdfs:label"}
@@ -75,7 +73,7 @@ class InboxView(APIView):
     """
     Receive linked data notifications
     """
-    permission_classes=[AllowAny,]
+    permission_classes = [AllowAny, ]
 
     def post(self, request, *args, **kwargs):
         '''
@@ -94,7 +92,8 @@ class InboxView(APIView):
         try:
             self._handle_activity(activity, **kwargs)
         except IntegrityError:
-            return Response({'Unable to save due to an IntegrityError in the receiver model'}, status=status.HTTP_200_OK)
+            return Response({'Unable to save due to an IntegrityError in the receiver model'},
+                            status=status.HTTP_200_OK)
 
         # save the activity and return 201
         obj = ActivityQueueService._save_sent_activity(activity.to_json(), local_id=request.path_info, success=True,
@@ -126,7 +125,8 @@ class InboxView(APIView):
                 return self._get_or_create_nested_backlinks(obj, object_model, update)
         except IntegrityError as e:
             logger.error(str(e))
-            logger.warning('received a backlink which you were not able to save because of a constraint on the model field.')
+            logger.warning(
+                'received a backlink which you were not able to save because of a constraint on the model field.')
             raise e
 
     def _get_or_create_nested_backlinks(self, obj, object_model=None, update=False):
@@ -150,7 +150,8 @@ class InboxView(APIView):
                 item_value = item[1]
                 item_model = Model.get_subclass_with_rdf_type(item_value['@type'])
                 if item_model is None:
-                    raise Http404('unable to store type ' + item_value['@type'] + ', model with this rdf_type not found')
+                    raise Http404(
+                        'unable to store type ' + item_value['@type'] + ', model with this rdf_type not found')
 
                 # push nested object tuple as a branch
                 backlink = self._get_or_create_nested_backlinks(item_value, item_model)
@@ -337,6 +338,7 @@ class LDPViewSetGenerator(ModelViewSet):
         if view_set is not None:
             class LDPNestedCustomViewSet(LDPNestedViewSet, view_set):
                 pass
+
             return LDPNestedCustomViewSet.nested_urls(nested_field, **kwargs)
 
         return LDPNestedViewSet.nested_urls(nested_field, **kwargs)
@@ -433,7 +435,8 @@ class LDPViewSet(LDPViewSetGenerator):
         if self.serializer_class is None:
             self.serializer_class = LDPSerializer
 
-        return type(LDPSerializer)(self.model._meta.object_name.lower() + name_prefix + 'Serializer', (self.serializer_class,),
+        return type(LDPSerializer)(self.model._meta.object_name.lower() + name_prefix + 'Serializer',
+                                   (self.serializer_class,),
                                    {'Meta': meta_class})
 
     def is_safe_create(self, user, validated_data, *args, **kwargs):
@@ -479,7 +482,8 @@ class LDPViewSet(LDPViewSetGenerator):
         serializer = self.get_write_serializer(data=request.data)
         serializer.is_valid(raise_exception=True)
         if not self.is_safe_create(request.user, serializer.validated_data):
-            return Response({'detail': 'You do not have permission to perform this action'}, status=status.HTTP_403_FORBIDDEN)
+            return Response({'detail': 'You do not have permission to perform this action'},
+                            status=status.HTTP_403_FORBIDDEN)
 
         self.perform_create(serializer)
         response_serializer = self.get_serializer()
@@ -552,7 +556,7 @@ class LDPViewSet(LDPViewSetGenerator):
         response = super(LDPViewSet, self).dispatch(request, *args, **kwargs)
         response["Access-Control-Allow-Origin"] = request.META.get('HTTP_ORIGIN')
         response["Access-Control-Allow-Methods"] = "GET,POST,PUT,PATCH,DELETE"
-        response["Access-Control-Allow-Headers"] = "authorization, Content-Type, if-match, accept"
+        response["Access-Control-Allow-Headers"] = "authorization, Content-Type, if-match, accept, sentry-trace"
         response["Access-Control-Expose-Headers"] = "Location, User"
         response["Access-Control-Allow-Credentials"] = 'true'
         response["Accept-Post"] = "application/ld+json"
@@ -650,4 +654,3 @@ class WebFingerView(View):
 
     def post(self, request, *args, **kwargs):
         return self.on_request(request)
-
-- 
GitLab