diff options
| author | Kyren223 <Kyren223@proton.me> | 2025-07-17 18:45:43 +0300 |
|---|---|---|
| committer | Kyren223 <Kyren223@proton.me> | 2025-07-19 18:32:12 +0300 |
| commit | f793203e043aaa2db38823c84500e82756348ac0 (patch) | |
| tree | 88a8a7b78069427f11acb0f2040e9f1d391fab55 /internal/server/session | |
| parent | aaea258a21226a893025a65222e244c6b3f4454c (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.go | 24 |
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 { |
