mirror of
https://github.com/Ed1s0nZ/CyberStrikeAI.git
synced 2026-05-21 07:06:53 +02:00
43 lines
903 B
Go
43 lines
903 B
Go
package handler
|
|
|
|
import (
|
|
"encoding/csv"
|
|
"fmt"
|
|
"time"
|
|
|
|
"cyberstrike-ai/internal/database"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
func writeAuditLogsCSV(c *gin.Context, logs []*database.AuditLog) {
|
|
c.Header("Content-Type", "text/csv; charset=utf-8")
|
|
c.Header("Content-Disposition", fmt.Sprintf(`attachment; filename="audit-logs-%s.csv"`, time.Now().Format("20060102")))
|
|
|
|
w := csv.NewWriter(c.Writer)
|
|
_ = w.Write([]string{
|
|
"id", "created_at", "level", "category", "action", "result", "actor",
|
|
"session_hint", "client_ip", "resource_type", "resource_id", "message",
|
|
})
|
|
for _, row := range logs {
|
|
if row == nil {
|
|
continue
|
|
}
|
|
_ = w.Write([]string{
|
|
row.ID,
|
|
row.CreatedAt.UTC().Format(time.RFC3339),
|
|
row.Level,
|
|
row.Category,
|
|
row.Action,
|
|
row.Result,
|
|
row.Actor,
|
|
row.SessionHint,
|
|
row.ClientIP,
|
|
row.ResourceType,
|
|
row.ResourceID,
|
|
row.Message,
|
|
})
|
|
}
|
|
w.Flush()
|
|
}
|