From 86ce1b3ff7bc8f7bd69ee7a0c35683255109143e Mon Sep 17 00:00:00 2001 From: mrhid6 Date: Fri, 17 Jul 2026 11:20:41 +0100 Subject: [PATCH] feat: console session lifecycle persistence --- server/internal/services/console.go | 44 +++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/server/internal/services/console.go b/server/internal/services/console.go index 5c37960..1825399 100644 --- a/server/internal/services/console.go +++ b/server/internal/services/console.go @@ -1,6 +1,7 @@ package services import ( + "context" "crypto/hmac" "crypto/sha256" "encoding/base64" @@ -9,7 +10,10 @@ import ( "strings" "time" + "github.com/google/uuid" + "github.com/mrhid6/vantage/server/internal/db" "github.com/mrhid6/vantage/server/internal/models" + "go.mongodb.org/mongo-driver/v2/bson" ) func sessionHMACKey() ([]byte, error) { @@ -116,3 +120,43 @@ func BuildGuacParams(srv *models.Server, protocol, privateKey, rdpUser, rdpPass return nil, fmt.Errorf("unsupported protocol %q", protocol) } } + +func CreateConsoleSession(serverID, protocol, keyID, user, clientIP string) (*models.ConsoleSession, error) { + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + + s := &models.ConsoleSession{ + SessionID: uuid.NewString(), + ServerID: serverID, + Protocol: protocol, + KeyID: keyID, + User: user, + ClientIP: clientIP, + StartedAt: time.Now(), + } + if _, err := db.Col("console_sessions").InsertOne(ctx, s); err != nil { + return nil, err + } + return s, nil +} + +func GetConsoleSession(sessionID string) (*models.ConsoleSession, error) { + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + var s models.ConsoleSession + if err := db.Col("console_sessions").FindOne(ctx, bson.M{"session_id": sessionID}).Decode(&s); err != nil { + return nil, err + } + return &s, nil +} + +func EndConsoleSession(sessionID string) error { + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + now := time.Now() + _, err := db.Col("console_sessions").UpdateOne(ctx, + bson.M{"session_id": sessionID, "ended_at": nil}, + bson.M{"$set": bson.M{"ended_at": now}}, + ) + return err +}