diff --git a/modules/structs/grouptasks.go b/modules/structs/grouptasks.go index c798337..d765ced 100644 --- a/modules/structs/grouptasks.go +++ b/modules/structs/grouptasks.go @@ -40,6 +40,7 @@ type GroupTaskSteps struct { Inputs string `gorm:"type:json"` StartedAt time.Time EndedAt time.Time + Locked bool `gorm:"-"` // used by the web client to ensure that only one user can edit the input value } // read from file structure diff --git a/modules/utils/globals.go b/modules/utils/globals.go index fa54b25..11d2ab0 100644 --- a/modules/utils/globals.go +++ b/modules/utils/globals.go @@ -36,6 +36,7 @@ const ( SentCmdUpdateScannerUsedBy = 13 SentCmdScanResult = 14 SentCmdUpdateScannerLastUsed = 15 + SentCmdTaskLocked = 16 ) // commands received from web clients @@ -44,6 +45,7 @@ const ( ReceivedCmdTaskFailedTryAgainRunTaskStep = 2 ReceivedCmdTaskContinueTaskStep = 3 ReceivedCmdReloadGroupTasks = 4 + ReceivedCmdTaskLocking = 5 ) var ( diff --git a/socketclients/socketclients.go b/socketclients/socketclients.go index e76a4db..b7458a9 100644 --- a/socketclients/socketclients.go +++ b/socketclients/socketclients.go @@ -13,6 +13,14 @@ func BroadcastMessage(sendSocketMessage structs.SendSocketMessage) { } } +func BroadcastMessageExceptUserSessionId(ignoreUserSessionId string, sendSocketMessage structs.SendSocketMessage) { + for _, client := range cache.GetSocketClients() { + if client.SessionId != ignoreUserSessionId { + client.SendMessage(sendSocketMessage) + } + } +} + func UpdateConnectedUsers(userId string) { BroadcastMessage(structs.SendSocketMessage{ Cmd: utils.SentCmdUpdateConnectedUsers, diff --git a/socketserver/hub.go b/socketserver/hub.go index e19afc7..8f0b1cc 100644 --- a/socketserver/hub.go +++ b/socketserver/hub.go @@ -154,6 +154,14 @@ func RunHub() { grouptasks.LoadGroups(category) break + case utils.ReceivedCmdTaskLocking: + log.Info().Msgf("task locking %s", receivedMessage.Body) + + socketclients.BroadcastMessageExceptUserSessionId(data.Conn.Locals("sessionId").(string), structs.SendSocketMessage{ + Cmd: utils.SentCmdTaskLocked, + Body: receivedMessage.Body, + }) + break default: log.Error().Msgf("Received unknown message: %s", receivedMessage)