mirror of
https://github.com/foomo/sesamy-go.git
synced 2025-10-16 12:35:43 +00:00
feat: split into middlewares
This commit is contained in:
parent
c1221f870e
commit
202a816cb2
@ -4,8 +4,6 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
@ -16,7 +14,6 @@ type (
|
|||||||
l *zap.Logger
|
l *zap.Logger
|
||||||
url string
|
url string
|
||||||
cookies []string
|
cookies []string
|
||||||
richsstsse string
|
|
||||||
trackingID string
|
trackingID string
|
||||||
measurementID string
|
measurementID string
|
||||||
protocolVersion string
|
protocolVersion string
|
||||||
@ -66,6 +63,15 @@ func NewClient(l *zap.Logger, url, trackingID string, opts ...ClientOption) *Cli
|
|||||||
for _, opt := range opts {
|
for _, opt := range opts {
|
||||||
opt(inst)
|
opt(inst)
|
||||||
}
|
}
|
||||||
|
inst.middlewares = append(inst.middlewares,
|
||||||
|
MiddlewareRichsstsse,
|
||||||
|
MiddlewareTrackingID(inst.trackingID),
|
||||||
|
MiddlewarIgnoreReferrer("1"),
|
||||||
|
MiddlewarProtocolVersion("2"),
|
||||||
|
MiddlewarDebug,
|
||||||
|
MiddlewarClientID,
|
||||||
|
MiddlewarDocument,
|
||||||
|
)
|
||||||
return inst
|
return inst
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,42 +88,10 @@ func (c *Client) HTTPClient() *http.Client {
|
|||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
func (c *Client) Send(r *http.Request, event *Event) error {
|
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
|
next := c.SendRaw
|
||||||
for _, middleware := range c.middlewares {
|
for _, middleware := range c.middlewares {
|
||||||
next = middleware(next)
|
next = middleware(next)
|
||||||
}
|
}
|
||||||
|
|
||||||
return next(r, event)
|
return next(r, event)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
74
measurementprotocol/v2/middleware.go
Normal file
74
measurementprotocol/v2/middleware.go
Normal file
@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user