feat: add middlewares

This commit is contained in:
Kevin Franklin Kim 2024-11-21 12:36:05 +01:00
parent 9cca227cd3
commit 757a4f63e5
No known key found for this signature in database
2 changed files with 56 additions and 9 deletions

View File

@ -17,12 +17,11 @@ import (
type (
Collect struct {
l *zap.Logger
taggingURL string
taggingClient *http.Client
taggingMaxResponseCode int
gtagHTTPMiddlewares []gtaghttp.Middleware
mpv2HTTPMiddlewares []mpv2http.Middleware
l *zap.Logger
taggingURL string
taggingClient *http.Client
gtagHTTPMiddlewares []gtaghttp.Middleware
mpv2HTTPMiddlewares []mpv2http.Middleware
}
Option func(*Collect) error
)
@ -65,9 +64,8 @@ func WithMPv2HTTPMiddlewares(v ...mpv2http.Middleware) Option {
func New(l *zap.Logger, opts ...Option) (*Collect, error) {
inst := &Collect{
l: l,
taggingClient: http.DefaultClient,
taggingMaxResponseCode: http.StatusBadRequest,
l: l,
taggingClient: http.DefaultClient,
}
for _, opt := range opts {

View File

@ -94,6 +94,55 @@ func MiddlewareTimestamp(next MiddlewareHandler) MiddlewareHandler {
}
}
func MiddlewareUserAgentEventParam(next MiddlewareHandler) MiddlewareHandler {
return func(l *zap.Logger, w http.ResponseWriter, r *http.Request, payload *mpv2.Payload[any]) error {
if userAgent := r.Header.Get("User-Agent"); userAgent != "" {
for i, event := range payload.Events {
if value, ok := event.Params.(map[string]any); ok {
value["user_agent"] = userAgent
}
payload.Events[i] = event
}
}
return next(l, w, r, payload)
}
}
func MiddlewareIPOverrideEventParam(next MiddlewareHandler) MiddlewareHandler {
return func(l *zap.Logger, w http.ResponseWriter, r *http.Request, payload *mpv2.Payload[any]) error {
var ipOverride string
for _, key := range []string{"X-Original-Forwarded-For", "X-Forwarded-For", "X-Real-Ip"} {
if value := r.Header.Get(key); value != "" {
ipOverride = value
break
}
}
if ipOverride != "" {
for i, event := range payload.Events {
if value, ok := event.Params.(map[string]any); ok {
value["ip_override"] = ipOverride
}
payload.Events[i] = event
}
}
return next(l, w, r, payload)
}
}
func MiddlewarePageLocationEventParam(next MiddlewareHandler) MiddlewareHandler {
return func(l *zap.Logger, w http.ResponseWriter, r *http.Request, payload *mpv2.Payload[any]) error {
if referrer := r.Header.Get("Referer"); referrer != "" {
for i, event := range payload.Events {
if value, ok := event.Params.(map[string]any); ok {
value["page_location"] = referrer
}
payload.Events[i] = event
}
}
return next(l, w, r, payload)
}
}
func MiddlewareLogger(next MiddlewareHandler) MiddlewareHandler {
return func(l *zap.Logger, w http.ResponseWriter, r *http.Request, payload *mpv2.Payload[any]) error {
eventNames := make([]string, len(payload.Events))