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/api/helpers.go | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'internal/server/api/helpers.go') diff --git a/internal/server/api/helpers.go b/internal/server/api/helpers.go index ea192df..6993d0a 100644 --- a/internal/server/api/helpers.go +++ b/internal/server/api/helpers.go @@ -3,6 +3,7 @@ package api import ( "context" "log/slog" + "slices" "strings" "time" @@ -190,3 +191,38 @@ func getNotifications(ctx context.Context, userId snowflake.ID) (packet.Notifica } return items, nil } + +var ( + ValidOs = []string{"linux", "darwin", "windows", "android", ""} + ValidArch = []string{"amd64", "arm64", "386", ""} + ValidTerm = []string{"xterm-256color", "tmux-256color", "xterm-ghostty", "xterm-kitty", "alacritty", "foot", "xterm", ""} + ValidColorterm = []string{"truecolor", "24bit", ""} +) + +func IsValidAnalytics(ctx context.Context, analytics *packet.DeviceAnalytics) bool { + if analytics == nil { + return false + } + + if !slices.Contains(ValidOs, analytics.OS) { + slog.WarnContext(ctx, "unrecognized analytics value", "os", analytics.OS, "analytics", analytics) + return false + } + + if !slices.Contains(ValidArch, analytics.Arch) { + slog.WarnContext(ctx, "unrecognized analytics value", "arch", analytics.Arch, "analytics", analytics) + return false + } + + if !slices.Contains(ValidTerm, analytics.Term) { + slog.WarnContext(ctx, "unrecognized analytics value", "term", analytics.Term, "analytics", analytics) + return false + } + + if !slices.Contains(ValidColorterm, analytics.Colorterm) { + slog.WarnContext(ctx, "unrecognized analytics value", "colorterm", analytics.Colorterm, "analytics", analytics) + return false + } + + return true +} -- cgit v1.3.1