mirror of
https://github.com/Ed1s0nZ/CyberStrikeAI.git
synced 2026-05-21 15:16:55 +02:00
56 lines
1.5 KiB
Go
56 lines
1.5 KiB
Go
package audit
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"cyberstrike-ai/internal/database"
|
|
"cyberstrike-ai/internal/security"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
// RegisterConversationCreateHook records platform audit rows for every new conversation.
|
|
func RegisterConversationCreateHook(s *Service) {
|
|
if s == nil {
|
|
return
|
|
}
|
|
database.SetConversationCreateHook(func(conv *database.Conversation, meta database.ConversationCreateMeta) {
|
|
detail := map[string]interface{}{
|
|
"title": conv.Title,
|
|
"source": meta.Source,
|
|
}
|
|
if meta.WebShellConnectionID != "" {
|
|
detail["webshell_connection_id"] = meta.WebShellConnectionID
|
|
}
|
|
s.Record(nil, Entry{
|
|
Category: "conversation",
|
|
Action: "create",
|
|
Result: "success",
|
|
Message: "创建对话",
|
|
ResourceType: "conversation",
|
|
ResourceID: conv.ID,
|
|
Detail: detail,
|
|
ClientIP: meta.ClientIP,
|
|
SessionHint: meta.SessionHint,
|
|
})
|
|
})
|
|
}
|
|
|
|
// ConversationCreateMeta builds audit metadata for conversation creation.
|
|
func ConversationCreateMeta(source string) database.ConversationCreateMeta {
|
|
return database.ConversationCreateMeta{Source: strings.TrimSpace(source)}
|
|
}
|
|
|
|
// ConversationCreateMetaFromGin includes client IP and session hint when available.
|
|
func ConversationCreateMetaFromGin(c *gin.Context, source string) database.ConversationCreateMeta {
|
|
m := ConversationCreateMeta(source)
|
|
if c == nil {
|
|
return m
|
|
}
|
|
m.ClientIP = c.ClientIP()
|
|
if token := c.GetString(security.ContextAuthTokenKey); token != "" {
|
|
m.SessionHint = sessionHint(token)
|
|
}
|
|
return m
|
|
}
|