summaryrefslogtreecommitdiff
path: root/internal/server/api/helpers.go
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/api/helpers.go
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/api/helpers.go')
-rw-r--r--internal/server/api/helpers.go36
1 files changed, 36 insertions, 0 deletions
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
+}