Browse Source

Prefer using "glitchtip_key" over "sentry_key" when not using a Sentry
SDK, for example CSP sends right to glitchtip and has nothing to do with
Sentry SDKs.

David Burke 3 years ago
parent
commit
9b531a7e97
3 changed files with 23 additions and 3 deletions
  1. 8 2
      events/views.py
  2. 14 0
      issues/tests/test_sentry_api_compat.py
  3. 1 1
      projects/models.py

+ 8 - 2
events/views.py

@@ -56,7 +56,13 @@ class BaseEventAPIView(APIView):
 
     @classmethod
     def auth_from_request(cls, request):
-        result = {k: request.GET[k] for k in request.GET.keys() if k[:7] == "sentry_"}
+        # Accept both sentry or glitchtip prefix.
+        # Prefer glitchtip when not using a sentry SDK but support both.
+        result = {
+            k: request.GET[k]
+            for k in request.GET.keys()
+            if k[:7] == "sentry_" or k[:10] == "glitchtip_"
+        }
 
         if request.META.get("HTTP_X_SENTRY_AUTH", "")[:7].lower() == "sentry ":
             if result:
@@ -76,7 +82,7 @@ class BaseEventAPIView(APIView):
                 "Unable to find authentication information"
             )
 
-        return result.get("sentry_key")
+        return result.get("sentry_key", result.get("glitchtip_key"))
 
     def get_project(self, request, project_id):
         sentry_key = BaseEventAPIView.auth_from_request(request)

+ 14 - 0
issues/tests/test_sentry_api_compat.py

@@ -225,6 +225,20 @@ class SentryAPICompatTestCase(GlitchTipTestCase):
         self.assertEqual(res.data["entries"][0], data["entries"][0])
         self.assertEqual(res.data["entries"][1], data["entries"][1])
 
+    def test_csp_event_glitchtip_key(self):
+        """ Check compatibility for using glitchtip_key or sentry_key interchangably """
+        key = self.project.projectkey_set.first().public_key
+        csp_store_url = (
+            reverse("csp_store", args=[self.project.id]) + "?glitchtip_key=" + key.hex
+        )
+        data = mdn_sample_csp
+        res = self.client.post(csp_store_url, data, format="json")
+        self.assertEqual(res.status_code, 200)
+        event_id = res.data["id"]
+        url = self.get_project_events_detail(event_id)
+        res = self.client.get(url)
+        self.assertEqual(res.status_code, 200)
+
     def test_message_event(self):
         """ A generic message made with the Sentry SDK. Generally has less data than exceptions. """
         # Don't mimic this test, use self.get_jest_test_data instead

+ 1 - 1
projects/models.py

@@ -123,7 +123,7 @@ class ProjectKey(CreatedModel):
         if not urlparts.netloc or not urlparts.scheme:
             return ""
 
-        return "%s://%s/api/%s/security/?sentry_key=%s" % (
+        return "%s://%s/api/%s/security/?glitchtip_key=%s" % (
             urlparts.scheme,
             urlparts.netloc + urlparts.path,
             self.project_id,