mirror of
https://github.com/foomo/sesamy-go.git
synced 2025-10-16 12:35:43 +00:00
Introduced `GTagMiddlewarWithoutCancel` and `MPv2MiddlewarWithoutCancel` to allow handling of requests with contexts where cancellation signals are ignored. This improves flexibility for specific use cases where cancel propagation is not desired.
83 lines
2.1 KiB
Go
83 lines
2.1 KiB
Go
package client
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
"strings"
|
|
|
|
"github.com/foomo/sesamy-go/pkg/encoding/gtag"
|
|
"github.com/foomo/sesamy-go/pkg/session"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
func GTagMiddlewareRichsstsse(next GTagHandler) GTagHandler {
|
|
v := ""
|
|
return func(r *http.Request, payload *gtag.Payload) error {
|
|
payload.Richsstsse = &v
|
|
return next(r, payload)
|
|
}
|
|
}
|
|
|
|
func GTagMiddlewareTrackingID(v string) GTagMiddleware {
|
|
return func(next GTagHandler) GTagHandler {
|
|
return func(r *http.Request, payload *gtag.Payload) error {
|
|
payload.TrackingID = &v
|
|
return next(r, payload)
|
|
}
|
|
}
|
|
}
|
|
|
|
func GTagMiddlewarProtocolVersion(v string) GTagMiddleware {
|
|
return func(next GTagHandler) GTagHandler {
|
|
return func(r *http.Request, payload *gtag.Payload) error {
|
|
payload.ProtocolVersion = &v
|
|
return next(r, payload)
|
|
}
|
|
}
|
|
}
|
|
|
|
func GTagMiddlewarIsDebug(next GTagHandler) GTagHandler {
|
|
v := "1"
|
|
return func(r *http.Request, payload *gtag.Payload) error {
|
|
if session.IsGTMDebug(r) {
|
|
payload.IsDebug = &v
|
|
}
|
|
return next(r, payload)
|
|
}
|
|
}
|
|
|
|
func GTagMiddlewarClientID(next GTagHandler) GTagHandler {
|
|
return func(r *http.Request, payload *gtag.Payload) error {
|
|
value, err := session.ParseGAClientID(r)
|
|
if err != nil && !errors.Is(err, http.ErrNoCookie) {
|
|
return errors.Wrap(err, "failed to parse client cookie")
|
|
}
|
|
if value != "" {
|
|
payload.ClientID = &value
|
|
}
|
|
return next(r, payload)
|
|
}
|
|
}
|
|
|
|
func GTagMiddlewarWithoutCancel(next GTagHandler) GTagHandler {
|
|
return func(r *http.Request, payload *gtag.Payload) error {
|
|
return next(r.WithContext(context.WithoutCancel(r.Context())), payload)
|
|
}
|
|
}
|
|
|
|
func GTagMiddlewarSessionID(measurementID string) GTagMiddleware {
|
|
measurementID = strings.Split(measurementID, "-")[1]
|
|
return func(next GTagHandler) GTagHandler {
|
|
return func(r *http.Request, payload *gtag.Payload) error {
|
|
value, err := session.ParseGASessionID(r, measurementID)
|
|
if err != nil && !errors.Is(err, http.ErrNoCookie) {
|
|
return errors.Wrap(err, "failed to parse session cookie")
|
|
}
|
|
if value != "" {
|
|
payload.SessionID = &value
|
|
}
|
|
return next(r, payload)
|
|
}
|
|
}
|
|
}
|