mirror of
https://github.com/SecurityBrewery/catalyst.git
synced 2025-12-06 07:12:46 +01:00
refactor: remove pocketbase (#1138)
This commit is contained in:
216
app/data/upgradetest.go
Normal file
216
app/data/upgradetest.go
Normal file
@@ -0,0 +1,216 @@
|
||||
package data
|
||||
|
||||
import (
|
||||
"context"
|
||||
_ "embed"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/SecurityBrewery/catalyst/app/database/sqlc"
|
||||
"github.com/SecurityBrewery/catalyst/app/pointer"
|
||||
)
|
||||
|
||||
//go:embed scripts/upgradetest.py
|
||||
var Script string
|
||||
|
||||
func GenerateUpgradeTestData(ctx context.Context, queries *sqlc.Queries) error { //nolint:cyclop
|
||||
if _, err := createTestUser(ctx, queries); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, ticket := range CreateUpgradeTestDataTickets() {
|
||||
_, err := queries.InsertTicket(ctx, sqlc.InsertTicketParams{
|
||||
ID: ticket.ID,
|
||||
Name: ticket.Name,
|
||||
Type: ticket.Type,
|
||||
Description: ticket.Description,
|
||||
Open: ticket.Open,
|
||||
Schema: ticket.Schema,
|
||||
State: ticket.State,
|
||||
Owner: ticket.Owner,
|
||||
Resolution: ticket.Resolution,
|
||||
Created: ticket.Created,
|
||||
Updated: ticket.Updated,
|
||||
})
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create ticket: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
for _, comment := range CreateUpgradeTestDataComments() {
|
||||
_, err := queries.InsertComment(ctx, sqlc.InsertCommentParams{
|
||||
ID: comment.ID,
|
||||
Ticket: comment.Ticket,
|
||||
Author: comment.Author,
|
||||
Message: comment.Message,
|
||||
Created: comment.Created,
|
||||
Updated: comment.Updated,
|
||||
})
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create comment: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
for _, timeline := range CreateUpgradeTestDataTimeline() {
|
||||
_, err := queries.InsertTimeline(ctx, sqlc.InsertTimelineParams{
|
||||
ID: timeline.ID,
|
||||
Ticket: timeline.Ticket,
|
||||
Time: timeline.Time,
|
||||
Message: timeline.Message,
|
||||
Created: timeline.Created,
|
||||
Updated: timeline.Updated,
|
||||
})
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create timeline: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
for _, task := range CreateUpgradeTestDataTasks() {
|
||||
_, err := queries.InsertTask(ctx, sqlc.InsertTaskParams{
|
||||
ID: task.ID,
|
||||
Ticket: task.Ticket,
|
||||
Name: task.Name,
|
||||
Open: task.Open,
|
||||
Owner: task.Owner,
|
||||
Created: task.Created,
|
||||
Updated: task.Updated,
|
||||
})
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create task: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
for _, link := range CreateUpgradeTestDataLinks() {
|
||||
_, err := queries.InsertLink(ctx, sqlc.InsertLinkParams{
|
||||
ID: link.ID,
|
||||
Ticket: link.Ticket,
|
||||
Url: link.Url,
|
||||
Name: link.Name,
|
||||
Created: link.Created,
|
||||
Updated: link.Updated,
|
||||
})
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create link: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
for _, reaction := range CreateUpgradeTestDataReaction() {
|
||||
_, err := queries.InsertReaction(ctx, sqlc.InsertReactionParams{ //nolint: staticcheck
|
||||
ID: reaction.ID,
|
||||
Name: reaction.Name,
|
||||
Trigger: reaction.Trigger,
|
||||
Triggerdata: reaction.Triggerdata,
|
||||
Action: reaction.Action,
|
||||
Actiondata: reaction.Actiondata,
|
||||
Created: reaction.Created,
|
||||
Updated: reaction.Updated,
|
||||
})
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create reaction: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func CreateUpgradeTestDataTickets() map[string]sqlc.Ticket {
|
||||
return map[string]sqlc.Ticket{
|
||||
"t_0": {
|
||||
ID: "t_0",
|
||||
Created: ticketCreated,
|
||||
Updated: ticketCreated.Add(time.Minute * 5),
|
||||
Name: "phishing-123",
|
||||
Type: "alert",
|
||||
Description: "Phishing email reported by several employees.",
|
||||
Open: true,
|
||||
Schema: json.RawMessage(`{"type":"object","properties":{"tlp":{"title":"TLP","type":"string"}}}`),
|
||||
State: json.RawMessage(`{"severity":"Medium"}`),
|
||||
Owner: pointer.Pointer("u_test"),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func CreateUpgradeTestDataComments() map[string]sqlc.Comment {
|
||||
return map[string]sqlc.Comment{
|
||||
"c_0": {
|
||||
ID: "c_0",
|
||||
Created: ticketCreated.Add(time.Minute * 10),
|
||||
Updated: ticketCreated.Add(time.Minute * 15),
|
||||
Ticket: "t_0",
|
||||
Author: "u_test",
|
||||
Message: "This is a test comment.",
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func CreateUpgradeTestDataTimeline() map[string]sqlc.Timeline {
|
||||
return map[string]sqlc.Timeline{
|
||||
"tl_0": {
|
||||
ID: "tl_0",
|
||||
Created: ticketCreated.Add(time.Minute * 15),
|
||||
Updated: ticketCreated.Add(time.Minute * 20),
|
||||
Ticket: "t_0",
|
||||
Time: ticketCreated.Add(time.Minute * 15),
|
||||
Message: "This is a test timeline message.",
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func CreateUpgradeTestDataTasks() map[string]sqlc.Task {
|
||||
return map[string]sqlc.Task{
|
||||
"ts_0": {
|
||||
ID: "ts_0",
|
||||
Created: ticketCreated.Add(time.Minute * 20),
|
||||
Updated: ticketCreated.Add(time.Minute * 25),
|
||||
Ticket: "t_0",
|
||||
Name: "This is a test task.",
|
||||
Open: true,
|
||||
Owner: pointer.Pointer("u_test"),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func CreateUpgradeTestDataLinks() map[string]sqlc.Link {
|
||||
return map[string]sqlc.Link{
|
||||
"l_0": {
|
||||
ID: "l_0",
|
||||
Created: ticketCreated.Add(time.Minute * 25),
|
||||
Updated: ticketCreated.Add(time.Minute * 30),
|
||||
Ticket: "t_0",
|
||||
Url: "https://www.example.com",
|
||||
Name: "This is a test link.",
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func CreateUpgradeTestDataReaction() map[string]sqlc.Reaction {
|
||||
var (
|
||||
reactionCreated = time.Date(2025, 2, 1, 11, 30, 0, 0, time.UTC)
|
||||
reactionUpdated = reactionCreated.Add(time.Minute * 5)
|
||||
)
|
||||
|
||||
createTicketActionData := marshal(map[string]any{
|
||||
"requirements": "pocketbase",
|
||||
"script": Script,
|
||||
})
|
||||
|
||||
return map[string]sqlc.Reaction{
|
||||
"w_0": {
|
||||
ID: "w_0",
|
||||
Created: reactionCreated,
|
||||
Updated: reactionUpdated,
|
||||
Name: "Create New Ticket",
|
||||
Trigger: "schedule",
|
||||
Triggerdata: json.RawMessage(`{"expression":"12 * * * *"}`),
|
||||
Action: "python",
|
||||
Actiondata: createTicketActionData,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func marshal(m map[string]any) json.RawMessage {
|
||||
b, _ := json.Marshal(m) //nolint:errchkjson
|
||||
|
||||
return b
|
||||
}
|
||||
Reference in New Issue
Block a user