summaryrefslogtreecommitdiff
path: root/internal/server/session
diff options
context:
space:
mode:
authorKyren223 <Kyren223@proton.me>2025-07-17 18:45:43 +0300
committerKyren223 <Kyren223@proton.me>2025-07-19 18:32:12 +0300
commitf793203e043aaa2db38823c84500e82756348ac0 (patch)
tree88a8a7b78069427f11acb0f2040e9f1d391fab55 /internal/server/session
parentaaea258a21226a893025a65222e244c6b3f4454c (diff)
Added session duration metrics with device analytics along with device
analytics metrics in the DB to aggregate and DeviceID abuse prevention
Diffstat (limited to 'internal/server/session')
-rw-r--r--internal/server/session/session.go24
1 files changed, 24 insertions, 0 deletions
diff --git a/internal/server/session/session.go b/internal/server/session/session.go
index f0f82bd..1eb2e80 100644
--- a/internal/server/session/session.go
+++ b/internal/server/session/session.go
@@ -52,6 +52,8 @@ type Session struct {
pubKey ed25519.PublicKey
id snowflake.ID
rl rate.Limiter
+ start time.Time
+ analytics *packet.DeviceAnalytics
mu sync.RWMutex
}
@@ -77,6 +79,8 @@ func NewSession(
challengeMu: sync.Mutex{},
isTosAccepted: false,
rl: rate.NewLimiter(DefaultRate, DefaultLimit),
+ start: time.Time{},
+ analytics: nil,
mu: sync.RWMutex{},
}
return session
@@ -130,6 +134,26 @@ func (s *Session) Promote(userId snowflake.ID, pubKey ed25519.PublicKey) {
s.pubKey = pubKey
s.rl.SetLimit(AuthenticatedLimit)
s.rl.SetRate(AuthenticatedRate)
+ s.start = time.Now().UTC()
+}
+
+func (s *Session) Duration() time.Duration {
+ assert.Assert(s.IsAuthenticated(), "tried accessing session duration in an authenticated session")
+ s.mu.RLock()
+ defer s.mu.RUnlock()
+ return time.Since(s.start)
+}
+
+func (s *Session) Analytics() *packet.DeviceAnalytics {
+ s.mu.RLock()
+ defer s.mu.RUnlock()
+ return s.analytics
+}
+
+func (s *Session) SetAnalytics(analytics *packet.DeviceAnalytics) {
+ s.mu.Lock()
+ defer s.mu.Unlock()
+ s.analytics = analytics
}
func (s *Session) Manager() SessionManager {