-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcontext_builtin.go
65 lines (58 loc) · 1.74 KB
/
context_builtin.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package plausible
import (
"fmt"
"strings"
"github.com/go-mojito/mojito/pkg/router"
)
// context provides the implementation for PlausibleContext
type context struct {
router.Context
}
// domain will resolve the domain the event is being created for
func (p *context) IsDomain() bool {
return strings.ToLower(p.Request().GetRequest().Host) == strings.ToLower(domain)
}
// createEvent will create an empty event with request-based values filled in
func (p *context) createEvent(eventName string) *Event {
url := p.Request().GetRequest().URL
referer := p.Request().GetRequest().Referer()
forwardedFor := p.Request().GetRequest().Header.Get("X-Forwarded-For")
realIP := p.Request().GetRequest().Header.Get("X-Real-IP")
event := &Event{
Domain: domain,
Event: eventName,
URL: fmt.Sprintf("http://%s%s", domain, url.Path),
Width: guessWidthFromUA(p.Request().GetRequest().UserAgent()),
Payload: nil,
}
if referer != "" {
event.Referer = &referer
}
if realIP != "" {
event.IP = &realIP
}
if forwardedFor != "" {
event.IP = &forwardedFor
}
return event
}
// PageView will send a pageview event to the Plausible API for tracking visits
func (p *context) PageView(pageUrl ...string) error {
if enforceDomainFilter && !p.IsDomain() {
return nil
}
event := p.createEvent("pageview")
if pageUrl != nil && len(pageUrl) > 0 {
event.URL = fmt.Sprintf("http://%s/%s", domain, strings.Join(pageUrl, "/"))
}
return SubmitEvent(*event)
}
// Trigger will send a custom event to the Plausible API for tracking goals
func (p *context) Trigger(eventName string, payload map[string]string) error {
if enforceDomainFilter && !p.IsDomain() {
return nil
}
event := p.createEvent(eventName)
event.Payload = payload
return SubmitEvent(*event)
}