From f793203e043aaa2db38823c84500e82756348ac0 Mon Sep 17 00:00:00 2001 From: Kyren223 Date: Thu, 17 Jul 2025 18:45:43 +0300 Subject: Added session duration metrics with device analytics along with device analytics metrics in the DB to aggregate and DeviceID abuse prevention --- internal/server/session/session.go | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'internal/server/session/session.go') 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 { -- cgit v1.3.1