diff --git a/.VERSION b/.VERSION index 2b91414a..4c3cc4c3 100644 --- a/.VERSION +++ b/.VERSION @@ -1 +1 @@ -v0.18.3 +v0.18.4 diff --git a/deploy/terraform/aws/lambda/variables.tf b/deploy/terraform/aws/lambda/variables.tf index e5e931a6..d33f7949 100644 --- a/deploy/terraform/aws/lambda/variables.tf +++ b/deploy/terraform/aws/lambda/variables.tf @@ -41,7 +41,7 @@ variable "buz_image_repo" { variable "buz_version" { description = "The version of Buz to run." type = string - default = "v0.18.3" + default = "v0.18.4" } variable "buz_lambda_memory_limit" { diff --git a/deploy/terraform/gcp/cloud_run/variables.tf b/deploy/terraform/gcp/cloud_run/variables.tf index 7c54e226..7b5e6515 100644 --- a/deploy/terraform/gcp/cloud_run/variables.tf +++ b/deploy/terraform/gcp/cloud_run/variables.tf @@ -28,7 +28,7 @@ variable "buz_domain" { variable "buz_version" { description = "The version of Buz to run." type = string - default = "v0.18.3" + default = "v0.18.4" } variable "buz_service_timeout_seconds" { diff --git a/examples/quickstart/docker-compose.yml b/examples/quickstart/docker-compose.yml index 50ad5ac0..76cbbda5 100644 --- a/examples/quickstart/docker-compose.yml +++ b/examples/quickstart/docker-compose.yml @@ -20,7 +20,7 @@ x-dependency: services: buz: container_name: buz - image: ghcr.io/silverton-io/buz:v0.18.3 + image: ghcr.io/silverton-io/buz:v0.18.4 volumes: - type: bind source: ./buz/quickstart.conf.yml diff --git a/pkg/protocol/webhook/envelopeBuilder.go b/pkg/protocol/webhook/envelopeBuilder.go index 69f48edd..02f278e9 100644 --- a/pkg/protocol/webhook/envelopeBuilder.go +++ b/pkg/protocol/webhook/envelopeBuilder.go @@ -5,6 +5,8 @@ package webhook import ( + "bytes" + "compress/gzip" "io" "github.com/gin-gonic/gin" @@ -23,6 +25,21 @@ func buildEnvelopesFromRequest(c *gin.Context, conf *config.Config, m *meta.Coll log.Error().Err(err).Msg("🔴 could not read request body") return envelopes } + // If the request body is gzipped, decompress it + if c.GetHeader("Content-Encoding") == "gzip" { + log.Debug().Msg("🟢 Request body is gzip encoded - attempting to decompress.") + reader, err := gzip.NewReader(bytes.NewReader(reqBody)) + if err != nil { + log.Error().Err(err).Msg("🔴 could not decompress gzipped request body") + return envelopes + } + defer reader.Close() + reqBody, err = io.ReadAll(reader) + if err != nil { + log.Error().Err(err).Msg("🔴 could not read decompressed gzipped request body") + return envelopes + } + } for _, e := range gjson.ParseBytes(reqBody).Array() { n := envelope.NewEnvelope(conf.App) contexts := envelope.BuildContextsFromRequest(c) diff --git a/pkg/protocol/webhook/input.go b/pkg/protocol/webhook/input.go index 6b9023d0..33063ce2 100644 --- a/pkg/protocol/webhook/input.go +++ b/pkg/protocol/webhook/input.go @@ -6,6 +6,7 @@ package webhook import ( "net/http" + "strings" "github.com/gin-gonic/gin" "github.com/rs/zerolog/log" @@ -34,7 +35,7 @@ func (i *WebhookInput) Initialize(routerGroup *gin.RouterGroup, manifold *manifo func (i *WebhookInput) Handler(m manifold.Manifold, conf config.Config, metadata *meta.CollectorMeta) gin.HandlerFunc { fn := func(c *gin.Context) { - if c.ContentType() == "application/json" || c.ContentType() == "text/html" { + if c.ContentType() == "application/json" || strings.HasPrefix(c.ContentType(), "text/") { envelopes := i.EnvelopeBuilder(c, &conf, metadata) err := m.Enqueue(envelopes) if err != nil {