From bee7c46cfc168f1c3446952f493712b20b518d40 Mon Sep 17 00:00:00 2001 From: Michi Hoffmann Date: Mon, 4 Sep 2023 14:47:22 +0200 Subject: [PATCH] Attach the `X-Sentry-Auth` header to `/envelope` requests (#709) --- sentry.go | 1 - transport.go | 12 ++++++++++++ transport_test.go | 21 +++++++++++++-------- 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/sentry.go b/sentry.go index bb9641520..6a58220ba 100644 --- a/sentry.go +++ b/sentry.go @@ -18,7 +18,6 @@ const SDKIdentifier = "sentry.go" // apiVersion is the minimum version of the Sentry API compatible with the // sentry-go SDK. -// Deprecated: To be removed in 0.25.0. const apiVersion = "7" // Init initializes the SDK with options. The returned error is non-nil if diff --git a/transport.go b/transport.go index 44970efc0..3eee45845 100644 --- a/transport.go +++ b/transport.go @@ -211,6 +211,18 @@ func getRequestFromEvent(event *Event, dsn *Dsn) (r *http.Request, err error) { if r != nil { r.Header.Set("User-Agent", fmt.Sprintf("%s/%s", event.Sdk.Name, event.Sdk.Version)) r.Header.Set("Content-Type", "application/x-sentry-envelope") + + auth := fmt.Sprintf("Sentry sentry_version=%s, "+ + "sentry_client=%s/%s, sentry_key=%s", apiVersion, event.Sdk.Name, event.Sdk.Version, dsn.publicKey) + + // The key sentry_secret is effectively deprecated and no longer needs to be set. + // However, since it was required in older self-hosted versions, + // it should still passed through to Sentry if set. + if dsn.secretKey != "" { + auth = fmt.Sprintf("%s, sentry_secret=%s", auth, dsn.secretKey) + } + + r.Header.Set("X-Sentry-Auth", auth) } }() body := getRequestBodyFromEvent(event) diff --git a/transport_test.go b/transport_test.go index 43b7053e7..112bc6130 100644 --- a/transport_test.go +++ b/transport_test.go @@ -321,18 +321,13 @@ func TestGetRequestFromEvent(t *testing.T) { }{ { testName: "Sample Event", - event: NewEvent(), + event: newTestEvent(eventType), apiURL: "https://host/path/api/42/envelope/", }, { testName: "Transaction", - event: func() *Event { - event := NewEvent() - event.Type = transactionType - - return event - }(), - apiURL: "https://host/path/api/42/envelope/", + event: newTestEvent(transactionType), + apiURL: "https://host/path/api/42/envelope/", }, } @@ -361,6 +356,16 @@ func TestGetRequestFromEvent(t *testing.T) { if ua := req.UserAgent(); ua != userAgent { t.Errorf("got User-Agent = %q, want %q", ua, userAgent) } + + contentType := "application/x-sentry-envelope" + if ct := req.Header.Get("Content-Type"); ct != contentType { + t.Errorf("got Content-Type = %q, want %q", ct, contentType) + } + + xSentryAuth := "Sentry sentry_version=7, sentry_client=sentry.go/0.0.1, sentry_key=key" + if auth := req.Header.Get("X-Sentry-Auth"); !strings.HasPrefix(auth, xSentryAuth) { + t.Errorf("got X-Sentry-Auth = %q, want %q", auth, xSentryAuth) + } }) } }