From 202a816cb2fe329685c3f01d4e3bbd6ae72f332e Mon Sep 17 00:00:00 2001 From: Kevin Franklin Kim Date: Mon, 11 Mar 2024 16:02:15 +0100 Subject: [PATCH] feat: split into middlewares --- measurementprotocol/v2/client.go | 44 ++++------------- measurementprotocol/v2/middleware.go | 74 ++++++++++++++++++++++++++++ 2 files changed, 83 insertions(+), 35 deletions(-) create mode 100644 measurementprotocol/v2/middleware.go diff --git a/measurementprotocol/v2/client.go b/measurementprotocol/v2/client.go index c1a84d7..de10ee3 100644 --- a/measurementprotocol/v2/client.go +++ b/measurementprotocol/v2/client.go @@ -4,8 +4,6 @@ import ( "fmt" "io" "net/http" - "net/url" - "strings" "github.com/pkg/errors" "go.uber.org/zap" @@ -16,7 +14,6 @@ type ( l *zap.Logger url string cookies []string - richsstsse string trackingID string measurementID string protocolVersion string @@ -66,6 +63,15 @@ func NewClient(l *zap.Logger, url, trackingID string, opts ...ClientOption) *Cli for _, opt := range opts { opt(inst) } + inst.middlewares = append(inst.middlewares, + MiddlewareRichsstsse, + MiddlewareTrackingID(inst.trackingID), + MiddlewarIgnoreReferrer("1"), + MiddlewarProtocolVersion("2"), + MiddlewarDebug, + MiddlewarClientID, + MiddlewarDocument, + ) return inst } @@ -82,42 +88,10 @@ func (c *Client) HTTPClient() *http.Client { // ------------------------------------------------------------------------------------------------ func (c *Client) Send(r *http.Request, event *Event) error { - yes := "1" - - // set default values - event.TrackingID = &c.trackingID - event.Richsstsse = &c.richsstsse - event.ProtocolVersion = &c.protocolVersion - - event.IgnoreReferrer = &yes - - { // set referrer parameter - if referrer, err := url.Parse(r.Referer()); err != nil { - c.l.With(zap.Error(err)).Warn("failed to parse referrer") - } else { - event.DocumentLocation = &referrer.Path - event.DocumentHostname = &referrer.Host - } - } - - { // TODO check - if value, _ := r.Cookie("gtm_debug"); value != nil { - event.IsDebug = &yes - } - } - - { // set client id - if value, _ := r.Cookie("_ga"); value != nil { - clientID := strings.TrimPrefix(value.Value, "GA1.1.") - event.ClientID = &clientID - } - } - next := c.SendRaw for _, middleware := range c.middlewares { next = middleware(next) } - return next(r, event) } diff --git a/measurementprotocol/v2/middleware.go b/measurementprotocol/v2/middleware.go new file mode 100644 index 0000000..43db322 --- /dev/null +++ b/measurementprotocol/v2/middleware.go @@ -0,0 +1,74 @@ +package v2 + +import ( + "net/http" + "net/url" + "strings" +) + +func MiddlewareRichsstsse(next ClientHandler) ClientHandler { + v := "" + return func(r *http.Request, event *Event) error { + event.Richsstsse = &v + return nil + } +} + +func MiddlewareTrackingID(v string) ClientMiddleware { + return func(next ClientHandler) ClientHandler { + return func(r *http.Request, event *Event) error { + event.TrackingID = &v + return nil + } + } +} + +func MiddlewarProtocolVersion(v string) ClientMiddleware { + return func(next ClientHandler) ClientHandler { + return func(r *http.Request, event *Event) error { + event.ProtocolVersion = &v + return nil + } + } +} + +func MiddlewarIgnoreReferrer(v string) ClientMiddleware { + return func(next ClientHandler) ClientHandler { + return func(r *http.Request, event *Event) error { + event.IgnoreReferrer = &v + return nil + } + } +} + +func MiddlewarDebug(next ClientHandler) ClientHandler { + v := "1" + return func(r *http.Request, event *Event) error { + if value, _ := r.Cookie("gtm_debug"); value != nil { + event.IsDebug = &v + } + return nil + } +} + +func MiddlewarClientID(next ClientHandler) ClientHandler { + return func(r *http.Request, event *Event) error { + if value, _ := r.Cookie("_ga"); value != nil { + clientID := strings.TrimPrefix(value.Value, "GA1.1.") + event.ClientID = &clientID + } + return nil + } +} + +func MiddlewarDocument(next ClientHandler) ClientHandler { + return func(r *http.Request, event *Event) error { + if referrer, err := url.Parse(r.Referer()); err != nil { + return err + } else { + event.DocumentLocation = &referrer.Path + event.DocumentHostname = &referrer.Host + } + return nil + } +}