diff --git a/busservice/job.go b/busservice/job.go index 9b3d98d..d321f88 100644 --- a/busservice/job.go +++ b/busservice/job.go @@ -47,14 +47,12 @@ func (h *busService) handleJob(automationMsg *bus.JobMsg) { return } - if _, err := h.db.JobUpdate(ctx, automationMsg.ID, &model.Job{ - Automation: job.Automation, - Container: &containerID, - Origin: job.Origin, - Output: job.Output, - Log: &logs, - Payload: job.Payload, - Status: job.Status, + if _, err := h.db.JobUpdate(ctx, automationMsg.ID, &model.JobUpdate{ + Container: &containerID, + Running: true, + Output: job.Output, + Log: &logs, + Status: job.Status, }); err != nil { log.Println(err) return diff --git a/database/job.go b/database/job.go index 58dae9e..6613799 100644 --- a/database/job.go +++ b/database/job.go @@ -5,11 +5,9 @@ import ( "encoding/json" "errors" "fmt" - "strings" "github.com/arangodb/go-driver" "github.com/docker/docker/client" - "github.com/xeipuuv/gojsonschema" "github.com/SecurityBrewery/catalyst/bus" "github.com/SecurityBrewery/catalyst/caql" @@ -39,15 +37,19 @@ func (db *Database) toJobResponse(ctx context.Context, key string, doc *model.Jo if doc.Running { inspect, err := cli.ContainerInspect(ctx, key) if err != nil || inspect.State == nil { - doc.Running = false if update { - db.JobUpdate(ctx, key, doc) + db.JobUpdate(ctx, key, &model.JobUpdate{ + Status: doc.Status, + Running: false, + }) } } else if doc.Status != inspect.State.Status { status = inspect.State.Status - doc.Status = inspect.State.Status if update { - db.JobUpdate(ctx, key, doc) + db.JobUpdate(ctx, key, &model.JobUpdate{ + Status: status, + Running: doc.Running, + }) } } } @@ -72,25 +74,7 @@ func (db *Database) JobCreate(ctx context.Context, id string, job *model.JobForm var doc model.Job newctx := driver.WithReturnNew(ctx, &doc) - /* Start validation */ - j := toJob(job) - b, _ := json.Marshal(j) - - r, err := model.JobSchema.Validate(gojsonschema.NewBytesLoader(b)) - if err != nil { - return nil, err - } - - if !r.Valid() { - var errs []string - for _, e := range r.Errors() { - errs = append(errs, e.String()) - } - return nil, errors.New(strings.Join(errs, ", ")) - } - /* End validation */ - - meta, err := db.jobCollection.CreateDocument(ctx, newctx, id, j) + meta, err := db.jobCollection.CreateDocument(ctx, newctx, id, toJob(job)) if err != nil { return nil, err } @@ -108,28 +92,11 @@ func (db *Database) JobGet(ctx context.Context, id string) (*model.JobResponse, return db.toJobResponse(ctx, meta.Key, &doc, true) } -func (db *Database) JobUpdate(ctx context.Context, id string, job *model.Job) (*model.JobResponse, error) { +func (db *Database) JobUpdate(ctx context.Context, id string, job *model.JobUpdate) (*model.JobResponse, error) { var doc model.Job ctx = driver.WithReturnNew(ctx, &doc) - /* Start validation */ - b, _ := json.Marshal(job) - - r, err := model.JobSchema.Validate(gojsonschema.NewBytesLoader(b)) - if err != nil { - return nil, err - } - - if !r.Valid() { - var errs []string - for _, e := range r.Errors() { - errs = append(errs, e.String()) - } - return nil, errors.New(strings.Join(errs, ", ")) - } - /* End validation */ - - meta, err := db.jobCollection.ReplaceDocument(ctx, id, job) + meta, err := db.jobCollection.UpdateDocument(ctx, id, job) if err != nil { return nil, err } diff --git a/database/ticket_task.go b/database/ticket_task.go index 09863b4..7f0616a 100644 --- a/database/ticket_task.go +++ b/database/ticket_task.go @@ -113,18 +113,18 @@ func extractTicketResponse(ticket *model.TicketWithTickets) *model.TicketRespons } } -func (db *Database) TaskUpdate(ctx context.Context, id int64, playbookID string, taskID string, task *model.Task) (*model.TicketWithTickets, error) { +func (db *Database) TaskUpdateOwner(ctx context.Context, id int64, playbookID string, taskID string, owner string) (*model.TicketWithTickets, error) { ticketFilterQuery, ticketFilterVars, err := db.Hooks.TicketWriteFilter(ctx) if err != nil { return nil, err } - task.Created = time.Now().UTC() - query := `LET d = DOCUMENT(@@collection, @ID) ` + ticketFilterQuery + ` LET playbook = d.playbooks[@playbookID] - LET newtasks = MERGE(playbook.tasks, { @taskID: @task } ) + LET task = playbook.tasks[@taskID] + LET newtask = MERGE(task, {"owner": @owner }) + LET newtasks = MERGE(playbook.tasks, { @taskID: newtask } ) LET newplaybook = MERGE(playbook, {"tasks": newtasks}) LET newplaybooks = MERGE(d.playbooks, { @playbookID: newplaybook } ) @@ -133,7 +133,42 @@ func (db *Database) TaskUpdate(ctx context.Context, id int64, playbookID string, ticket, err := db.ticketGetQuery(ctx, id, query, mergeMaps(map[string]interface{}{ "playbookID": playbookID, "taskID": taskID, - "task": task, + "owner": owner, + "now": time.Now().UTC(), + }, ticketFilterVars), &busdb.Operation{ + Type: bus.DatabaseEntryUpdated, + Ids: []driver.DocumentID{ + driver.NewDocumentID(TicketCollectionName, fmt.Sprintf("%d", id)), + }, + }) + if err != nil { + return nil, err + } + + return ticket, nil +} + +func (db *Database) TaskUpdateData(ctx context.Context, id int64, playbookID string, taskID string, data map[string]interface{}) (*model.TicketWithTickets, error) { + ticketFilterQuery, ticketFilterVars, err := db.Hooks.TicketWriteFilter(ctx) + if err != nil { + return nil, err + } + + query := `LET d = DOCUMENT(@@collection, @ID) + ` + ticketFilterQuery + ` + LET playbook = d.playbooks[@playbookID] + LET task = playbook.tasks[@taskID] + LET newtask = MERGE(task, {"data": @data }) + LET newtasks = MERGE(playbook.tasks, { @taskID: newtask } ) + LET newplaybook = MERGE(playbook, {"tasks": newtasks}) + LET newplaybooks = MERGE(d.playbooks, { @playbookID: newplaybook } ) + + UPDATE d WITH { "modified": @now, "playbooks": newplaybooks } IN @@collection + RETURN NEW` + ticket, err := db.ticketGetQuery(ctx, id, query, mergeMaps(map[string]interface{}{ + "playbookID": playbookID, + "taskID": taskID, + "data": data, "now": time.Now().UTC(), }, ticketFilterVars), &busdb.Operation{ Type: bus.DatabaseEntryUpdated, diff --git a/database/user.go b/database/user.go index 817d356..ea752c7 100644 --- a/database/user.go +++ b/database/user.go @@ -191,6 +191,8 @@ func (db *Database) UserUpdate(ctx context.Context, id string, user *model.UserF ctx = driver.WithReturnNew(ctx, &doc) + user.ID = id + meta, err := db.userCollection.ReplaceDocument(ctx, id, toUser(user, nil)) if err != nil { return nil, err diff --git a/definition/jobs.yaml b/definition/jobs.yaml index eaa5441..9681eef 100644 --- a/definition/jobs.yaml +++ b/definition/jobs.yaml @@ -48,7 +48,7 @@ paths: operationId: "updateJob" parameters: - { name: "id", in: "path", description: "Job ID", required: true, type: string, x-example: "99cd67131b48" } - - { name: "job", in: "body", description: "Job object that needs to be added", required: true, schema: { $ref: "#/definitions/Job" }, x-example: { id: "99cd67131b48", automation: "hash.sha1", payload: "test", status: "failed" } } + - { name: "job", in: "body", description: "Job object that needs to be added", required: true, schema: { $ref: "#/definitions/JobUpdate" }, x-example: { status: "failed", running: false } } responses: "200": description: "successful operation" @@ -103,6 +103,16 @@ definitions: payload: { } origin: { $ref: "#/definitions/Origin" } + JobUpdate: + type: object + required: [ running, status ] + properties: + container: { type: string } + running: { type: boolean } + status: { type: string } + log: { type: string } + output: { type: object } + Job: type: object required: [ automation, running, status ] diff --git a/definition/tasks.yaml b/definition/tasks.yaml index c48afdc..73da5a8 100644 --- a/definition/tasks.yaml +++ b/definition/tasks.yaml @@ -16,31 +16,6 @@ paths: security: [ { roles: [ "ticket:read" ] } ] definitions: - TaskForm: - type: object - required: [ name, type ] - properties: - name: { type: string, example: "Inform user" } - type: { type: string, enum: [ task, input, automation ], example: "task" } - done: { type: boolean } - - owner: { type: string } - data: { type: object } - - # automation - automation: { type: string } - payload: { type: object, additionalProperties: { type: string } } - - # input - schema: { type: object } - - # workflow - join: { type: boolean, example: false } - next: { type: object, additionalProperties: { type: string } } - - created: { type: string, format: "date-time", example: "1985-04-12T23:20:50.52Z" } - closed: { type: string, format: "date-time", example: "1985-04-12T23:20:50.52Z" } - Task: type: object required: [ name, type, done, created ] diff --git a/definition/tickets.yaml b/definition/tickets.yaml index 26ea3ad..364a2e2 100644 --- a/definition/tickets.yaml +++ b/definition/tickets.yaml @@ -80,7 +80,7 @@ paths: summary: "Create a new tickets in batch" operationId: "createTicketBatch" parameters: - - { name: "ticket", in: "body", description: "New ticket", required: true, schema: { type: array, items: { $ref: "#/definitions/TicketForm" } }, x-example: [ { id: 123, owner: bob, name: "Wannacry infection", status: "open", type: "incident" } ] } + - { name: "ticket", in: "body", description: "New ticket", required: true, schema: { $ref: "#/definitions/TicketFormArray" }, x-example: [ { id: 123, owner: bob, name: "Wannacry infection", status: "open", type: "incident" } ] } responses: "204": { description: "successful operation" } security: [ { roles: [ "ticket:write" ] } ] @@ -336,7 +336,7 @@ paths: operationId: "setReferences" parameters: - { name: "id", in: "path", description: "Ticket ID", required: true, type: integer, format: "int64", x-example: 8125 } - - { name: "references", in: "body", description: "All ticket references", required: true, schema: { type: array, items: { $ref: "#/definitions/Reference" } }, x-example: [ { href: "http://www.leadscalable.biz/envisioneer", name: "fund" } ] } + - { name: "references", in: "body", description: "All ticket references", required: true, schema: { $ref: "#/definitions/ReferenceArray" }, x-example: [ { href: "http://www.leadscalable.biz/envisioneer", name: "fund" } ] } responses: "200": description: "successful operation" @@ -583,13 +583,13 @@ paths: /tickets/{id}/playbooks/{playbookID}/task/{taskID}: put: tags: [ "tickets" ] - summary: "Set a ticket playbook task" - operationId: "setTask" + summary: "Set a ticket playbook task data" + operationId: "setTaskData" parameters: - { name: "id", in: "path", description: "Ticket ID", required: true, type: integer, format: "int64", x-example: 8123 } - { name: "playbookID", in: "path", description: "Playbook ID", required: true, type: string, x-example: "phishing" } - { name: "taskID", in: "path", description: "Task ID", required: true, type: string, x-example: "board" } - - { name: "task", in: "body", description: "Task", required: true, schema: { $ref: "#/definitions/Task" }, x-example: { done: false, "active": true, "order": 0, name: "Board Involvement?","next": { "escalate": "boardInvolved == true","mail-available": "boardInvolved == false" },"schema": { "properties": { "boardInvolved": { "default": false, "title": "A board member is involved.", type: "boolean" } }, "required": [ "boardInvolved" ], "title": "Board Involvement?", type: "object" }, type: "input", data: { boardInvolved: true } } } + - { name: "data", in: "body", description: "Task data", required: true, schema: { type: object }, x-example: { boardInvolved: true } } responses: "200": description: "successful operation" @@ -625,6 +625,51 @@ paths: - { name: "leadreintermediate.io", status: "malicious" } security: [ { roles: [ "ticket:write" ] } ] + /tickets/{id}/playbooks/{playbookID}/task/{taskID}/owner: + put: + tags: [ "tickets" ] + summary: "Set a ticket playbook task owner" + operationId: "setTaskOwner" + parameters: + - { name: "id", in: "path", description: "Ticket ID", required: true, type: integer, format: "int64", x-example: 8123 } + - { name: "playbookID", in: "path", description: "Playbook ID", required: true, type: string, x-example: "phishing" } + - { name: "taskID", in: "path", description: "Task ID", required: true, type: string, x-example: "board" } + - { name: "owner", in: "body", description: "Task owner", required: true, schema: { type: string }, x-example: "eve" } + responses: + "200": + description: "successful operation" + schema: { $ref: "#/definitions/TicketWithTickets" } + examples: + test: + id: 8123 + created: "2021-10-02T16:04:59.078206Z" + modified: "2021-12-12T12:12:12.000000012Z" + name: "live zebra" + owner: "demo" + playbooks: + phishing: + name: "Phishing" + tasks: + "block-iocs": { created: "2021-12-12T12:12:12.000000012Z", done: false, "active": false, "order": 6, name: "Block IOCs", type: "task" } + "block-sender": { created: "2021-12-12T12:12:12.000000012Z", done: false, "active": false, "order": 3, name: "Block sender","next": { "extract-iocs": "" }, type: "task" } + "board": { created: "2021-12-12T12:12:12.000000012Z", done: false, "active": true, "order": 0, name: "Board Involvement?","next": { "escalate": "boardInvolved == true","mail-available": "boardInvolved == false" },"schema": { "properties": { "boardInvolved": { "default": false, "title": "A board member is involved.", type: "boolean" } }, "required": [ "boardInvolved" ], "title": "Board Involvement?", type: "object" }, type: "input", owner: "eve" } + "escalate": { created: "2021-12-12T12:12:12.000000012Z", done: false, "active": false, "order": 1, name: "Escalate to CISO", type: "task" } + "extract-iocs": { created: "2021-12-12T12:12:12.000000012Z", done: false, "active": false, "order": 5, name: "Extract IOCs", "next": { "block-iocs": "" },"schema": { "properties": { "iocs": { "items": { type: "string" },"title": "IOCs", type: "array" } }, "title": "Extract IOCs", type: "object" }, type: "input" } + "mail-available": { created: "2021-12-12T12:12:12.000000012Z", done: false, "active": false, "order": 2, name: "Mail available","next": { "block-sender": "schemaKey == 'yes'", "extract-iocs": "schemaKey == 'yes'", "search-email-gateway": "schemaKey == 'no'" },"schema": { "oneOf": [ { "properties": { "mail": { "title": "Mail", type: "string", "x-display": "textarea" }, "schemaKey": { "const": "yes", type: "string" } },"required": [ "mail" ], "title": "Yes" },{ "properties": { "schemaKey": { "const": "no", type: "string" } },"title": "No" } ],"title": "Mail available", type: "object" }, type: "input" } + "search-email-gateway": { created: "2021-12-12T12:12:12.000000012Z", done: false, "active": false, "order": 4, name: "Search email gateway","next": { "extract-iocs": "" }, type: "task" } + references: + - { href: "https://www.leadmaximize.net/e-services/back-end", name: "performance" } + - { href: "http://www.corporateinteractive.name/rich", name: "autumn" } + - { href: "https://www.corporateintuitive.org/intuitive/platforms/integrate", name: "suggest" } + "schema": "{\n \"definitions\": {},\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://example.com/object1618746510.json\",\n \"title\": \"Event\",\n \"type\": \"object\",\n \"required\": [\n \"severity\",\n \"description\",\n \"tlp\"\n ],\n \"properties\": {\n \"severity\": {\n \"$id\": \"#root/severity\",\n \"title\": \"Severity\",\n \"type\": \"string\",\n \"default\": \"Medium\",\n \"nx-enum\": [\n \"Low\",\n \"Medium\",\n \"High\"\n ],\n \"x-cols\": 6,\n \"x-class\": \"pr-2\",\n \"x-display\": \"icon\",\n \"x-itemIcon\": \"icon\",\n \"oneOf\": [\n {\n \"const\": \"Low\",\n \"title\": \"Low\",\n \"icon\": \"mdi-chevron-up\"\n },\n {\n \"const\": \"Medium\",\n \"title\": \"Medium\",\n \"icon\": \"mdi-chevron-double-up\"\n },\n {\n \"const\": \"High\",\n \"title\": \"High\",\n \"icon\": \"mdi-chevron-triple-up\"\n }\n ]\n },\n \"tlp\": {\n \"$id\": \"#root/tlp\",\n \"title\": \"TLP\",\n \"type\": \"string\",\n \"nx-enum\": [\n \"White\",\n \"Green\",\n \"Amber\",\n \"Red\"\n ],\n \"x-cols\": 6,\n \"x-class\": \"pr-2\",\n \"x-display\": \"icon\",\n \"x-itemIcon\": \"icon\",\n \"oneOf\": [\n {\n \"const\": \"White\",\n \"title\": \"White\",\n \"icon\": \"mdi-alpha-w\"\n },\n {\n \"const\": \"Green\",\n \"title\": \"Green\",\n \"icon\": \"mdi-alpha-g\"\n },\n {\n \"const\": \"Amber\",\n \"title\": \"Amber\",\n \"icon\": \"mdi-alpha-a\"\n },\n {\n \"const\": \"Red\",\n \"title\": \"Red\",\n \"icon\": \"mdi-alpha-r\"\n }\n ]\n },\n \"description\": {\n \"$id\": \"#root/description\",\n \"title\": \"Description\",\n \"type\": \"string\",\n \"x-display\": \"textarea\",\n \"x-class\": \"pr-2\"\n }\n }\n}\n" + status: "closed" + type: "incident" + artifacts: + - { name: "94d5cab6f5fe3422a447ab15436e7a672bc0c09a", status: "unknown" } + - { name: "http://www.customerviral.io/scalable/vertical/killer", status: "clean" } + - { name: "leadreintermediate.io", status: "malicious" } + security: [ { roles: [ "ticket:write" ] } ] + /tickets/{id}/playbooks/{playbookID}/task/{taskID}/complete: put: tags: [ "tickets" ] @@ -883,6 +928,9 @@ paths: security: [ { roles: [ "ticket:write" ] } ] definitions: + TicketFormArray: + type: array + items: { $ref: "#/definitions/TicketForm" } TicketForm: type: object @@ -1035,6 +1083,10 @@ definitions: created: { type: string, format: "date-time" } message: { type: string } + ReferenceArray: + type: array + items: { $ref: '#/definitions/Reference' } + Reference: type: object required: [ name, href ] diff --git a/definition/users.yaml b/definition/users.yaml index 5020cfd..d2a86dd 100644 --- a/definition/users.yaml +++ b/definition/users.yaml @@ -34,7 +34,7 @@ paths: summary: "Create user" operationId: "createUser" parameters: - - { name: "user", in: "body", description: "user object that needs to be added", required: true, schema: { $ref: "#/definitions/UserForm" }, x-example: { id: "syncscript", roles: [ "analyst" ] } } + - { name: "user", in: "body", description: "user object that needs to be added", required: true, schema: { $ref: "#/definitions/UserForm" }, x-example: { id: "syncscript", roles: [ "analyst" ], blocked: false, apikey: true } } responses: "200": description: "successful operation" @@ -62,7 +62,7 @@ paths: operationId: "updateUser" parameters: - { name: "id", in: "path", description: "Template ID", required: true, type: string, x-example: "bob" } - - { name: "user", in: "body", description: "user object that needs to be added", required: true, schema: { $ref: "#/definitions/UserForm" }, x-example: { roles: [ "analyst", "admin" ] } } + - { name: "user", in: "body", description: "user object that needs to be added", required: true, schema: { $ref: "#/definitions/UserForm" }, x-example: { id: "syncscript", roles: [ "analyst", "admin" ], blocked: false, apikey: false } } responses: "200": description: "successful operation" diff --git a/dev/docker-compose.yml b/dev/docker-compose.yml index 9dc46f7..0df7805 100644 --- a/dev/docker-compose.yml +++ b/dev/docker-compose.yml @@ -1,4 +1,4 @@ -version: '2.2' +version: '2.4' services: nginx: image: nginx:1.21 @@ -38,6 +38,7 @@ services: keycloak: image: quay.io/keycloak/keycloak:14.0.0 + platform: linux/amd64 environment: DB_VENDOR: POSTGRES DB_ADDR: postgres diff --git a/generate.sh b/generate.sh index 922088b..f0b5048 100644 --- a/generate.sh +++ b/generate.sh @@ -18,12 +18,8 @@ mv generated/openapi.json generated/community.json openapi-generator generate -i generated/catalyst.yml -o generated -g openapi mv generated/openapi.json generated/catalyst.json -# generate python client -# openapi-generator generate -i generated/community.yml -o generated/python -g python --package-name catalystpy --ignore-file-override .openapi-generator-ignore - echo generate server and tests -# go run ./generator/. ./generator -swachigo generated/community.yml generated +swagger-go-chi generated/community.yml generated echo generate typescript client openapi-generator generate -i generated/catalyst.yml -o ui/src/client -g typescript-axios --artifact-version 1.0.0-SNAPSHOT @@ -31,8 +27,7 @@ openapi-generator generate -i generated/catalyst.yml -o ui/src/client -g typescr rm -rf gen rm -rf generated/models/old rm -rf generated/.openapi-generator generated/.openapi-generator-ignore generated/README.md -# rm -rf generated/python/.openapi-generator generated/python/.gitlab-ci.yml generated/python/git_push.sh generated/python/.travis.yml generated/python/.gitignore generated/python/.openapi-generator-ignore rm -rf ui/src/client/.openapi-generator ui/src/client/git_push.sh ui/src/client/.gitignore ui/src/client/.openapi-generator-ignore go mod tidy -gci -w -local "github.com/SecurityBrewery/catalyst" . +gci write --Section Standard --Section Default --Section "Prefix(github.com/SecurityBrewery/catalyst)" . diff --git a/generated/api/api.go b/generated/api/api.go index 98f17e0..9c244d9 100755 --- a/generated/api/api.go +++ b/generated/api/api.go @@ -1,16 +1,18 @@ package api import ( + "bytes" "context" "encoding/json" "errors" "fmt" + "io" "net/http" "strconv" "github.com/go-chi/chi" + "github.com/xeipuuv/gojsonschema" - // "github.com/xeipuuv/gojsonschema" "github.com/SecurityBrewery/catalyst/generated/model" ) @@ -39,7 +41,7 @@ type Service interface { ListJobs(context.Context) ([]*model.JobResponse, error) RunJob(context.Context, *model.JobForm) error GetJob(context.Context, string) (*model.JobResponse, error) - UpdateJob(context.Context, string, *model.Job) (*model.JobResponse, error) + UpdateJob(context.Context, string, *model.JobUpdate) (*model.JobResponse, error) GetLogs(context.Context, string) ([]*model.LogEntry, error) ListPlaybooks(context.Context) ([]*model.PlaybookTemplateResponse, error) CreatePlaybook(context.Context, *model.PlaybookTemplateForm) (*model.PlaybookTemplateResponse, error) @@ -56,7 +58,7 @@ type Service interface { DeleteTemplate(context.Context, string) error ListTickets(context.Context, *string, *int, *int, []string, []bool, *string) (*model.TicketList, error) CreateTicket(context.Context, *model.TicketForm) (*model.TicketResponse, error) - CreateTicketBatch(context.Context, []*model.TicketForm) error + CreateTicketBatch(context.Context, *model.TicketFormArray) error GetTicket(context.Context, int64) (*model.TicketWithTickets, error) UpdateTicket(context.Context, int64, *model.Ticket) (*model.TicketWithTickets, error) DeleteTicket(context.Context, int64) error @@ -70,10 +72,11 @@ type Service interface { RemoveComment(context.Context, int64, int) (*model.TicketWithTickets, error) AddTicketPlaybook(context.Context, int64, *model.PlaybookTemplateForm) (*model.TicketWithTickets, error) RemoveTicketPlaybook(context.Context, int64, string) (*model.TicketWithTickets, error) - SetTask(context.Context, int64, string, string, *model.Task) (*model.TicketWithTickets, error) + SetTaskData(context.Context, int64, string, string, map[string]interface{}) (*model.TicketWithTickets, error) CompleteTask(context.Context, int64, string, string, map[string]interface{}) (*model.TicketWithTickets, error) + SetTaskOwner(context.Context, int64, string, string, string) (*model.TicketWithTickets, error) RunTask(context.Context, int64, string, string) error - SetReferences(context.Context, int64, []*model.Reference) (*model.TicketWithTickets, error) + SetReferences(context.Context, int64, *model.ReferenceArray) (*model.TicketWithTickets, error) SetSchema(context.Context, int64, string) (*model.TicketWithTickets, error) LinkTicket(context.Context, int64, int64) (*model.TicketWithTickets, error) UnlinkTicket(context.Context, int64, int64) (*model.TicketWithTickets, error) @@ -140,8 +143,9 @@ func NewServer(service Service, roleAuth func([]string) func(http.Handler) http. r.With(roleAuth([]string{"ticket:write"})).Delete("/tickets/{id}/comments/{commentID}", s.removeCommentHandler) r.With(roleAuth([]string{"ticket:write"})).Post("/tickets/{id}/playbooks", s.addTicketPlaybookHandler) r.With(roleAuth([]string{"ticket:write"})).Delete("/tickets/{id}/playbooks/{playbookID}", s.removeTicketPlaybookHandler) - r.With(roleAuth([]string{"ticket:write"})).Put("/tickets/{id}/playbooks/{playbookID}/task/{taskID}", s.setTaskHandler) + r.With(roleAuth([]string{"ticket:write"})).Put("/tickets/{id}/playbooks/{playbookID}/task/{taskID}", s.setTaskDataHandler) r.With(roleAuth([]string{"ticket:write"})).Put("/tickets/{id}/playbooks/{playbookID}/task/{taskID}/complete", s.completeTaskHandler) + r.With(roleAuth([]string{"ticket:write"})).Put("/tickets/{id}/playbooks/{playbookID}/task/{taskID}/owner", s.setTaskOwnerHandler) r.With(roleAuth([]string{"ticket:write"})).Post("/tickets/{id}/playbooks/{playbookID}/task/{taskID}/run", s.runTaskHandler) r.With(roleAuth([]string{"ticket:write"})).Put("/tickets/{id}/references", s.setReferencesHandler) r.With(roleAuth([]string{"ticket:write"})).Put("/tickets/{id}/schema", s.setSchemaHandler) @@ -173,11 +177,33 @@ func (s *server) listAutomationsHandler(w http.ResponseWriter, r *http.Request) } func (s *server) createAutomationHandler(w http.ResponseWriter, r *http.Request) { - // jl, _ := gojsonschema.NewReaderLoader(r.Body) - // *model.AutomationFormSchema.Validate(jl) + body, err := io.ReadAll(r.Body) + if err != nil { + JSONError(w, err) + return + } + + jl := gojsonschema.NewBytesLoader(body) + validationResult, err := model.AutomationFormSchema.Validate(jl) + if err != nil { + JSONError(w, err) + return + } + if !validationResult.Valid() { + w.WriteHeader(http.StatusUnprocessableEntity) + + var valdiationErrors []string + for _, valdiationError := range validationResult.Errors() { + valdiationErrors = append(valdiationErrors, valdiationError.String()) + } + + b, _ := json.Marshal(map[string]interface{}{"error": "wrong input", "errors": valdiationErrors}) + w.Write(b) + return + } var automationP *model.AutomationForm - if err := parseBody(r, &automationP); err != nil { + if err := parseBody(body, &automationP); err != nil { JSONError(w, err) return } @@ -196,11 +222,33 @@ func (s *server) getAutomationHandler(w http.ResponseWriter, r *http.Request) { func (s *server) updateAutomationHandler(w http.ResponseWriter, r *http.Request) { idP := chi.URLParam(r, "id") - // jl, _ := gojsonschema.NewReaderLoader(r.Body) - // *model.AutomationFormSchema.Validate(jl) + body, err := io.ReadAll(r.Body) + if err != nil { + JSONError(w, err) + return + } + + jl := gojsonschema.NewBytesLoader(body) + validationResult, err := model.AutomationFormSchema.Validate(jl) + if err != nil { + JSONError(w, err) + return + } + if !validationResult.Valid() { + w.WriteHeader(http.StatusUnprocessableEntity) + + var valdiationErrors []string + for _, valdiationError := range validationResult.Errors() { + valdiationErrors = append(valdiationErrors, valdiationError.String()) + } + + b, _ := json.Marshal(map[string]interface{}{"error": "wrong input", "errors": valdiationErrors}) + w.Write(b) + return + } var automationP *model.AutomationForm - if err := parseBody(r, &automationP); err != nil { + if err := parseBody(body, &automationP); err != nil { JSONError(w, err) return } @@ -226,11 +274,33 @@ func (s *server) currentUserDataHandler(w http.ResponseWriter, r *http.Request) } func (s *server) updateCurrentUserDataHandler(w http.ResponseWriter, r *http.Request) { - // jl, _ := gojsonschema.NewReaderLoader(r.Body) - // *model.UserDataSchema.Validate(jl) + body, err := io.ReadAll(r.Body) + if err != nil { + JSONError(w, err) + return + } + + jl := gojsonschema.NewBytesLoader(body) + validationResult, err := model.UserDataSchema.Validate(jl) + if err != nil { + JSONError(w, err) + return + } + if !validationResult.Valid() { + w.WriteHeader(http.StatusUnprocessableEntity) + + var valdiationErrors []string + for _, valdiationError := range validationResult.Errors() { + valdiationErrors = append(valdiationErrors, valdiationError.String()) + } + + b, _ := json.Marshal(map[string]interface{}{"error": "wrong input", "errors": valdiationErrors}) + w.Write(b) + return + } var userdataP *model.UserData - if err := parseBody(r, &userdataP); err != nil { + if err := parseBody(body, &userdataP); err != nil { JSONError(w, err) return } @@ -245,11 +315,33 @@ func (s *server) listJobsHandler(w http.ResponseWriter, r *http.Request) { } func (s *server) runJobHandler(w http.ResponseWriter, r *http.Request) { - // jl, _ := gojsonschema.NewReaderLoader(r.Body) - // *model.JobFormSchema.Validate(jl) + body, err := io.ReadAll(r.Body) + if err != nil { + JSONError(w, err) + return + } + + jl := gojsonschema.NewBytesLoader(body) + validationResult, err := model.JobFormSchema.Validate(jl) + if err != nil { + JSONError(w, err) + return + } + if !validationResult.Valid() { + w.WriteHeader(http.StatusUnprocessableEntity) + + var valdiationErrors []string + for _, valdiationError := range validationResult.Errors() { + valdiationErrors = append(valdiationErrors, valdiationError.String()) + } + + b, _ := json.Marshal(map[string]interface{}{"error": "wrong input", "errors": valdiationErrors}) + w.Write(b) + return + } var jobP *model.JobForm - if err := parseBody(r, &jobP); err != nil { + if err := parseBody(body, &jobP); err != nil { JSONError(w, err) return } @@ -267,11 +359,33 @@ func (s *server) getJobHandler(w http.ResponseWriter, r *http.Request) { func (s *server) updateJobHandler(w http.ResponseWriter, r *http.Request) { idP := chi.URLParam(r, "id") - // jl, _ := gojsonschema.NewReaderLoader(r.Body) - // *model.JobSchema.Validate(jl) + body, err := io.ReadAll(r.Body) + if err != nil { + JSONError(w, err) + return + } - var jobP *model.Job - if err := parseBody(r, &jobP); err != nil { + jl := gojsonschema.NewBytesLoader(body) + validationResult, err := model.JobUpdateSchema.Validate(jl) + if err != nil { + JSONError(w, err) + return + } + if !validationResult.Valid() { + w.WriteHeader(http.StatusUnprocessableEntity) + + var valdiationErrors []string + for _, valdiationError := range validationResult.Errors() { + valdiationErrors = append(valdiationErrors, valdiationError.String()) + } + + b, _ := json.Marshal(map[string]interface{}{"error": "wrong input", "errors": valdiationErrors}) + w.Write(b) + return + } + + var jobP *model.JobUpdate + if err := parseBody(body, &jobP); err != nil { JSONError(w, err) return } @@ -293,11 +407,33 @@ func (s *server) listPlaybooksHandler(w http.ResponseWriter, r *http.Request) { } func (s *server) createPlaybookHandler(w http.ResponseWriter, r *http.Request) { - // jl, _ := gojsonschema.NewReaderLoader(r.Body) - // *model.PlaybookTemplateFormSchema.Validate(jl) + body, err := io.ReadAll(r.Body) + if err != nil { + JSONError(w, err) + return + } + + jl := gojsonschema.NewBytesLoader(body) + validationResult, err := model.PlaybookTemplateFormSchema.Validate(jl) + if err != nil { + JSONError(w, err) + return + } + if !validationResult.Valid() { + w.WriteHeader(http.StatusUnprocessableEntity) + + var valdiationErrors []string + for _, valdiationError := range validationResult.Errors() { + valdiationErrors = append(valdiationErrors, valdiationError.String()) + } + + b, _ := json.Marshal(map[string]interface{}{"error": "wrong input", "errors": valdiationErrors}) + w.Write(b) + return + } var playbookP *model.PlaybookTemplateForm - if err := parseBody(r, &playbookP); err != nil { + if err := parseBody(body, &playbookP); err != nil { JSONError(w, err) return } @@ -316,11 +452,33 @@ func (s *server) getPlaybookHandler(w http.ResponseWriter, r *http.Request) { func (s *server) updatePlaybookHandler(w http.ResponseWriter, r *http.Request) { idP := chi.URLParam(r, "id") - // jl, _ := gojsonschema.NewReaderLoader(r.Body) - // *model.PlaybookTemplateFormSchema.Validate(jl) + body, err := io.ReadAll(r.Body) + if err != nil { + JSONError(w, err) + return + } + + jl := gojsonschema.NewBytesLoader(body) + validationResult, err := model.PlaybookTemplateFormSchema.Validate(jl) + if err != nil { + JSONError(w, err) + return + } + if !validationResult.Valid() { + w.WriteHeader(http.StatusUnprocessableEntity) + + var valdiationErrors []string + for _, valdiationError := range validationResult.Errors() { + valdiationErrors = append(valdiationErrors, valdiationError.String()) + } + + b, _ := json.Marshal(map[string]interface{}{"error": "wrong input", "errors": valdiationErrors}) + w.Write(b) + return + } var playbookP *model.PlaybookTemplateForm - if err := parseBody(r, &playbookP); err != nil { + if err := parseBody(body, &playbookP); err != nil { JSONError(w, err) return } @@ -356,11 +514,33 @@ func (s *server) listTemplatesHandler(w http.ResponseWriter, r *http.Request) { } func (s *server) createTemplateHandler(w http.ResponseWriter, r *http.Request) { - // jl, _ := gojsonschema.NewReaderLoader(r.Body) - // *model.TicketTemplateFormSchema.Validate(jl) + body, err := io.ReadAll(r.Body) + if err != nil { + JSONError(w, err) + return + } + + jl := gojsonschema.NewBytesLoader(body) + validationResult, err := model.TicketTemplateFormSchema.Validate(jl) + if err != nil { + JSONError(w, err) + return + } + if !validationResult.Valid() { + w.WriteHeader(http.StatusUnprocessableEntity) + + var valdiationErrors []string + for _, valdiationError := range validationResult.Errors() { + valdiationErrors = append(valdiationErrors, valdiationError.String()) + } + + b, _ := json.Marshal(map[string]interface{}{"error": "wrong input", "errors": valdiationErrors}) + w.Write(b) + return + } var templateP *model.TicketTemplateForm - if err := parseBody(r, &templateP); err != nil { + if err := parseBody(body, &templateP); err != nil { JSONError(w, err) return } @@ -379,11 +559,33 @@ func (s *server) getTemplateHandler(w http.ResponseWriter, r *http.Request) { func (s *server) updateTemplateHandler(w http.ResponseWriter, r *http.Request) { idP := chi.URLParam(r, "id") - // jl, _ := gojsonschema.NewReaderLoader(r.Body) - // *model.TicketTemplateFormSchema.Validate(jl) + body, err := io.ReadAll(r.Body) + if err != nil { + JSONError(w, err) + return + } + + jl := gojsonschema.NewBytesLoader(body) + validationResult, err := model.TicketTemplateFormSchema.Validate(jl) + if err != nil { + JSONError(w, err) + return + } + if !validationResult.Valid() { + w.WriteHeader(http.StatusUnprocessableEntity) + + var valdiationErrors []string + for _, valdiationError := range validationResult.Errors() { + valdiationErrors = append(valdiationErrors, valdiationError.String()) + } + + b, _ := json.Marshal(map[string]interface{}{"error": "wrong input", "errors": valdiationErrors}) + w.Write(b) + return + } var templateP *model.TicketTemplateForm - if err := parseBody(r, &templateP); err != nil { + if err := parseBody(body, &templateP); err != nil { JSONError(w, err) return } @@ -432,11 +634,33 @@ func (s *server) listTicketsHandler(w http.ResponseWriter, r *http.Request) { } func (s *server) createTicketHandler(w http.ResponseWriter, r *http.Request) { - // jl, _ := gojsonschema.NewReaderLoader(r.Body) - // *model.TicketFormSchema.Validate(jl) + body, err := io.ReadAll(r.Body) + if err != nil { + JSONError(w, err) + return + } + + jl := gojsonschema.NewBytesLoader(body) + validationResult, err := model.TicketFormSchema.Validate(jl) + if err != nil { + JSONError(w, err) + return + } + if !validationResult.Valid() { + w.WriteHeader(http.StatusUnprocessableEntity) + + var valdiationErrors []string + for _, valdiationError := range validationResult.Errors() { + valdiationErrors = append(valdiationErrors, valdiationError.String()) + } + + b, _ := json.Marshal(map[string]interface{}{"error": "wrong input", "errors": valdiationErrors}) + w.Write(b) + return + } var ticketP *model.TicketForm - if err := parseBody(r, &ticketP); err != nil { + if err := parseBody(body, &ticketP); err != nil { JSONError(w, err) return } @@ -446,11 +670,33 @@ func (s *server) createTicketHandler(w http.ResponseWriter, r *http.Request) { } func (s *server) createTicketBatchHandler(w http.ResponseWriter, r *http.Request) { - // jl, _ := gojsonschema.NewReaderLoader(r.Body) - // []*model.TicketFormSchema.Validate(jl) + body, err := io.ReadAll(r.Body) + if err != nil { + JSONError(w, err) + return + } - var ticketP []*model.TicketForm - if err := parseBody(r, &ticketP); err != nil { + jl := gojsonschema.NewBytesLoader(body) + validationResult, err := model.TicketFormArraySchema.Validate(jl) + if err != nil { + JSONError(w, err) + return + } + if !validationResult.Valid() { + w.WriteHeader(http.StatusUnprocessableEntity) + + var valdiationErrors []string + for _, valdiationError := range validationResult.Errors() { + valdiationErrors = append(valdiationErrors, valdiationError.String()) + } + + b, _ := json.Marshal(map[string]interface{}{"error": "wrong input", "errors": valdiationErrors}) + w.Write(b) + return + } + + var ticketP *model.TicketFormArray + if err := parseBody(body, &ticketP); err != nil { JSONError(w, err) return } @@ -476,11 +722,33 @@ func (s *server) updateTicketHandler(w http.ResponseWriter, r *http.Request) { return } - // jl, _ := gojsonschema.NewReaderLoader(r.Body) - // *model.TicketSchema.Validate(jl) + body, err := io.ReadAll(r.Body) + if err != nil { + JSONError(w, err) + return + } + + jl := gojsonschema.NewBytesLoader(body) + validationResult, err := model.TicketSchema.Validate(jl) + if err != nil { + JSONError(w, err) + return + } + if !validationResult.Valid() { + w.WriteHeader(http.StatusUnprocessableEntity) + + var valdiationErrors []string + for _, valdiationError := range validationResult.Errors() { + valdiationErrors = append(valdiationErrors, valdiationError.String()) + } + + b, _ := json.Marshal(map[string]interface{}{"error": "wrong input", "errors": valdiationErrors}) + w.Write(b) + return + } var ticketP *model.Ticket - if err := parseBody(r, &ticketP); err != nil { + if err := parseBody(body, &ticketP); err != nil { JSONError(w, err) return } @@ -506,11 +774,33 @@ func (s *server) addArtifactHandler(w http.ResponseWriter, r *http.Request) { return } - // jl, _ := gojsonschema.NewReaderLoader(r.Body) - // *model.ArtifactSchema.Validate(jl) + body, err := io.ReadAll(r.Body) + if err != nil { + JSONError(w, err) + return + } + + jl := gojsonschema.NewBytesLoader(body) + validationResult, err := model.ArtifactSchema.Validate(jl) + if err != nil { + JSONError(w, err) + return + } + if !validationResult.Valid() { + w.WriteHeader(http.StatusUnprocessableEntity) + + var valdiationErrors []string + for _, valdiationError := range validationResult.Errors() { + valdiationErrors = append(valdiationErrors, valdiationError.String()) + } + + b, _ := json.Marshal(map[string]interface{}{"error": "wrong input", "errors": valdiationErrors}) + w.Write(b) + return + } var artifactP *model.Artifact - if err := parseBody(r, &artifactP); err != nil { + if err := parseBody(body, &artifactP); err != nil { JSONError(w, err) return } @@ -541,11 +831,33 @@ func (s *server) setArtifactHandler(w http.ResponseWriter, r *http.Request) { nameP := chi.URLParam(r, "name") - // jl, _ := gojsonschema.NewReaderLoader(r.Body) - // *model.ArtifactSchema.Validate(jl) + body, err := io.ReadAll(r.Body) + if err != nil { + JSONError(w, err) + return + } + + jl := gojsonschema.NewBytesLoader(body) + validationResult, err := model.ArtifactSchema.Validate(jl) + if err != nil { + JSONError(w, err) + return + } + if !validationResult.Valid() { + w.WriteHeader(http.StatusUnprocessableEntity) + + var valdiationErrors []string + for _, valdiationError := range validationResult.Errors() { + valdiationErrors = append(valdiationErrors, valdiationError.String()) + } + + b, _ := json.Marshal(map[string]interface{}{"error": "wrong input", "errors": valdiationErrors}) + w.Write(b) + return + } var artifactP *model.Artifact - if err := parseBody(r, &artifactP); err != nil { + if err := parseBody(body, &artifactP); err != nil { JSONError(w, err) return } @@ -576,11 +888,33 @@ func (s *server) enrichArtifactHandler(w http.ResponseWriter, r *http.Request) { nameP := chi.URLParam(r, "name") - // jl, _ := gojsonschema.NewReaderLoader(r.Body) - // *model.EnrichmentFormSchema.Validate(jl) + body, err := io.ReadAll(r.Body) + if err != nil { + JSONError(w, err) + return + } + + jl := gojsonschema.NewBytesLoader(body) + validationResult, err := model.EnrichmentFormSchema.Validate(jl) + if err != nil { + JSONError(w, err) + return + } + if !validationResult.Valid() { + w.WriteHeader(http.StatusUnprocessableEntity) + + var valdiationErrors []string + for _, valdiationError := range validationResult.Errors() { + valdiationErrors = append(valdiationErrors, valdiationError.String()) + } + + b, _ := json.Marshal(map[string]interface{}{"error": "wrong input", "errors": valdiationErrors}) + w.Write(b) + return + } var dataP *model.EnrichmentForm - if err := parseBody(r, &dataP); err != nil { + if err := parseBody(body, &dataP); err != nil { JSONError(w, err) return } @@ -610,11 +944,33 @@ func (s *server) addCommentHandler(w http.ResponseWriter, r *http.Request) { return } - // jl, _ := gojsonschema.NewReaderLoader(r.Body) - // *model.CommentFormSchema.Validate(jl) + body, err := io.ReadAll(r.Body) + if err != nil { + JSONError(w, err) + return + } + + jl := gojsonschema.NewBytesLoader(body) + validationResult, err := model.CommentFormSchema.Validate(jl) + if err != nil { + JSONError(w, err) + return + } + if !validationResult.Valid() { + w.WriteHeader(http.StatusUnprocessableEntity) + + var valdiationErrors []string + for _, valdiationError := range validationResult.Errors() { + valdiationErrors = append(valdiationErrors, valdiationError.String()) + } + + b, _ := json.Marshal(map[string]interface{}{"error": "wrong input", "errors": valdiationErrors}) + w.Write(b) + return + } var commentP *model.CommentForm - if err := parseBody(r, &commentP); err != nil { + if err := parseBody(body, &commentP); err != nil { JSONError(w, err) return } @@ -647,11 +1003,33 @@ func (s *server) addTicketPlaybookHandler(w http.ResponseWriter, r *http.Request return } - // jl, _ := gojsonschema.NewReaderLoader(r.Body) - // *model.PlaybookTemplateFormSchema.Validate(jl) + body, err := io.ReadAll(r.Body) + if err != nil { + JSONError(w, err) + return + } + + jl := gojsonschema.NewBytesLoader(body) + validationResult, err := model.PlaybookTemplateFormSchema.Validate(jl) + if err != nil { + JSONError(w, err) + return + } + if !validationResult.Valid() { + w.WriteHeader(http.StatusUnprocessableEntity) + + var valdiationErrors []string + for _, valdiationError := range validationResult.Errors() { + valdiationErrors = append(valdiationErrors, valdiationError.String()) + } + + b, _ := json.Marshal(map[string]interface{}{"error": "wrong input", "errors": valdiationErrors}) + w.Write(b) + return + } var playbookP *model.PlaybookTemplateForm - if err := parseBody(r, &playbookP); err != nil { + if err := parseBody(body, &playbookP); err != nil { JSONError(w, err) return } @@ -673,7 +1051,7 @@ func (s *server) removeTicketPlaybookHandler(w http.ResponseWriter, r *http.Requ response(w, result, err) } -func (s *server) setTaskHandler(w http.ResponseWriter, r *http.Request) { +func (s *server) setTaskDataHandler(w http.ResponseWriter, r *http.Request) { idP, err := parseURLInt64(r, "id") if err != nil { JSONError(w, err) @@ -684,16 +1062,19 @@ func (s *server) setTaskHandler(w http.ResponseWriter, r *http.Request) { taskIDP := chi.URLParam(r, "taskID") - // jl, _ := gojsonschema.NewReaderLoader(r.Body) - // *model.TaskSchema.Validate(jl) - - var taskP *model.Task - if err := parseBody(r, &taskP); err != nil { + body, err := io.ReadAll(r.Body) + if err != nil { JSONError(w, err) return } - result, err := s.service.SetTask(r.Context(), idP, playbookIDP, taskIDP, taskP) + var dataP map[string]interface{} + if err := parseBody(body, &dataP); err != nil { + JSONError(w, err) + return + } + + result, err := s.service.SetTaskData(r.Context(), idP, playbookIDP, taskIDP, dataP) response(w, result, err) } @@ -708,11 +1089,14 @@ func (s *server) completeTaskHandler(w http.ResponseWriter, r *http.Request) { taskIDP := chi.URLParam(r, "taskID") - // jl, _ := gojsonschema.NewReaderLoader(r.Body) - // map[string]interface{}Schema.Validate(jl) + body, err := io.ReadAll(r.Body) + if err != nil { + JSONError(w, err) + return + } var dataP map[string]interface{} - if err := parseBody(r, &dataP); err != nil { + if err := parseBody(body, &dataP); err != nil { JSONError(w, err) return } @@ -721,6 +1105,33 @@ func (s *server) completeTaskHandler(w http.ResponseWriter, r *http.Request) { response(w, result, err) } +func (s *server) setTaskOwnerHandler(w http.ResponseWriter, r *http.Request) { + idP, err := parseURLInt64(r, "id") + if err != nil { + JSONError(w, err) + return + } + + playbookIDP := chi.URLParam(r, "playbookID") + + taskIDP := chi.URLParam(r, "taskID") + + body, err := io.ReadAll(r.Body) + if err != nil { + JSONError(w, err) + return + } + + var ownerP string + if err := parseBody(body, &ownerP); err != nil { + JSONError(w, err) + return + } + + result, err := s.service.SetTaskOwner(r.Context(), idP, playbookIDP, taskIDP, ownerP) + response(w, result, err) +} + func (s *server) runTaskHandler(w http.ResponseWriter, r *http.Request) { idP, err := parseURLInt64(r, "id") if err != nil { @@ -742,11 +1153,33 @@ func (s *server) setReferencesHandler(w http.ResponseWriter, r *http.Request) { return } - // jl, _ := gojsonschema.NewReaderLoader(r.Body) - // []*model.ReferenceSchema.Validate(jl) + body, err := io.ReadAll(r.Body) + if err != nil { + JSONError(w, err) + return + } - var referencesP []*model.Reference - if err := parseBody(r, &referencesP); err != nil { + jl := gojsonschema.NewBytesLoader(body) + validationResult, err := model.ReferenceArraySchema.Validate(jl) + if err != nil { + JSONError(w, err) + return + } + if !validationResult.Valid() { + w.WriteHeader(http.StatusUnprocessableEntity) + + var valdiationErrors []string + for _, valdiationError := range validationResult.Errors() { + valdiationErrors = append(valdiationErrors, valdiationError.String()) + } + + b, _ := json.Marshal(map[string]interface{}{"error": "wrong input", "errors": valdiationErrors}) + w.Write(b) + return + } + + var referencesP *model.ReferenceArray + if err := parseBody(body, &referencesP); err != nil { JSONError(w, err) return } @@ -762,11 +1195,14 @@ func (s *server) setSchemaHandler(w http.ResponseWriter, r *http.Request) { return } - // jl, _ := gojsonschema.NewReaderLoader(r.Body) - // stringSchema.Validate(jl) + body, err := io.ReadAll(r.Body) + if err != nil { + JSONError(w, err) + return + } var schemaP string - if err := parseBody(r, &schemaP); err != nil { + if err := parseBody(body, &schemaP); err != nil { JSONError(w, err) return } @@ -782,11 +1218,14 @@ func (s *server) linkTicketHandler(w http.ResponseWriter, r *http.Request) { return } - // jl, _ := gojsonschema.NewReaderLoader(r.Body) - // int64Schema.Validate(jl) + body, err := io.ReadAll(r.Body) + if err != nil { + JSONError(w, err) + return + } var linkedIDP int64 - if err := parseBody(r, &linkedIDP); err != nil { + if err := parseBody(body, &linkedIDP); err != nil { JSONError(w, err) return } @@ -802,11 +1241,14 @@ func (s *server) unlinkTicketHandler(w http.ResponseWriter, r *http.Request) { return } - // jl, _ := gojsonschema.NewReaderLoader(r.Body) - // int64Schema.Validate(jl) + body, err := io.ReadAll(r.Body) + if err != nil { + JSONError(w, err) + return + } var linkedIDP int64 - if err := parseBody(r, &linkedIDP); err != nil { + if err := parseBody(body, &linkedIDP); err != nil { JSONError(w, err) return } @@ -821,11 +1263,33 @@ func (s *server) listTicketTypesHandler(w http.ResponseWriter, r *http.Request) } func (s *server) createTicketTypeHandler(w http.ResponseWriter, r *http.Request) { - // jl, _ := gojsonschema.NewReaderLoader(r.Body) - // *model.TicketTypeFormSchema.Validate(jl) + body, err := io.ReadAll(r.Body) + if err != nil { + JSONError(w, err) + return + } + + jl := gojsonschema.NewBytesLoader(body) + validationResult, err := model.TicketTypeFormSchema.Validate(jl) + if err != nil { + JSONError(w, err) + return + } + if !validationResult.Valid() { + w.WriteHeader(http.StatusUnprocessableEntity) + + var valdiationErrors []string + for _, valdiationError := range validationResult.Errors() { + valdiationErrors = append(valdiationErrors, valdiationError.String()) + } + + b, _ := json.Marshal(map[string]interface{}{"error": "wrong input", "errors": valdiationErrors}) + w.Write(b) + return + } var tickettypeP *model.TicketTypeForm - if err := parseBody(r, &tickettypeP); err != nil { + if err := parseBody(body, &tickettypeP); err != nil { JSONError(w, err) return } @@ -844,11 +1308,33 @@ func (s *server) getTicketTypeHandler(w http.ResponseWriter, r *http.Request) { func (s *server) updateTicketTypeHandler(w http.ResponseWriter, r *http.Request) { idP := chi.URLParam(r, "id") - // jl, _ := gojsonschema.NewReaderLoader(r.Body) - // *model.TicketTypeFormSchema.Validate(jl) + body, err := io.ReadAll(r.Body) + if err != nil { + JSONError(w, err) + return + } + + jl := gojsonschema.NewBytesLoader(body) + validationResult, err := model.TicketTypeFormSchema.Validate(jl) + if err != nil { + JSONError(w, err) + return + } + if !validationResult.Valid() { + w.WriteHeader(http.StatusUnprocessableEntity) + + var valdiationErrors []string + for _, valdiationError := range validationResult.Errors() { + valdiationErrors = append(valdiationErrors, valdiationError.String()) + } + + b, _ := json.Marshal(map[string]interface{}{"error": "wrong input", "errors": valdiationErrors}) + w.Write(b) + return + } var tickettypeP *model.TicketTypeForm - if err := parseBody(r, &tickettypeP); err != nil { + if err := parseBody(body, &tickettypeP); err != nil { JSONError(w, err) return } @@ -878,11 +1364,33 @@ func (s *server) getUserDataHandler(w http.ResponseWriter, r *http.Request) { func (s *server) updateUserDataHandler(w http.ResponseWriter, r *http.Request) { idP := chi.URLParam(r, "id") - // jl, _ := gojsonschema.NewReaderLoader(r.Body) - // *model.UserDataSchema.Validate(jl) + body, err := io.ReadAll(r.Body) + if err != nil { + JSONError(w, err) + return + } + + jl := gojsonschema.NewBytesLoader(body) + validationResult, err := model.UserDataSchema.Validate(jl) + if err != nil { + JSONError(w, err) + return + } + if !validationResult.Valid() { + w.WriteHeader(http.StatusUnprocessableEntity) + + var valdiationErrors []string + for _, valdiationError := range validationResult.Errors() { + valdiationErrors = append(valdiationErrors, valdiationError.String()) + } + + b, _ := json.Marshal(map[string]interface{}{"error": "wrong input", "errors": valdiationErrors}) + w.Write(b) + return + } var userdataP *model.UserData - if err := parseBody(r, &userdataP); err != nil { + if err := parseBody(body, &userdataP); err != nil { JSONError(w, err) return } @@ -897,11 +1405,33 @@ func (s *server) listUsersHandler(w http.ResponseWriter, r *http.Request) { } func (s *server) createUserHandler(w http.ResponseWriter, r *http.Request) { - // jl, _ := gojsonschema.NewReaderLoader(r.Body) - // *model.UserFormSchema.Validate(jl) + body, err := io.ReadAll(r.Body) + if err != nil { + JSONError(w, err) + return + } + + jl := gojsonschema.NewBytesLoader(body) + validationResult, err := model.UserFormSchema.Validate(jl) + if err != nil { + JSONError(w, err) + return + } + if !validationResult.Valid() { + w.WriteHeader(http.StatusUnprocessableEntity) + + var valdiationErrors []string + for _, valdiationError := range validationResult.Errors() { + valdiationErrors = append(valdiationErrors, valdiationError.String()) + } + + b, _ := json.Marshal(map[string]interface{}{"error": "wrong input", "errors": valdiationErrors}) + w.Write(b) + return + } var userP *model.UserForm - if err := parseBody(r, &userP); err != nil { + if err := parseBody(body, &userP); err != nil { JSONError(w, err) return } @@ -920,11 +1450,33 @@ func (s *server) getUserHandler(w http.ResponseWriter, r *http.Request) { func (s *server) updateUserHandler(w http.ResponseWriter, r *http.Request) { idP := chi.URLParam(r, "id") - // jl, _ := gojsonschema.NewReaderLoader(r.Body) - // *model.UserFormSchema.Validate(jl) + body, err := io.ReadAll(r.Body) + if err != nil { + JSONError(w, err) + return + } + + jl := gojsonschema.NewBytesLoader(body) + validationResult, err := model.UserFormSchema.Validate(jl) + if err != nil { + JSONError(w, err) + return + } + if !validationResult.Valid() { + w.WriteHeader(http.StatusUnprocessableEntity) + + var valdiationErrors []string + for _, valdiationError := range validationResult.Errors() { + valdiationErrors = append(valdiationErrors, valdiationError.String()) + } + + b, _ := json.Marshal(map[string]interface{}{"error": "wrong input", "errors": valdiationErrors}) + w.Write(b) + return + } var userP *model.UserForm - if err := parseBody(r, &userP); err != nil { + if err := parseBody(body, &userP); err != nil { JSONError(w, err) return } @@ -1032,8 +1584,8 @@ func parseQueryOptionalBoolArray(r *http.Request, key string) ([]bool, error) { return parseQueryBoolArray(r, key) } -func parseBody(r *http.Request, i interface{}) error { - dec := json.NewDecoder(r.Body) +func parseBody(b []byte, i interface{}) error { + dec := json.NewDecoder(bytes.NewBuffer(b)) err := dec.Decode(i) if err != nil { return fmt.Errorf("%w", &HTTPError{http.StatusUnprocessableEntity, err}) diff --git a/generated/api/test_api.go b/generated/api/test_api.go index 64fb1cc..8b9bfb8 100755 --- a/generated/api/test_api.go +++ b/generated/api/test_api.go @@ -119,7 +119,7 @@ var Tests = []struct { { Name: "UpdateJob", - Args: Args{Method: "Put", URL: "/jobs/99cd67131b48", Data: map[string]interface{}{"automation": "hash.sha1", "id": "99cd67131b48", "payload": "test", "status": "failed"}}, + Args: Args{Method: "Put", URL: "/jobs/99cd67131b48", Data: map[string]interface{}{"running": false, "status": "failed"}}, Want: Want{ Status: 200, Body: map[string]interface{}{"automation": "hash.sha1", "id": "99cd67131b48", "payload": "test", "status": "failed"}, @@ -397,8 +397,8 @@ var Tests = []struct { }, { - Name: "SetTask", - Args: Args{Method: "Put", URL: "/tickets/8123/playbooks/phishing/task/board", Data: map[string]interface{}{"active": true, "data": map[string]interface{}{"boardInvolved": true}, "done": false, "name": "Board Involvement?", "next": map[string]interface{}{"escalate": "boardInvolved == true", "mail-available": "boardInvolved == false"}, "order": 0, "schema": map[string]interface{}{"properties": map[string]interface{}{"boardInvolved": map[string]interface{}{"default": false, "title": "A board member is involved.", "type": "boolean"}}, "required": []interface{}{"boardInvolved"}, "title": "Board Involvement?", "type": "object"}, "type": "input"}}, + Name: "SetTaskData", + Args: Args{Method: "Put", URL: "/tickets/8123/playbooks/phishing/task/board", Data: map[string]interface{}{"boardInvolved": true}}, Want: Want{ Status: 200, Body: map[string]interface{}{"artifacts": []interface{}{map[string]interface{}{"name": "94d5cab6f5fe3422a447ab15436e7a672bc0c09a", "status": "unknown"}, map[string]interface{}{"name": "http://www.customerviral.io/scalable/vertical/killer", "status": "clean"}, map[string]interface{}{"name": "leadreintermediate.io", "status": "malicious"}}, "created": time.Date(2021, time.October, 2, 16, 4, 59, 78206000, time.UTC), "id": 8123, "modified": time.Date(2021, time.December, 12, 12, 12, 12, 12, time.UTC), "name": "live zebra", "owner": "demo", "playbooks": map[string]interface{}{"phishing": map[string]interface{}{"name": "Phishing", "tasks": map[string]interface{}{"block-iocs": map[string]interface{}{"active": false, "created": time.Date(2021, time.December, 12, 12, 12, 12, 12, time.UTC), "done": false, "name": "Block IOCs", "order": 6, "type": "task"}, "block-sender": map[string]interface{}{"active": false, "created": time.Date(2021, time.December, 12, 12, 12, 12, 12, time.UTC), "done": false, "name": "Block sender", "next": map[string]interface{}{"extract-iocs": ""}, "order": 3, "type": "task"}, "board": map[string]interface{}{"active": true, "created": time.Date(2021, time.December, 12, 12, 12, 12, 12, time.UTC), "data": map[string]interface{}{"boardInvolved": true}, "done": false, "name": "Board Involvement?", "next": map[string]interface{}{"escalate": "boardInvolved == true", "mail-available": "boardInvolved == false"}, "order": 0, "schema": map[string]interface{}{"properties": map[string]interface{}{"boardInvolved": map[string]interface{}{"default": false, "title": "A board member is involved.", "type": "boolean"}}, "required": []interface{}{"boardInvolved"}, "title": "Board Involvement?", "type": "object"}, "type": "input"}, "escalate": map[string]interface{}{"active": false, "created": time.Date(2021, time.December, 12, 12, 12, 12, 12, time.UTC), "done": false, "name": "Escalate to CISO", "order": 1, "type": "task"}, "extract-iocs": map[string]interface{}{"active": false, "created": time.Date(2021, time.December, 12, 12, 12, 12, 12, time.UTC), "done": false, "name": "Extract IOCs", "next": map[string]interface{}{"block-iocs": ""}, "order": 5, "schema": map[string]interface{}{"properties": map[string]interface{}{"iocs": map[string]interface{}{"items": map[string]interface{}{"type": "string"}, "title": "IOCs", "type": "array"}}, "title": "Extract IOCs", "type": "object"}, "type": "input"}, "mail-available": map[string]interface{}{"active": false, "created": time.Date(2021, time.December, 12, 12, 12, 12, 12, time.UTC), "done": false, "name": "Mail available", "next": map[string]interface{}{"block-sender": "schemaKey == 'yes'", "extract-iocs": "schemaKey == 'yes'", "search-email-gateway": "schemaKey == 'no'"}, "order": 2, "schema": map[string]interface{}{"oneOf": []interface{}{map[string]interface{}{"properties": map[string]interface{}{"mail": map[string]interface{}{"title": "Mail", "type": "string", "x-display": "textarea"}, "schemaKey": map[string]interface{}{"const": "yes", "type": "string"}}, "required": []interface{}{"mail"}, "title": "Yes"}, map[string]interface{}{"properties": map[string]interface{}{"schemaKey": map[string]interface{}{"const": "no", "type": "string"}}, "title": "No"}}, "title": "Mail available", "type": "object"}, "type": "input"}, "search-email-gateway": map[string]interface{}{"active": false, "created": time.Date(2021, time.December, 12, 12, 12, 12, 12, time.UTC), "done": false, "name": "Search email gateway", "next": map[string]interface{}{"extract-iocs": ""}, "order": 4, "type": "task"}}}}, "references": []interface{}{map[string]interface{}{"href": "https://www.leadmaximize.net/e-services/back-end", "name": "performance"}, map[string]interface{}{"href": "http://www.corporateinteractive.name/rich", "name": "autumn"}, map[string]interface{}{"href": "https://www.corporateintuitive.org/intuitive/platforms/integrate", "name": "suggest"}}, "schema": "{\n \"definitions\": {},\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://example.com/object1618746510.json\",\n \"title\": \"Event\",\n \"type\": \"object\",\n \"required\": [\n \"severity\",\n \"description\",\n \"tlp\"\n ],\n \"properties\": {\n \"severity\": {\n \"$id\": \"#root/severity\",\n \"title\": \"Severity\",\n \"type\": \"string\",\n \"default\": \"Medium\",\n \"nx-enum\": [\n \"Low\",\n \"Medium\",\n \"High\"\n ],\n \"x-cols\": 6,\n \"x-class\": \"pr-2\",\n \"x-display\": \"icon\",\n \"x-itemIcon\": \"icon\",\n \"oneOf\": [\n {\n \"const\": \"Low\",\n \"title\": \"Low\",\n \"icon\": \"mdi-chevron-up\"\n },\n {\n \"const\": \"Medium\",\n \"title\": \"Medium\",\n \"icon\": \"mdi-chevron-double-up\"\n },\n {\n \"const\": \"High\",\n \"title\": \"High\",\n \"icon\": \"mdi-chevron-triple-up\"\n }\n ]\n },\n \"tlp\": {\n \"$id\": \"#root/tlp\",\n \"title\": \"TLP\",\n \"type\": \"string\",\n \"nx-enum\": [\n \"White\",\n \"Green\",\n \"Amber\",\n \"Red\"\n ],\n \"x-cols\": 6,\n \"x-class\": \"pr-2\",\n \"x-display\": \"icon\",\n \"x-itemIcon\": \"icon\",\n \"oneOf\": [\n {\n \"const\": \"White\",\n \"title\": \"White\",\n \"icon\": \"mdi-alpha-w\"\n },\n {\n \"const\": \"Green\",\n \"title\": \"Green\",\n \"icon\": \"mdi-alpha-g\"\n },\n {\n \"const\": \"Amber\",\n \"title\": \"Amber\",\n \"icon\": \"mdi-alpha-a\"\n },\n {\n \"const\": \"Red\",\n \"title\": \"Red\",\n \"icon\": \"mdi-alpha-r\"\n }\n ]\n },\n \"description\": {\n \"$id\": \"#root/description\",\n \"title\": \"Description\",\n \"type\": \"string\",\n \"x-display\": \"textarea\",\n \"x-class\": \"pr-2\"\n }\n }\n}\n", "status": "closed", "type": "incident"}, @@ -414,6 +414,15 @@ var Tests = []struct { }, }, + { + Name: "SetTaskOwner", + Args: Args{Method: "Put", URL: "/tickets/8123/playbooks/phishing/task/board/owner", Data: "eve"}, + Want: Want{ + Status: 200, + Body: map[string]interface{}{"artifacts": []interface{}{map[string]interface{}{"name": "94d5cab6f5fe3422a447ab15436e7a672bc0c09a", "status": "unknown"}, map[string]interface{}{"name": "http://www.customerviral.io/scalable/vertical/killer", "status": "clean"}, map[string]interface{}{"name": "leadreintermediate.io", "status": "malicious"}}, "created": time.Date(2021, time.October, 2, 16, 4, 59, 78206000, time.UTC), "id": 8123, "modified": time.Date(2021, time.December, 12, 12, 12, 12, 12, time.UTC), "name": "live zebra", "owner": "demo", "playbooks": map[string]interface{}{"phishing": map[string]interface{}{"name": "Phishing", "tasks": map[string]interface{}{"block-iocs": map[string]interface{}{"active": false, "created": time.Date(2021, time.December, 12, 12, 12, 12, 12, time.UTC), "done": false, "name": "Block IOCs", "order": 6, "type": "task"}, "block-sender": map[string]interface{}{"active": false, "created": time.Date(2021, time.December, 12, 12, 12, 12, 12, time.UTC), "done": false, "name": "Block sender", "next": map[string]interface{}{"extract-iocs": ""}, "order": 3, "type": "task"}, "board": map[string]interface{}{"active": true, "created": time.Date(2021, time.December, 12, 12, 12, 12, 12, time.UTC), "done": false, "name": "Board Involvement?", "next": map[string]interface{}{"escalate": "boardInvolved == true", "mail-available": "boardInvolved == false"}, "order": 0, "owner": "eve", "schema": map[string]interface{}{"properties": map[string]interface{}{"boardInvolved": map[string]interface{}{"default": false, "title": "A board member is involved.", "type": "boolean"}}, "required": []interface{}{"boardInvolved"}, "title": "Board Involvement?", "type": "object"}, "type": "input"}, "escalate": map[string]interface{}{"active": false, "created": time.Date(2021, time.December, 12, 12, 12, 12, 12, time.UTC), "done": false, "name": "Escalate to CISO", "order": 1, "type": "task"}, "extract-iocs": map[string]interface{}{"active": false, "created": time.Date(2021, time.December, 12, 12, 12, 12, 12, time.UTC), "done": false, "name": "Extract IOCs", "next": map[string]interface{}{"block-iocs": ""}, "order": 5, "schema": map[string]interface{}{"properties": map[string]interface{}{"iocs": map[string]interface{}{"items": map[string]interface{}{"type": "string"}, "title": "IOCs", "type": "array"}}, "title": "Extract IOCs", "type": "object"}, "type": "input"}, "mail-available": map[string]interface{}{"active": false, "created": time.Date(2021, time.December, 12, 12, 12, 12, 12, time.UTC), "done": false, "name": "Mail available", "next": map[string]interface{}{"block-sender": "schemaKey == 'yes'", "extract-iocs": "schemaKey == 'yes'", "search-email-gateway": "schemaKey == 'no'"}, "order": 2, "schema": map[string]interface{}{"oneOf": []interface{}{map[string]interface{}{"properties": map[string]interface{}{"mail": map[string]interface{}{"title": "Mail", "type": "string", "x-display": "textarea"}, "schemaKey": map[string]interface{}{"const": "yes", "type": "string"}}, "required": []interface{}{"mail"}, "title": "Yes"}, map[string]interface{}{"properties": map[string]interface{}{"schemaKey": map[string]interface{}{"const": "no", "type": "string"}}, "title": "No"}}, "title": "Mail available", "type": "object"}, "type": "input"}, "search-email-gateway": map[string]interface{}{"active": false, "created": time.Date(2021, time.December, 12, 12, 12, 12, 12, time.UTC), "done": false, "name": "Search email gateway", "next": map[string]interface{}{"extract-iocs": ""}, "order": 4, "type": "task"}}}}, "references": []interface{}{map[string]interface{}{"href": "https://www.leadmaximize.net/e-services/back-end", "name": "performance"}, map[string]interface{}{"href": "http://www.corporateinteractive.name/rich", "name": "autumn"}, map[string]interface{}{"href": "https://www.corporateintuitive.org/intuitive/platforms/integrate", "name": "suggest"}}, "schema": "{\n \"definitions\": {},\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://example.com/object1618746510.json\",\n \"title\": \"Event\",\n \"type\": \"object\",\n \"required\": [\n \"severity\",\n \"description\",\n \"tlp\"\n ],\n \"properties\": {\n \"severity\": {\n \"$id\": \"#root/severity\",\n \"title\": \"Severity\",\n \"type\": \"string\",\n \"default\": \"Medium\",\n \"nx-enum\": [\n \"Low\",\n \"Medium\",\n \"High\"\n ],\n \"x-cols\": 6,\n \"x-class\": \"pr-2\",\n \"x-display\": \"icon\",\n \"x-itemIcon\": \"icon\",\n \"oneOf\": [\n {\n \"const\": \"Low\",\n \"title\": \"Low\",\n \"icon\": \"mdi-chevron-up\"\n },\n {\n \"const\": \"Medium\",\n \"title\": \"Medium\",\n \"icon\": \"mdi-chevron-double-up\"\n },\n {\n \"const\": \"High\",\n \"title\": \"High\",\n \"icon\": \"mdi-chevron-triple-up\"\n }\n ]\n },\n \"tlp\": {\n \"$id\": \"#root/tlp\",\n \"title\": \"TLP\",\n \"type\": \"string\",\n \"nx-enum\": [\n \"White\",\n \"Green\",\n \"Amber\",\n \"Red\"\n ],\n \"x-cols\": 6,\n \"x-class\": \"pr-2\",\n \"x-display\": \"icon\",\n \"x-itemIcon\": \"icon\",\n \"oneOf\": [\n {\n \"const\": \"White\",\n \"title\": \"White\",\n \"icon\": \"mdi-alpha-w\"\n },\n {\n \"const\": \"Green\",\n \"title\": \"Green\",\n \"icon\": \"mdi-alpha-g\"\n },\n {\n \"const\": \"Amber\",\n \"title\": \"Amber\",\n \"icon\": \"mdi-alpha-a\"\n },\n {\n \"const\": \"Red\",\n \"title\": \"Red\",\n \"icon\": \"mdi-alpha-r\"\n }\n ]\n },\n \"description\": {\n \"$id\": \"#root/description\",\n \"title\": \"Description\",\n \"type\": \"string\",\n \"x-display\": \"textarea\",\n \"x-class\": \"pr-2\"\n }\n }\n}\n", "status": "closed", "type": "incident"}, + }, + }, + { Name: "RunTask", Args: Args{Method: "Post", URL: "/tickets/8123/playbooks/phishing/task/board/run"}, @@ -542,7 +551,7 @@ var Tests = []struct { { Name: "CreateUser", - Args: Args{Method: "Post", URL: "/users", Data: map[string]interface{}{"id": "syncscript", "roles": []interface{}{"analyst"}}}, + Args: Args{Method: "Post", URL: "/users", Data: map[string]interface{}{"apikey": true, "blocked": false, "id": "syncscript", "roles": []interface{}{"analyst"}}}, Want: Want{ Status: 200, Body: map[string]interface{}{"blocked": false, "id": "syncscript", "roles": []interface{}{"analyst:automation:read", "analyst:currentsettings:write", "analyst:currentuser:read", "analyst:currentuserdata:read", "analyst:file", "analyst:group:read", "analyst:playbook:read", "analyst:rule:read", "analyst:settings:read", "analyst:template:read", "analyst:ticket:read", "analyst:ticket:write", "analyst:tickettype:read", "analyst:user:read"}, "secret": "v39bOuobnlEljfWzjAgoKzhmnh1xSMxH"}, @@ -560,7 +569,7 @@ var Tests = []struct { { Name: "UpdateUser", - Args: Args{Method: "Put", URL: "/users/bob", Data: map[string]interface{}{"roles": []interface{}{"analyst", "admin"}}}, + Args: Args{Method: "Put", URL: "/users/bob", Data: map[string]interface{}{"apikey": false, "blocked": false, "id": "syncscript", "roles": []interface{}{"analyst", "admin"}}}, Want: Want{ Status: 200, Body: map[string]interface{}{"apikey": false, "blocked": false, "id": "bob", "roles": []interface{}{"admin:backup:read", "admin:backup:restore", "admin:group:write", "admin:job:read", "admin:job:write", "admin:log:read", "admin:ticket:delete", "admin:user:write", "admin:userdata:read", "admin:userdata:write", "analyst:automation:read", "analyst:currentsettings:write", "analyst:currentuser:read", "analyst:currentuserdata:read", "analyst:file", "analyst:group:read", "analyst:playbook:read", "analyst:rule:read", "analyst:settings:read", "analyst:template:read", "analyst:ticket:read", "analyst:ticket:write", "analyst:tickettype:read", "analyst:user:read", "engineer:automation:write", "engineer:playbook:write", "engineer:rule:write", "engineer:template:write", "engineer:tickettype:write"}}, diff --git a/generated/caql/parser/caql_lexer.go b/generated/caql/parser/caql_lexer.go index 8e2cd57..e4c10d6 100644 --- a/generated/caql/parser/caql_lexer.go +++ b/generated/caql/parser/caql_lexer.go @@ -1,4 +1,4 @@ -// Code generated from CAQLLexer.g4 by ANTLR 4.9.2. DO NOT EDIT. +// Code generated from CAQLLexer.g4 by ANTLR 4.9.3. DO NOT EDIT. package parser diff --git a/generated/caql/parser/caql_parser.go b/generated/caql/parser/caql_parser.go index 31f337c..c51fe3b 100644 --- a/generated/caql/parser/caql_parser.go +++ b/generated/caql/parser/caql_parser.go @@ -1,4 +1,4 @@ -// Code generated from CAQLParser.g4 by ANTLR 4.9.2. DO NOT EDIT. +// Code generated from CAQLParser.g4 by ANTLR 4.9.3. DO NOT EDIT. package parser // CAQLParser @@ -332,6 +332,9 @@ func (s *ParseContext) ExitRule(listener antlr.ParseTreeListener) { } func (p *CAQLParser) Parse() (localctx IParseContext) { + this := p + _ = this + localctx = NewParseContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 0, CAQLParserRULE_parse) @@ -587,6 +590,9 @@ func (p *CAQLParser) Expression() (localctx IExpressionContext) { } func (p *CAQLParser) expression(_p int) (localctx IExpressionContext) { + this := p + _ = this + var _parentctx antlr.ParserRuleContext = p.GetParserRuleContext() _parentState := p.GetState() localctx = NewExpressionContext(p, p.GetParserRuleContext(), _parentState) @@ -1076,6 +1082,9 @@ func (s *Operator_unaryContext) ExitRule(listener antlr.ParseTreeListener) { } func (p *CAQLParser) Operator_unary() (localctx IOperator_unaryContext) { + this := p + _ = this + localctx = NewOperator_unaryContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 4, CAQLParserRULE_operator_unary) @@ -1264,6 +1273,9 @@ func (p *CAQLParser) Reference() (localctx IReferenceContext) { } func (p *CAQLParser) reference(_p int) (localctx IReferenceContext) { + this := p + _ = this + var _parentctx antlr.ParserRuleContext = p.GetParserRuleContext() _parentState := p.GetState() localctx = NewReferenceContext(p, p.GetParserRuleContext(), _parentState) @@ -1469,6 +1481,9 @@ func (s *Compound_valueContext) ExitRule(listener antlr.ParseTreeListener) { } func (p *CAQLParser) Compound_value() (localctx ICompound_valueContext) { + this := p + _ = this + localctx = NewCompound_valueContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 8, CAQLParserRULE_compound_value) @@ -1614,6 +1629,9 @@ func (s *Function_callContext) ExitRule(listener antlr.ParseTreeListener) { } func (p *CAQLParser) Function_call() (localctx IFunction_callContext) { + this := p + _ = this + localctx = NewFunction_callContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 10, CAQLParserRULE_function_call) var _la int @@ -1778,6 +1796,9 @@ func (s *Value_literalContext) ExitRule(listener antlr.ParseTreeListener) { } func (p *CAQLParser) Value_literal() (localctx IValue_literalContext) { + this := p + _ = this + localctx = NewValue_literalContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 12, CAQLParserRULE_value_literal) var _la int @@ -1912,6 +1933,9 @@ func (s *ArrayContext) ExitRule(listener antlr.ParseTreeListener) { } func (p *CAQLParser) Array() (localctx IArrayContext) { + this := p + _ = this + localctx = NewArrayContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 14, CAQLParserRULE_array) var _la int @@ -2087,6 +2111,9 @@ func (s *ObjectContext) ExitRule(listener antlr.ParseTreeListener) { } func (p *CAQLParser) Object() (localctx IObjectContext) { + this := p + _ = this + localctx = NewObjectContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 16, CAQLParserRULE_object) var _la int @@ -2272,6 +2299,9 @@ func (s *Object_elementContext) ExitRule(listener antlr.ParseTreeListener) { } func (p *CAQLParser) Object_element() (localctx IObject_elementContext) { + this := p + _ = this + localctx = NewObject_elementContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 18, CAQLParserRULE_object_element) @@ -2409,6 +2439,9 @@ func (s *Object_element_nameContext) ExitRule(listener antlr.ParseTreeListener) } func (p *CAQLParser) Object_element_name() (localctx IObject_element_nameContext) { + this := p + _ = this + localctx = NewObject_element_nameContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 20, CAQLParserRULE_object_element_name) var _la int @@ -2467,6 +2500,9 @@ func (p *CAQLParser) Sempred(localctx antlr.RuleContext, ruleIndex, predIndex in } func (p *CAQLParser) Expression_Sempred(localctx antlr.RuleContext, predIndex int) bool { + this := p + _ = this + switch predIndex { case 0: return p.Precpred(p.GetParserRuleContext(), 13) @@ -2513,6 +2549,9 @@ func (p *CAQLParser) Expression_Sempred(localctx antlr.RuleContext, predIndex in } func (p *CAQLParser) Reference_Sempred(localctx antlr.RuleContext, predIndex int) bool { + this := p + _ = this + switch predIndex { case 13: return p.Precpred(p.GetParserRuleContext(), 2) diff --git a/generated/caql/parser/caqlparser_base_listener.go b/generated/caql/parser/caqlparser_base_listener.go index d9fb6fc..e3908ad 100644 --- a/generated/caql/parser/caqlparser_base_listener.go +++ b/generated/caql/parser/caqlparser_base_listener.go @@ -1,4 +1,4 @@ -// Code generated from CAQLParser.g4 by ANTLR 4.9.2. DO NOT EDIT. +// Code generated from CAQLParser.g4 by ANTLR 4.9.3. DO NOT EDIT. package parser // CAQLParser diff --git a/generated/caql/parser/caqlparser_listener.go b/generated/caql/parser/caqlparser_listener.go index 2bf77ee..55ac428 100644 --- a/generated/caql/parser/caqlparser_listener.go +++ b/generated/caql/parser/caqlparser_listener.go @@ -1,4 +1,4 @@ -// Code generated from CAQLParser.g4 by ANTLR 4.9.2. DO NOT EDIT. +// Code generated from CAQLParser.g4 by ANTLR 4.9.3. DO NOT EDIT. package parser // CAQLParser diff --git a/generated/catalyst.json b/generated/catalyst.json index 8a92c8c..522bfed 100644 --- a/generated/catalyst.json +++ b/generated/catalyst.json @@ -659,7 +659,7 @@ "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/Job" + "$ref" : "#/components/schemas/JobUpdate" } } }, @@ -3404,7 +3404,7 @@ }, "/tickets/{id}/playbooks/{playbookID}/task/{taskID}" : { "put" : { - "operationId" : "setTask", + "operationId" : "setTaskData", "parameters" : [ { "description" : "Ticket ID", "example" : 8123, @@ -3438,11 +3438,11 @@ "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/Task" + "type" : "object" } } }, - "description" : "Task", + "description" : "Task data", "required" : true }, "responses" : { @@ -3628,9 +3628,9 @@ "security" : [ { "roles" : [ "ticket:write" ] } ], - "summary" : "Set a ticket playbook task", + "summary" : "Set a ticket playbook task data", "tags" : [ "tickets" ], - "x-codegen-request-body-name" : "task" + "x-codegen-request-body-name" : "data" } }, "/tickets/{id}/playbooks/{playbookID}/task/{taskID}/complete" : { @@ -3865,6 +3865,235 @@ "x-codegen-request-body-name" : "data" } }, + "/tickets/{id}/playbooks/{playbookID}/task/{taskID}/owner" : { + "put" : { + "operationId" : "setTaskOwner", + "parameters" : [ { + "description" : "Ticket ID", + "example" : 8123, + "in" : "path", + "name" : "id", + "required" : true, + "schema" : { + "format" : "int64", + "type" : "integer" + } + }, { + "description" : "Playbook ID", + "example" : "phishing", + "in" : "path", + "name" : "playbookID", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "description" : "Task ID", + "example" : "board", + "in" : "path", + "name" : "taskID", + "required" : true, + "schema" : { + "type" : "string" + } + } ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "string" + } + } + }, + "description" : "Task owner", + "required" : true + }, + "responses" : { + "200" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/TicketWithTickets" + } + }, + "test" : { + "example" : { + "artifacts" : [ { + "name" : "94d5cab6f5fe3422a447ab15436e7a672bc0c09a", + "status" : "unknown" + }, { + "name" : "http://www.customerviral.io/scalable/vertical/killer", + "status" : "clean" + }, { + "name" : "leadreintermediate.io", + "status" : "malicious" + } ], + "created" : "2021-10-02T16:04:59.078+0000", + "id" : 8123, + "modified" : "2021-12-12T12:12:12.000+0000", + "name" : "live zebra", + "owner" : "demo", + "playbooks" : { + "phishing" : { + "name" : "Phishing", + "tasks" : { + "block-iocs" : { + "active" : false, + "created" : "2021-12-12T12:12:12.000+0000", + "done" : false, + "name" : "Block IOCs", + "order" : 6, + "type" : "task" + }, + "block-sender" : { + "active" : false, + "created" : "2021-12-12T12:12:12.000+0000", + "done" : false, + "name" : "Block sender", + "next" : { + "extract-iocs" : "" + }, + "order" : 3, + "type" : "task" + }, + "board" : { + "active" : true, + "created" : "2021-12-12T12:12:12.000+0000", + "done" : false, + "name" : "Board Involvement?", + "next" : { + "escalate" : "boardInvolved == true", + "mail-available" : "boardInvolved == false" + }, + "order" : 0, + "owner" : "eve", + "schema" : { + "properties" : { + "boardInvolved" : { + "default" : false, + "title" : "A board member is involved.", + "type" : "boolean" + } + }, + "required" : [ "boardInvolved" ], + "title" : "Board Involvement?", + "type" : "object" + }, + "type" : "input" + }, + "escalate" : { + "active" : false, + "created" : "2021-12-12T12:12:12.000+0000", + "done" : false, + "name" : "Escalate to CISO", + "order" : 1, + "type" : "task" + }, + "extract-iocs" : { + "active" : false, + "created" : "2021-12-12T12:12:12.000+0000", + "done" : false, + "name" : "Extract IOCs", + "next" : { + "block-iocs" : "" + }, + "order" : 5, + "schema" : { + "properties" : { + "iocs" : { + "items" : { + "type" : "string" + }, + "title" : "IOCs", + "type" : "array" + } + }, + "title" : "Extract IOCs", + "type" : "object" + }, + "type" : "input" + }, + "mail-available" : { + "active" : false, + "created" : "2021-12-12T12:12:12.000+0000", + "done" : false, + "name" : "Mail available", + "next" : { + "block-sender" : "schemaKey == 'yes'", + "extract-iocs" : "schemaKey == 'yes'", + "search-email-gateway" : "schemaKey == 'no'" + }, + "order" : 2, + "schema" : { + "oneOf" : [ { + "properties" : { + "mail" : { + "title" : "Mail", + "type" : "string", + "x-display" : "textarea" + }, + "schemaKey" : { + "const" : "yes", + "type" : "string" + } + }, + "required" : [ "mail" ], + "title" : "Yes" + }, { + "properties" : { + "schemaKey" : { + "const" : "no", + "type" : "string" + } + }, + "title" : "No" + } ], + "title" : "Mail available", + "type" : "object" + }, + "type" : "input" + }, + "search-email-gateway" : { + "active" : false, + "created" : "2021-12-12T12:12:12.000+0000", + "done" : false, + "name" : "Search email gateway", + "next" : { + "extract-iocs" : "" + }, + "order" : 4, + "type" : "task" + } + } + } + }, + "references" : [ { + "href" : "https://www.leadmaximize.net/e-services/back-end", + "name" : "performance" + }, { + "href" : "http://www.corporateinteractive.name/rich", + "name" : "autumn" + }, { + "href" : "https://www.corporateintuitive.org/intuitive/platforms/integrate", + "name" : "suggest" + } ], + "schema" : "{\n \"definitions\": {},\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://example.com/object1618746510.json\",\n \"title\": \"Event\",\n \"type\": \"object\",\n \"required\": [\n \"severity\",\n \"description\",\n \"tlp\"\n ],\n \"properties\": {\n \"severity\": {\n \"$id\": \"#root/severity\",\n \"title\": \"Severity\",\n \"type\": \"string\",\n \"default\": \"Medium\",\n \"nx-enum\": [\n \"Low\",\n \"Medium\",\n \"High\"\n ],\n \"x-cols\": 6,\n \"x-class\": \"pr-2\",\n \"x-display\": \"icon\",\n \"x-itemIcon\": \"icon\",\n \"oneOf\": [\n {\n \"const\": \"Low\",\n \"title\": \"Low\",\n \"icon\": \"mdi-chevron-up\"\n },\n {\n \"const\": \"Medium\",\n \"title\": \"Medium\",\n \"icon\": \"mdi-chevron-double-up\"\n },\n {\n \"const\": \"High\",\n \"title\": \"High\",\n \"icon\": \"mdi-chevron-triple-up\"\n }\n ]\n },\n \"tlp\": {\n \"$id\": \"#root/tlp\",\n \"title\": \"TLP\",\n \"type\": \"string\",\n \"nx-enum\": [\n \"White\",\n \"Green\",\n \"Amber\",\n \"Red\"\n ],\n \"x-cols\": 6,\n \"x-class\": \"pr-2\",\n \"x-display\": \"icon\",\n \"x-itemIcon\": \"icon\",\n \"oneOf\": [\n {\n \"const\": \"White\",\n \"title\": \"White\",\n \"icon\": \"mdi-alpha-w\"\n },\n {\n \"const\": \"Green\",\n \"title\": \"Green\",\n \"icon\": \"mdi-alpha-g\"\n },\n {\n \"const\": \"Amber\",\n \"title\": \"Amber\",\n \"icon\": \"mdi-alpha-a\"\n },\n {\n \"const\": \"Red\",\n \"title\": \"Red\",\n \"icon\": \"mdi-alpha-r\"\n }\n ]\n },\n \"description\": {\n \"$id\": \"#root/description\",\n \"title\": \"Description\",\n \"type\": \"string\",\n \"x-display\": \"textarea\",\n \"x-class\": \"pr-2\"\n }\n }\n}\n", + "status" : "closed", + "type" : "incident" + } + } + }, + "description" : "successful operation" + } + }, + "security" : [ { + "roles" : [ "ticket:write" ] + } ], + "summary" : "Set a ticket playbook task owner", + "tags" : [ "tickets" ], + "x-codegen-request-body-name" : "owner" + } + }, "/tickets/{id}/playbooks/{playbookID}/task/{taskID}/run" : { "post" : { "operationId" : "runTask", @@ -3928,10 +4157,7 @@ "content" : { "application/json" : { "schema" : { - "items" : { - "$ref" : "#/components/schemas/Reference" - }, - "type" : "array" + "$ref" : "#/components/schemas/ReferenceArray" } } }, @@ -4390,10 +4616,7 @@ "content" : { "application/json" : { "schema" : { - "items" : { - "$ref" : "#/components/schemas/TicketForm" - }, - "type" : "array" + "$ref" : "#/components/schemas/TicketFormArray" } } }, @@ -5295,6 +5518,28 @@ "required" : [ "automation", "id", "status" ], "type" : "object" }, + "JobUpdate" : { + "properties" : { + "container" : { + "type" : "string" + }, + "log" : { + "type" : "string" + }, + "output" : { + "properties" : { }, + "type" : "object" + }, + "running" : { + "type" : "boolean" + }, + "status" : { + "type" : "string" + } + }, + "required" : [ "running", "status" ], + "type" : "object" + }, "Link" : { "properties" : { "id" : { @@ -5478,6 +5723,12 @@ "required" : [ "href", "name" ], "type" : "object" }, + "ReferenceArray" : { + "items" : { + "$ref" : "#/components/schemas/Reference" + }, + "type" : "array" + }, "Rule" : { "properties" : { "condition" : { @@ -5655,62 +5906,6 @@ "required" : [ "created", "done", "name", "type" ], "type" : "object" }, - "TaskForm" : { - "properties" : { - "automation" : { - "type" : "string" - }, - "closed" : { - "format" : "date-time", - "type" : "string" - }, - "created" : { - "format" : "date-time", - "type" : "string" - }, - "data" : { - "properties" : { }, - "type" : "object" - }, - "done" : { - "type" : "boolean" - }, - "join" : { - "example" : false, - "type" : "boolean" - }, - "name" : { - "example" : "Inform user", - "type" : "string" - }, - "next" : { - "additionalProperties" : { - "type" : "string" - }, - "type" : "object" - }, - "owner" : { - "type" : "string" - }, - "payload" : { - "additionalProperties" : { - "type" : "string" - }, - "type" : "object" - }, - "schema" : { - "properties" : { }, - "type" : "object" - }, - "type" : { - "enum" : [ "task", "input", "automation" ], - "example" : "task", - "type" : "string" - } - }, - "required" : [ "name", "type" ], - "type" : "object" - }, "TaskOrigin" : { "properties" : { "playbook_id" : { @@ -5992,6 +6187,12 @@ "required" : [ "name", "status", "type" ], "type" : "object" }, + "TicketFormArray" : { + "items" : { + "$ref" : "#/components/schemas/TicketForm" + }, + "type" : "array" + }, "TicketList" : { "properties" : { "count" : { diff --git a/generated/catalyst.yml b/generated/catalyst.yml index cff8bb6..aff5968 100644 --- a/generated/catalyst.yml +++ b/generated/catalyst.yml @@ -288,6 +288,22 @@ definitions: - automation - status type: object + JobUpdate: + properties: + container: + type: string + log: + type: string + output: + type: object + running: + type: boolean + status: + type: string + required: + - running + - status + type: object Link: properties: id: @@ -435,6 +451,10 @@ definitions: - name - href type: object + ReferenceArray: + items: + $ref: '#/definitions/Reference' + type: array Rule: properties: condition: @@ -584,51 +604,6 @@ definitions: - done - created type: object - TaskForm: - properties: - automation: - type: string - closed: - example: 1985-04-12T23:20:50.52Z - format: date-time - type: string - created: - example: 1985-04-12T23:20:50.52Z - format: date-time - type: string - data: - type: object - done: - type: boolean - join: - example: false - type: boolean - name: - example: Inform user - type: string - next: - additionalProperties: - type: string - type: object - owner: - type: string - payload: - additionalProperties: - type: string - type: object - schema: - type: object - type: - enum: - - task - - input - - automation - example: task - type: string - required: - - name - - type - type: object TaskOrigin: properties: playbook_id: @@ -861,6 +836,10 @@ definitions: - type - status type: object + TicketFormArray: + items: + $ref: '#/definitions/TicketForm' + type: array TicketList: properties: count: @@ -1899,11 +1878,9 @@ paths: name: job required: true schema: - $ref: '#/definitions/Job' + $ref: '#/definitions/JobUpdate' x-example: - automation: hash.sha1 - id: 99cd67131b48 - payload: test + running: false status: failed responses: "200": @@ -5465,7 +5442,7 @@ paths: - tickets /tickets/{id}/playbooks/{playbookID}/task/{taskID}: put: - operationId: setTask + operationId: setTaskData parameters: - description: Ticket ID format: int64 @@ -5486,33 +5463,14 @@ paths: required: true type: string x-example: board - - description: Task + - description: Task data in: body - name: task + name: data required: true schema: - $ref: '#/definitions/Task' + type: object x-example: - active: true - data: - boardInvolved: true - done: false - name: Board Involvement? - next: - escalate: boardInvolved == true - mail-available: boardInvolved == false - order: 0 - schema: - properties: - boardInvolved: - default: false - title: A board member is involved. - type: boolean - required: - - boardInvolved - title: Board Involvement? - type: object - type: input + boardInvolved: true responses: "200": description: successful operation @@ -5742,7 +5700,7 @@ paths: security: - roles: - ticket:write - summary: Set a ticket playbook task + summary: Set a ticket playbook task data tags: - tickets /tickets/{id}/playbooks/{playbookID}/task/{taskID}/complete: @@ -6009,6 +5967,267 @@ paths: summary: Complete ticket playbook task tags: - tickets + /tickets/{id}/playbooks/{playbookID}/task/{taskID}/owner: + put: + operationId: setTaskOwner + parameters: + - description: Ticket ID + format: int64 + in: path + name: id + required: true + type: integer + x-example: 8123 + - description: Playbook ID + in: path + name: playbookID + required: true + type: string + x-example: phishing + - description: Task ID + in: path + name: taskID + required: true + type: string + x-example: board + - description: Task owner + in: body + name: owner + required: true + schema: + type: string + x-example: eve + responses: + "200": + description: successful operation + examples: + test: + artifacts: + - name: 94d5cab6f5fe3422a447ab15436e7a672bc0c09a + status: unknown + - name: http://www.customerviral.io/scalable/vertical/killer + status: clean + - name: leadreintermediate.io + status: malicious + created: 2021-10-02T16:04:59.078206Z + id: 8123 + modified: 2021-12-12T12:12:12.000000012Z + name: live zebra + owner: demo + playbooks: + phishing: + name: Phishing + tasks: + block-iocs: + active: false + created: 2021-12-12T12:12:12.000000012Z + done: false + name: Block IOCs + order: 6 + type: task + block-sender: + active: false + created: 2021-12-12T12:12:12.000000012Z + done: false + name: Block sender + next: + extract-iocs: "" + order: 3 + type: task + board: + active: true + created: 2021-12-12T12:12:12.000000012Z + done: false + name: Board Involvement? + next: + escalate: boardInvolved == true + mail-available: boardInvolved == false + order: 0 + owner: eve + schema: + properties: + boardInvolved: + default: false + title: A board member is involved. + type: boolean + required: + - boardInvolved + title: Board Involvement? + type: object + type: input + escalate: + active: false + created: 2021-12-12T12:12:12.000000012Z + done: false + name: Escalate to CISO + order: 1 + type: task + extract-iocs: + active: false + created: 2021-12-12T12:12:12.000000012Z + done: false + name: Extract IOCs + next: + block-iocs: "" + order: 5 + schema: + properties: + iocs: + items: + type: string + title: IOCs + type: array + title: Extract IOCs + type: object + type: input + mail-available: + active: false + created: 2021-12-12T12:12:12.000000012Z + done: false + name: Mail available + next: + block-sender: schemaKey == 'yes' + extract-iocs: schemaKey == 'yes' + search-email-gateway: schemaKey == 'no' + order: 2 + schema: + oneOf: + - properties: + mail: + title: Mail + type: string + x-display: textarea + schemaKey: + const: "yes" + type: string + required: + - mail + title: "Yes" + - properties: + schemaKey: + const: "no" + type: string + title: "No" + title: Mail available + type: object + type: input + search-email-gateway: + active: false + created: 2021-12-12T12:12:12.000000012Z + done: false + name: Search email gateway + next: + extract-iocs: "" + order: 4 + type: task + references: + - href: https://www.leadmaximize.net/e-services/back-end + name: performance + - href: http://www.corporateinteractive.name/rich + name: autumn + - href: https://www.corporateintuitive.org/intuitive/platforms/integrate + name: suggest + schema: | + { + "definitions": {}, + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://example.com/object1618746510.json", + "title": "Event", + "type": "object", + "required": [ + "severity", + "description", + "tlp" + ], + "properties": { + "severity": { + "$id": "#root/severity", + "title": "Severity", + "type": "string", + "default": "Medium", + "nx-enum": [ + "Low", + "Medium", + "High" + ], + "x-cols": 6, + "x-class": "pr-2", + "x-display": "icon", + "x-itemIcon": "icon", + "oneOf": [ + { + "const": "Low", + "title": "Low", + "icon": "mdi-chevron-up" + }, + { + "const": "Medium", + "title": "Medium", + "icon": "mdi-chevron-double-up" + }, + { + "const": "High", + "title": "High", + "icon": "mdi-chevron-triple-up" + } + ] + }, + "tlp": { + "$id": "#root/tlp", + "title": "TLP", + "type": "string", + "nx-enum": [ + "White", + "Green", + "Amber", + "Red" + ], + "x-cols": 6, + "x-class": "pr-2", + "x-display": "icon", + "x-itemIcon": "icon", + "oneOf": [ + { + "const": "White", + "title": "White", + "icon": "mdi-alpha-w" + }, + { + "const": "Green", + "title": "Green", + "icon": "mdi-alpha-g" + }, + { + "const": "Amber", + "title": "Amber", + "icon": "mdi-alpha-a" + }, + { + "const": "Red", + "title": "Red", + "icon": "mdi-alpha-r" + } + ] + }, + "description": { + "$id": "#root/description", + "title": "Description", + "type": "string", + "x-display": "textarea", + "x-class": "pr-2" + } + } + } + status: closed + type: incident + schema: + $ref: '#/definitions/TicketWithTickets' + security: + - roles: + - ticket:write + summary: Set a ticket playbook task owner + tags: + - tickets /tickets/{id}/playbooks/{playbookID}/task/{taskID}/run: post: operationId: runTask @@ -6057,9 +6276,7 @@ paths: name: references required: true schema: - items: - $ref: '#/definitions/Reference' - type: array + $ref: '#/definitions/ReferenceArray' x-example: - href: http://www.leadscalable.biz/envisioneer name: fund @@ -6486,9 +6703,7 @@ paths: name: ticket required: true schema: - items: - $ref: '#/definitions/TicketForm' - type: array + $ref: '#/definitions/TicketFormArray' x-example: - id: 123 name: Wannacry infection @@ -6825,6 +7040,8 @@ paths: schema: $ref: '#/definitions/UserForm' x-example: + apikey: true + blocked: false id: syncscript roles: - analyst @@ -6939,6 +7156,9 @@ paths: schema: $ref: '#/definitions/UserForm' x-example: + apikey: false + blocked: false + id: syncscript roles: - analyst - admin diff --git a/generated/community.json b/generated/community.json index 7929dc3..d24e9d4 100644 --- a/generated/community.json +++ b/generated/community.json @@ -427,7 +427,7 @@ "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/Job" + "$ref" : "#/components/schemas/JobUpdate" } } }, @@ -2974,7 +2974,7 @@ }, "/tickets/{id}/playbooks/{playbookID}/task/{taskID}" : { "put" : { - "operationId" : "setTask", + "operationId" : "setTaskData", "parameters" : [ { "description" : "Ticket ID", "example" : 8123, @@ -3008,11 +3008,11 @@ "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/Task" + "type" : "object" } } }, - "description" : "Task", + "description" : "Task data", "required" : true }, "responses" : { @@ -3198,9 +3198,9 @@ "security" : [ { "roles" : [ "ticket:write" ] } ], - "summary" : "Set a ticket playbook task", + "summary" : "Set a ticket playbook task data", "tags" : [ "tickets" ], - "x-codegen-request-body-name" : "task" + "x-codegen-request-body-name" : "data" } }, "/tickets/{id}/playbooks/{playbookID}/task/{taskID}/complete" : { @@ -3435,6 +3435,235 @@ "x-codegen-request-body-name" : "data" } }, + "/tickets/{id}/playbooks/{playbookID}/task/{taskID}/owner" : { + "put" : { + "operationId" : "setTaskOwner", + "parameters" : [ { + "description" : "Ticket ID", + "example" : 8123, + "in" : "path", + "name" : "id", + "required" : true, + "schema" : { + "format" : "int64", + "type" : "integer" + } + }, { + "description" : "Playbook ID", + "example" : "phishing", + "in" : "path", + "name" : "playbookID", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "description" : "Task ID", + "example" : "board", + "in" : "path", + "name" : "taskID", + "required" : true, + "schema" : { + "type" : "string" + } + } ], + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "string" + } + } + }, + "description" : "Task owner", + "required" : true + }, + "responses" : { + "200" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/TicketWithTickets" + } + }, + "test" : { + "example" : { + "artifacts" : [ { + "name" : "94d5cab6f5fe3422a447ab15436e7a672bc0c09a", + "status" : "unknown" + }, { + "name" : "http://www.customerviral.io/scalable/vertical/killer", + "status" : "clean" + }, { + "name" : "leadreintermediate.io", + "status" : "malicious" + } ], + "created" : "2021-10-02T16:04:59.078+0000", + "id" : 8123, + "modified" : "2021-12-12T12:12:12.000+0000", + "name" : "live zebra", + "owner" : "demo", + "playbooks" : { + "phishing" : { + "name" : "Phishing", + "tasks" : { + "block-iocs" : { + "active" : false, + "created" : "2021-12-12T12:12:12.000+0000", + "done" : false, + "name" : "Block IOCs", + "order" : 6, + "type" : "task" + }, + "block-sender" : { + "active" : false, + "created" : "2021-12-12T12:12:12.000+0000", + "done" : false, + "name" : "Block sender", + "next" : { + "extract-iocs" : "" + }, + "order" : 3, + "type" : "task" + }, + "board" : { + "active" : true, + "created" : "2021-12-12T12:12:12.000+0000", + "done" : false, + "name" : "Board Involvement?", + "next" : { + "escalate" : "boardInvolved == true", + "mail-available" : "boardInvolved == false" + }, + "order" : 0, + "owner" : "eve", + "schema" : { + "properties" : { + "boardInvolved" : { + "default" : false, + "title" : "A board member is involved.", + "type" : "boolean" + } + }, + "required" : [ "boardInvolved" ], + "title" : "Board Involvement?", + "type" : "object" + }, + "type" : "input" + }, + "escalate" : { + "active" : false, + "created" : "2021-12-12T12:12:12.000+0000", + "done" : false, + "name" : "Escalate to CISO", + "order" : 1, + "type" : "task" + }, + "extract-iocs" : { + "active" : false, + "created" : "2021-12-12T12:12:12.000+0000", + "done" : false, + "name" : "Extract IOCs", + "next" : { + "block-iocs" : "" + }, + "order" : 5, + "schema" : { + "properties" : { + "iocs" : { + "items" : { + "type" : "string" + }, + "title" : "IOCs", + "type" : "array" + } + }, + "title" : "Extract IOCs", + "type" : "object" + }, + "type" : "input" + }, + "mail-available" : { + "active" : false, + "created" : "2021-12-12T12:12:12.000+0000", + "done" : false, + "name" : "Mail available", + "next" : { + "block-sender" : "schemaKey == 'yes'", + "extract-iocs" : "schemaKey == 'yes'", + "search-email-gateway" : "schemaKey == 'no'" + }, + "order" : 2, + "schema" : { + "oneOf" : [ { + "properties" : { + "mail" : { + "title" : "Mail", + "type" : "string", + "x-display" : "textarea" + }, + "schemaKey" : { + "const" : "yes", + "type" : "string" + } + }, + "required" : [ "mail" ], + "title" : "Yes" + }, { + "properties" : { + "schemaKey" : { + "const" : "no", + "type" : "string" + } + }, + "title" : "No" + } ], + "title" : "Mail available", + "type" : "object" + }, + "type" : "input" + }, + "search-email-gateway" : { + "active" : false, + "created" : "2021-12-12T12:12:12.000+0000", + "done" : false, + "name" : "Search email gateway", + "next" : { + "extract-iocs" : "" + }, + "order" : 4, + "type" : "task" + } + } + } + }, + "references" : [ { + "href" : "https://www.leadmaximize.net/e-services/back-end", + "name" : "performance" + }, { + "href" : "http://www.corporateinteractive.name/rich", + "name" : "autumn" + }, { + "href" : "https://www.corporateintuitive.org/intuitive/platforms/integrate", + "name" : "suggest" + } ], + "schema" : "{\n \"definitions\": {},\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://example.com/object1618746510.json\",\n \"title\": \"Event\",\n \"type\": \"object\",\n \"required\": [\n \"severity\",\n \"description\",\n \"tlp\"\n ],\n \"properties\": {\n \"severity\": {\n \"$id\": \"#root/severity\",\n \"title\": \"Severity\",\n \"type\": \"string\",\n \"default\": \"Medium\",\n \"nx-enum\": [\n \"Low\",\n \"Medium\",\n \"High\"\n ],\n \"x-cols\": 6,\n \"x-class\": \"pr-2\",\n \"x-display\": \"icon\",\n \"x-itemIcon\": \"icon\",\n \"oneOf\": [\n {\n \"const\": \"Low\",\n \"title\": \"Low\",\n \"icon\": \"mdi-chevron-up\"\n },\n {\n \"const\": \"Medium\",\n \"title\": \"Medium\",\n \"icon\": \"mdi-chevron-double-up\"\n },\n {\n \"const\": \"High\",\n \"title\": \"High\",\n \"icon\": \"mdi-chevron-triple-up\"\n }\n ]\n },\n \"tlp\": {\n \"$id\": \"#root/tlp\",\n \"title\": \"TLP\",\n \"type\": \"string\",\n \"nx-enum\": [\n \"White\",\n \"Green\",\n \"Amber\",\n \"Red\"\n ],\n \"x-cols\": 6,\n \"x-class\": \"pr-2\",\n \"x-display\": \"icon\",\n \"x-itemIcon\": \"icon\",\n \"oneOf\": [\n {\n \"const\": \"White\",\n \"title\": \"White\",\n \"icon\": \"mdi-alpha-w\"\n },\n {\n \"const\": \"Green\",\n \"title\": \"Green\",\n \"icon\": \"mdi-alpha-g\"\n },\n {\n \"const\": \"Amber\",\n \"title\": \"Amber\",\n \"icon\": \"mdi-alpha-a\"\n },\n {\n \"const\": \"Red\",\n \"title\": \"Red\",\n \"icon\": \"mdi-alpha-r\"\n }\n ]\n },\n \"description\": {\n \"$id\": \"#root/description\",\n \"title\": \"Description\",\n \"type\": \"string\",\n \"x-display\": \"textarea\",\n \"x-class\": \"pr-2\"\n }\n }\n}\n", + "status" : "closed", + "type" : "incident" + } + } + }, + "description" : "successful operation" + } + }, + "security" : [ { + "roles" : [ "ticket:write" ] + } ], + "summary" : "Set a ticket playbook task owner", + "tags" : [ "tickets" ], + "x-codegen-request-body-name" : "owner" + } + }, "/tickets/{id}/playbooks/{playbookID}/task/{taskID}/run" : { "post" : { "operationId" : "runTask", @@ -3498,10 +3727,7 @@ "content" : { "application/json" : { "schema" : { - "items" : { - "$ref" : "#/components/schemas/Reference" - }, - "type" : "array" + "$ref" : "#/components/schemas/ReferenceArray" } } }, @@ -3960,10 +4186,7 @@ "content" : { "application/json" : { "schema" : { - "items" : { - "$ref" : "#/components/schemas/TicketForm" - }, - "type" : "array" + "$ref" : "#/components/schemas/TicketFormArray" } } }, @@ -4797,6 +5020,28 @@ "required" : [ "automation", "id", "status" ], "type" : "object" }, + "JobUpdate" : { + "properties" : { + "container" : { + "type" : "string" + }, + "log" : { + "type" : "string" + }, + "output" : { + "properties" : { }, + "type" : "object" + }, + "running" : { + "type" : "boolean" + }, + "status" : { + "type" : "string" + } + }, + "required" : [ "running", "status" ], + "type" : "object" + }, "LogEntry" : { "properties" : { "created" : { @@ -4953,6 +5198,12 @@ "required" : [ "href", "name" ], "type" : "object" }, + "ReferenceArray" : { + "items" : { + "$ref" : "#/components/schemas/Reference" + }, + "type" : "array" + }, "Settings" : { "properties" : { "artifactStates" : { @@ -5076,62 +5327,6 @@ "required" : [ "created", "done", "name", "type" ], "type" : "object" }, - "TaskForm" : { - "properties" : { - "automation" : { - "type" : "string" - }, - "closed" : { - "format" : "date-time", - "type" : "string" - }, - "created" : { - "format" : "date-time", - "type" : "string" - }, - "data" : { - "properties" : { }, - "type" : "object" - }, - "done" : { - "type" : "boolean" - }, - "join" : { - "example" : false, - "type" : "boolean" - }, - "name" : { - "example" : "Inform user", - "type" : "string" - }, - "next" : { - "additionalProperties" : { - "type" : "string" - }, - "type" : "object" - }, - "owner" : { - "type" : "string" - }, - "payload" : { - "additionalProperties" : { - "type" : "string" - }, - "type" : "object" - }, - "schema" : { - "properties" : { }, - "type" : "object" - }, - "type" : { - "enum" : [ "task", "input", "automation" ], - "example" : "task", - "type" : "string" - } - }, - "required" : [ "name", "type" ], - "type" : "object" - }, "TaskOrigin" : { "properties" : { "playbook_id" : { @@ -5413,6 +5608,12 @@ "required" : [ "name", "status", "type" ], "type" : "object" }, + "TicketFormArray" : { + "items" : { + "$ref" : "#/components/schemas/TicketForm" + }, + "type" : "array" + }, "TicketList" : { "properties" : { "count" : { diff --git a/generated/community.yml b/generated/community.yml index b90e6a2..c072b72 100644 --- a/generated/community.yml +++ b/generated/community.yml @@ -236,6 +236,22 @@ definitions: - automation - status type: object + JobUpdate: + properties: + container: + type: string + log: + type: string + output: + type: object + running: + type: boolean + status: + type: string + required: + - running + - status + type: object LogEntry: properties: created: @@ -360,6 +376,10 @@ definitions: - name - href type: object + ReferenceArray: + items: + $ref: '#/definitions/Reference' + type: array Settings: properties: artifactStates: @@ -465,51 +485,6 @@ definitions: - done - created type: object - TaskForm: - properties: - automation: - type: string - closed: - example: 1985-04-12T23:20:50.52Z - format: date-time - type: string - created: - example: 1985-04-12T23:20:50.52Z - format: date-time - type: string - data: - type: object - done: - type: boolean - join: - example: false - type: boolean - name: - example: Inform user - type: string - next: - additionalProperties: - type: string - type: object - owner: - type: string - payload: - additionalProperties: - type: string - type: object - schema: - type: object - type: - enum: - - task - - input - - automation - example: task - type: string - required: - - name - - type - type: object TaskOrigin: properties: playbook_id: @@ -742,6 +717,10 @@ definitions: - type - status type: object + TicketFormArray: + items: + $ref: '#/definitions/TicketForm' + type: array TicketList: properties: count: @@ -1628,11 +1607,9 @@ paths: name: job required: true schema: - $ref: '#/definitions/Job' + $ref: '#/definitions/JobUpdate' x-example: - automation: hash.sha1 - id: 99cd67131b48 - payload: test + running: false status: failed responses: "200": @@ -5053,7 +5030,7 @@ paths: - tickets /tickets/{id}/playbooks/{playbookID}/task/{taskID}: put: - operationId: setTask + operationId: setTaskData parameters: - description: Ticket ID format: int64 @@ -5074,33 +5051,14 @@ paths: required: true type: string x-example: board - - description: Task + - description: Task data in: body - name: task + name: data required: true schema: - $ref: '#/definitions/Task' + type: object x-example: - active: true - data: - boardInvolved: true - done: false - name: Board Involvement? - next: - escalate: boardInvolved == true - mail-available: boardInvolved == false - order: 0 - schema: - properties: - boardInvolved: - default: false - title: A board member is involved. - type: boolean - required: - - boardInvolved - title: Board Involvement? - type: object - type: input + boardInvolved: true responses: "200": description: successful operation @@ -5330,7 +5288,7 @@ paths: security: - roles: - ticket:write - summary: Set a ticket playbook task + summary: Set a ticket playbook task data tags: - tickets /tickets/{id}/playbooks/{playbookID}/task/{taskID}/complete: @@ -5597,6 +5555,267 @@ paths: summary: Complete ticket playbook task tags: - tickets + /tickets/{id}/playbooks/{playbookID}/task/{taskID}/owner: + put: + operationId: setTaskOwner + parameters: + - description: Ticket ID + format: int64 + in: path + name: id + required: true + type: integer + x-example: 8123 + - description: Playbook ID + in: path + name: playbookID + required: true + type: string + x-example: phishing + - description: Task ID + in: path + name: taskID + required: true + type: string + x-example: board + - description: Task owner + in: body + name: owner + required: true + schema: + type: string + x-example: eve + responses: + "200": + description: successful operation + examples: + test: + artifacts: + - name: 94d5cab6f5fe3422a447ab15436e7a672bc0c09a + status: unknown + - name: http://www.customerviral.io/scalable/vertical/killer + status: clean + - name: leadreintermediate.io + status: malicious + created: 2021-10-02T16:04:59.078206Z + id: 8123 + modified: 2021-12-12T12:12:12.000000012Z + name: live zebra + owner: demo + playbooks: + phishing: + name: Phishing + tasks: + block-iocs: + active: false + created: 2021-12-12T12:12:12.000000012Z + done: false + name: Block IOCs + order: 6 + type: task + block-sender: + active: false + created: 2021-12-12T12:12:12.000000012Z + done: false + name: Block sender + next: + extract-iocs: "" + order: 3 + type: task + board: + active: true + created: 2021-12-12T12:12:12.000000012Z + done: false + name: Board Involvement? + next: + escalate: boardInvolved == true + mail-available: boardInvolved == false + order: 0 + owner: eve + schema: + properties: + boardInvolved: + default: false + title: A board member is involved. + type: boolean + required: + - boardInvolved + title: Board Involvement? + type: object + type: input + escalate: + active: false + created: 2021-12-12T12:12:12.000000012Z + done: false + name: Escalate to CISO + order: 1 + type: task + extract-iocs: + active: false + created: 2021-12-12T12:12:12.000000012Z + done: false + name: Extract IOCs + next: + block-iocs: "" + order: 5 + schema: + properties: + iocs: + items: + type: string + title: IOCs + type: array + title: Extract IOCs + type: object + type: input + mail-available: + active: false + created: 2021-12-12T12:12:12.000000012Z + done: false + name: Mail available + next: + block-sender: schemaKey == 'yes' + extract-iocs: schemaKey == 'yes' + search-email-gateway: schemaKey == 'no' + order: 2 + schema: + oneOf: + - properties: + mail: + title: Mail + type: string + x-display: textarea + schemaKey: + const: "yes" + type: string + required: + - mail + title: "Yes" + - properties: + schemaKey: + const: "no" + type: string + title: "No" + title: Mail available + type: object + type: input + search-email-gateway: + active: false + created: 2021-12-12T12:12:12.000000012Z + done: false + name: Search email gateway + next: + extract-iocs: "" + order: 4 + type: task + references: + - href: https://www.leadmaximize.net/e-services/back-end + name: performance + - href: http://www.corporateinteractive.name/rich + name: autumn + - href: https://www.corporateintuitive.org/intuitive/platforms/integrate + name: suggest + schema: | + { + "definitions": {}, + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://example.com/object1618746510.json", + "title": "Event", + "type": "object", + "required": [ + "severity", + "description", + "tlp" + ], + "properties": { + "severity": { + "$id": "#root/severity", + "title": "Severity", + "type": "string", + "default": "Medium", + "nx-enum": [ + "Low", + "Medium", + "High" + ], + "x-cols": 6, + "x-class": "pr-2", + "x-display": "icon", + "x-itemIcon": "icon", + "oneOf": [ + { + "const": "Low", + "title": "Low", + "icon": "mdi-chevron-up" + }, + { + "const": "Medium", + "title": "Medium", + "icon": "mdi-chevron-double-up" + }, + { + "const": "High", + "title": "High", + "icon": "mdi-chevron-triple-up" + } + ] + }, + "tlp": { + "$id": "#root/tlp", + "title": "TLP", + "type": "string", + "nx-enum": [ + "White", + "Green", + "Amber", + "Red" + ], + "x-cols": 6, + "x-class": "pr-2", + "x-display": "icon", + "x-itemIcon": "icon", + "oneOf": [ + { + "const": "White", + "title": "White", + "icon": "mdi-alpha-w" + }, + { + "const": "Green", + "title": "Green", + "icon": "mdi-alpha-g" + }, + { + "const": "Amber", + "title": "Amber", + "icon": "mdi-alpha-a" + }, + { + "const": "Red", + "title": "Red", + "icon": "mdi-alpha-r" + } + ] + }, + "description": { + "$id": "#root/description", + "title": "Description", + "type": "string", + "x-display": "textarea", + "x-class": "pr-2" + } + } + } + status: closed + type: incident + schema: + $ref: '#/definitions/TicketWithTickets' + security: + - roles: + - ticket:write + summary: Set a ticket playbook task owner + tags: + - tickets /tickets/{id}/playbooks/{playbookID}/task/{taskID}/run: post: operationId: runTask @@ -5645,9 +5864,7 @@ paths: name: references required: true schema: - items: - $ref: '#/definitions/Reference' - type: array + $ref: '#/definitions/ReferenceArray' x-example: - href: http://www.leadscalable.biz/envisioneer name: fund @@ -6074,9 +6291,7 @@ paths: name: ticket required: true schema: - items: - $ref: '#/definitions/TicketForm' - type: array + $ref: '#/definitions/TicketFormArray' x-example: - id: 123 name: Wannacry infection @@ -6413,6 +6628,8 @@ paths: schema: $ref: '#/definitions/UserForm' x-example: + apikey: true + blocked: false id: syncscript roles: - analyst @@ -6527,6 +6744,9 @@ paths: schema: $ref: '#/definitions/UserForm' x-example: + apikey: false + blocked: false + id: syncscript roles: - analyst - admin diff --git a/generated/model/model.go b/generated/model/model.go index c875652..2730dc5 100755 --- a/generated/model/model.go +++ b/generated/model/model.go @@ -1,8 +1,6 @@ package model import ( - "fmt" - "strings" "time" "github.com/xeipuuv/gojsonschema" @@ -24,6 +22,7 @@ var ( JobSchema = new(gojsonschema.Schema) JobFormSchema = new(gojsonschema.Schema) JobResponseSchema = new(gojsonschema.Schema) + JobUpdateSchema = new(gojsonschema.Schema) LogEntrySchema = new(gojsonschema.Schema) MessageSchema = new(gojsonschema.Schema) NewUserResponseSchema = new(gojsonschema.Schema) @@ -34,15 +33,16 @@ var ( PlaybookTemplateFormSchema = new(gojsonschema.Schema) PlaybookTemplateResponseSchema = new(gojsonschema.Schema) ReferenceSchema = new(gojsonschema.Schema) + ReferenceArraySchema = new(gojsonschema.Schema) SettingsSchema = new(gojsonschema.Schema) StatisticsSchema = new(gojsonschema.Schema) TaskSchema = new(gojsonschema.Schema) - TaskFormSchema = new(gojsonschema.Schema) TaskOriginSchema = new(gojsonschema.Schema) TaskResponseSchema = new(gojsonschema.Schema) TaskWithContextSchema = new(gojsonschema.Schema) TicketSchema = new(gojsonschema.Schema) TicketFormSchema = new(gojsonschema.Schema) + TicketFormArraySchema = new(gojsonschema.Schema) TicketListSchema = new(gojsonschema.Schema) TicketResponseSchema = new(gojsonschema.Schema) TicketSimpleResponseSchema = new(gojsonschema.Schema) @@ -63,55 +63,57 @@ var ( func init() { err := schemaLoader.AddSchemas( - gojsonschema.NewStringLoader(`{"type":"object","required":["name"],"x-embed":"","properties":{"enrichments":{"type":"object","additionalProperties":{"$ref":"#/definitions/Enrichment"}},"name":{"type":"string"},"status":{"type":"string"},"type":{"type":"string"}},"$id":"#/definitions/Artifact"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["ticket_id","artifact"],"x-embed":"","properties":{"artifact":{"type":"string"},"ticket_id":{"format":"int64","type":"integer"}},"$id":"#/definitions/ArtifactOrigin"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["image","script","type"],"x-embed":"","properties":{"image":{"type":"string"},"schema":{"type":"string"},"script":{"type":"string"},"type":{"items":{"type":"string","enum":["artifact","playbook","global"]},"type":"array"}},"$id":"#/definitions/Automation"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["id","image","script","type"],"x-embed":"","properties":{"id":{"type":"string"},"image":{"type":"string"},"schema":{"type":"string"},"script":{"type":"string"},"type":{"items":{"type":"string","enum":["artifact","playbook","global"]},"type":"array"}},"$id":"#/definitions/AutomationForm"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["id","image","script","type"],"x-embed":"","properties":{"id":{"type":"string"},"image":{"type":"string"},"schema":{"type":"string"},"script":{"type":"string"},"type":{"items":{"type":"string","enum":["artifact","playbook","global"]},"type":"array"}},"$id":"#/definitions/AutomationResponse"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["creator","created","message"],"x-embed":"","properties":{"created":{"format":"date-time","type":"string"},"creator":{"type":"string"},"message":{"type":"string"}},"$id":"#/definitions/Comment"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["message"],"x-embed":"","properties":{"created":{"format":"date-time","type":"string"},"creator":{"type":"string"},"message":{"type":"string"}},"$id":"#/definitions/CommentForm"}`), - gojsonschema.NewStringLoader(`{"type":"object","x-embed":"","properties":{"artifact":{"$ref":"#/definitions/Artifact"},"playbook":{"$ref":"#/definitions/PlaybookResponse"},"task":{"$ref":"#/definitions/TaskResponse"},"ticket":{"$ref":"#/definitions/TicketResponse"}},"$id":"#/definitions/Context"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["name","data","created"],"x-embed":"","properties":{"created":{"format":"date-time","type":"string"},"data":{"type":"object"},"name":{"type":"string"}},"$id":"#/definitions/Enrichment"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["name","data"],"x-embed":"","properties":{"data":{"type":"object"},"name":{"type":"string"}},"$id":"#/definitions/EnrichmentForm"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["key","name"],"x-embed":"","properties":{"key":{"type":"string"},"name":{"type":"string"}},"$id":"#/definitions/File"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["automation","running","status"],"x-embed":"","properties":{"automation":{"type":"string"},"container":{"type":"string"},"log":{"type":"string"},"origin":{"$ref":"#/definitions/Origin"},"output":{"type":"object"},"payload":{},"running":{"type":"boolean"},"status":{"type":"string"}},"$id":"#/definitions/Job"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["automation"],"x-embed":"","properties":{"automation":{"type":"string"},"origin":{"$ref":"#/definitions/Origin"},"payload":{}},"$id":"#/definitions/JobForm"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["id","automation","status"],"x-embed":"","properties":{"automation":{"type":"string"},"container":{"type":"string"},"id":{"type":"string"},"log":{"type":"string"},"origin":{"$ref":"#/definitions/Origin"},"output":{"type":"object"},"payload":{},"status":{"type":"string"}},"$id":"#/definitions/JobResponse"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["type","reference","creator","created","message"],"x-embed":"","properties":{"created":{"format":"date-time","type":"string"},"creator":{"type":"string"},"message":{"type":"string"},"reference":{"type":"string"},"type":{"type":"string"}},"$id":"#/definitions/LogEntry"}`), - gojsonschema.NewStringLoader(`{"type":"object","x-embed":"","properties":{"context":{"$ref":"#/definitions/Context"},"payload":{},"secrets":{"type":"object","additionalProperties":{"type":"string"}}},"$id":"#/definitions/Message"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["id","blocked","roles"],"x-embed":"","properties":{"blocked":{"type":"boolean"},"id":{"type":"string"},"roles":{"items":{"type":"string"},"type":"array"},"secret":{"type":"string"}},"$id":"#/definitions/NewUserResponse"}`), - gojsonschema.NewStringLoader(`{"type":"object","x-embed":"","properties":{"artifact_origin":{"$ref":"#/definitions/ArtifactOrigin"},"task_origin":{"$ref":"#/definitions/TaskOrigin"}},"$id":"#/definitions/Origin"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["name","tasks"],"x-embed":"","properties":{"name":{"type":"string"},"tasks":{"type":"object","additionalProperties":{"$ref":"#/definitions/Task"}}},"$id":"#/definitions/Playbook"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["name","tasks"],"x-embed":"","properties":{"name":{"type":"string"},"tasks":{"type":"object","additionalProperties":{"$ref":"#/definitions/TaskResponse"}}},"$id":"#/definitions/PlaybookResponse"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["name","yaml"],"x-embed":"","properties":{"name":{"type":"string"},"yaml":{"type":"string"}},"$id":"#/definitions/PlaybookTemplate"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["yaml"],"x-embed":"","properties":{"id":{"type":"string"},"yaml":{"type":"string"}},"$id":"#/definitions/PlaybookTemplateForm"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["id","name","yaml"],"x-embed":"","properties":{"id":{"type":"string"},"name":{"type":"string"},"yaml":{"type":"string"}},"$id":"#/definitions/PlaybookTemplateResponse"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["name","href"],"x-embed":"","properties":{"href":{"type":"string"},"name":{"type":"string"}},"$id":"#/definitions/Reference"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["version","tier","timeformat","ticketTypes","artifactStates"],"x-embed":"","properties":{"artifactStates":{"title":"Artifact States","items":{"$ref":"#/definitions/Type"},"type":"array"},"roles":{"title":"Roles","items":{"type":"string"},"type":"array"},"ticketTypes":{"title":"Ticket Types","items":{"$ref":"#/definitions/TicketTypeResponse"},"type":"array"},"tier":{"title":"Tier","type":"string","enum":["community","enterprise"]},"timeformat":{"title":"Time Format","type":"string"},"version":{"title":"Version","type":"string"}},"$id":"#/definitions/Settings"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["unassigned","open_tickets_per_user","tickets_per_week","tickets_per_type"],"x-embed":"","properties":{"open_tickets_per_user":{"type":"object","additionalProperties":{"type":"integer"}},"tickets_per_type":{"type":"object","additionalProperties":{"type":"integer"}},"tickets_per_week":{"type":"object","additionalProperties":{"type":"integer"}},"unassigned":{"type":"integer"}},"$id":"#/definitions/Statistics"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["name","type","done","created"],"x-embed":"","properties":{"automation":{"type":"string"},"closed":{"format":"date-time","type":"string"},"created":{"format":"date-time","type":"string"},"data":{"type":"object"},"done":{"type":"boolean"},"join":{"type":"boolean"},"name":{"type":"string"},"next":{"type":"object","additionalProperties":{"type":"string"}},"owner":{"type":"string"},"payload":{"type":"object","additionalProperties":{"type":"string"}},"schema":{"type":"object"},"type":{"type":"string","enum":["task","input","automation"]}},"$id":"#/definitions/Task"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["name","type"],"x-embed":"","properties":{"automation":{"type":"string"},"closed":{"format":"date-time","type":"string"},"created":{"format":"date-time","type":"string"},"data":{"type":"object"},"done":{"type":"boolean"},"join":{"type":"boolean"},"name":{"type":"string"},"next":{"type":"object","additionalProperties":{"type":"string"}},"owner":{"type":"string"},"payload":{"type":"object","additionalProperties":{"type":"string"}},"schema":{"type":"object"},"type":{"type":"string","enum":["task","input","automation"]}},"$id":"#/definitions/TaskForm"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["ticket_id","playbook_id","task_id"],"x-embed":"","properties":{"playbook_id":{"type":"string"},"task_id":{"type":"string"},"ticket_id":{"format":"int64","type":"integer"}},"$id":"#/definitions/TaskOrigin"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["name","type","done","created","order","active"],"x-embed":"","properties":{"active":{"type":"boolean"},"automation":{"type":"string"},"closed":{"format":"date-time","type":"string"},"created":{"format":"date-time","type":"string"},"data":{"type":"object"},"done":{"type":"boolean"},"join":{"type":"boolean"},"name":{"type":"string"},"next":{"type":"object","additionalProperties":{"type":"string"}},"order":{"format":"int64","type":"number"},"owner":{"type":"string"},"payload":{"type":"object","additionalProperties":{"type":"string"}},"schema":{"type":"object"},"type":{"type":"string","enum":["task","input","automation"]}},"$id":"#/definitions/TaskResponse"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["ticket_id","ticket_name","playbook_id","playbook_name","task_id","task"],"x-embed":"","properties":{"playbook_id":{"type":"string"},"playbook_name":{"type":"string"},"task":{"$ref":"#/definitions/TaskResponse"},"task_id":{"type":"string"},"ticket_id":{"format":"int64","type":"number"},"ticket_name":{"type":"string"}},"$id":"#/definitions/TaskWithContext"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["name","type","status","created","modified","schema"],"x-embed":"","properties":{"artifacts":{"items":{"$ref":"#/definitions/Artifact"},"type":"array"},"comments":{"items":{"$ref":"#/definitions/Comment"},"type":"array"},"created":{"format":"date-time","type":"string"},"details":{"type":"object"},"files":{"items":{"$ref":"#/definitions/File"},"type":"array"},"modified":{"format":"date-time","type":"string"},"name":{"type":"string"},"owner":{"type":"string"},"playbooks":{"type":"object","additionalProperties":{"$ref":"#/definitions/Playbook"}},"read":{"items":{"type":"string"},"type":"array"},"references":{"items":{"$ref":"#/definitions/Reference"},"type":"array"},"schema":{"type":"string"},"status":{"type":"string"},"type":{"type":"string"},"write":{"items":{"type":"string"},"type":"array"}},"$id":"#/definitions/Ticket"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["name","type","status"],"x-embed":"","properties":{"artifacts":{"items":{"$ref":"#/definitions/Artifact"},"type":"array"},"comments":{"items":{"$ref":"#/definitions/Comment"},"type":"array"},"created":{"format":"date-time","type":"string"},"details":{"type":"object"},"files":{"items":{"$ref":"#/definitions/File"},"type":"array"},"id":{"format":"int64","type":"integer"},"modified":{"format":"date-time","type":"string"},"name":{"type":"string"},"owner":{"type":"string"},"playbooks":{"items":{"$ref":"#/definitions/PlaybookTemplateForm"},"type":"array"},"read":{"items":{"type":"string"},"type":"array"},"references":{"items":{"$ref":"#/definitions/Reference"},"type":"array"},"schema":{"type":"string"},"status":{"type":"string"},"type":{"type":"string"},"write":{"items":{"type":"string"},"type":"array"}},"$id":"#/definitions/TicketForm"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["tickets","count"],"x-embed":"","properties":{"count":{"type":"number"},"tickets":{"items":{"$ref":"#/definitions/TicketSimpleResponse"},"type":"array"}},"$id":"#/definitions/TicketList"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["id","name","type","status","created","modified","schema"],"x-embed":"","properties":{"artifacts":{"items":{"$ref":"#/definitions/Artifact"},"type":"array"},"comments":{"items":{"$ref":"#/definitions/Comment"},"type":"array"},"created":{"format":"date-time","type":"string"},"details":{"type":"object"},"files":{"items":{"$ref":"#/definitions/File"},"type":"array"},"id":{"format":"int64","type":"integer"},"modified":{"format":"date-time","type":"string"},"name":{"type":"string"},"owner":{"type":"string"},"playbooks":{"type":"object","additionalProperties":{"$ref":"#/definitions/PlaybookResponse"}},"read":{"items":{"type":"string"},"type":"array"},"references":{"items":{"$ref":"#/definitions/Reference"},"type":"array"},"schema":{"type":"string"},"status":{"type":"string"},"type":{"type":"string"},"write":{"items":{"type":"string"},"type":"array"}},"$id":"#/definitions/TicketResponse"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["id","name","type","status","created","modified","schema"],"x-embed":"","properties":{"artifacts":{"items":{"$ref":"#/definitions/Artifact"},"type":"array"},"comments":{"items":{"$ref":"#/definitions/Comment"},"type":"array"},"created":{"format":"date-time","type":"string"},"details":{"type":"object"},"files":{"items":{"$ref":"#/definitions/File"},"type":"array"},"id":{"format":"int64","type":"integer"},"modified":{"format":"date-time","type":"string"},"name":{"type":"string"},"owner":{"type":"string"},"playbooks":{"type":"object","additionalProperties":{"$ref":"#/definitions/Playbook"}},"read":{"items":{"type":"string"},"type":"array"},"references":{"items":{"$ref":"#/definitions/Reference"},"type":"array"},"schema":{"type":"string"},"status":{"type":"string"},"type":{"type":"string"},"write":{"items":{"type":"string"},"type":"array"}},"$id":"#/definitions/TicketSimpleResponse"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["name","schema"],"x-embed":"","properties":{"name":{"type":"string"},"schema":{"type":"string"}},"$id":"#/definitions/TicketTemplate"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["name","schema"],"x-embed":"","properties":{"id":{"type":"string"},"name":{"type":"string"},"schema":{"type":"string"}},"$id":"#/definitions/TicketTemplateForm"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["id","name","schema"],"x-embed":"","properties":{"id":{"type":"string"},"name":{"type":"string"},"schema":{"type":"string"}},"$id":"#/definitions/TicketTemplateResponse"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["name","icon","default_template","default_playbooks"],"x-embed":"","properties":{"default_groups":{"items":{"type":"string"},"type":"array"},"default_playbooks":{"items":{"type":"string"},"type":"array"},"default_template":{"type":"string"},"icon":{"type":"string"},"name":{"type":"string"}},"$id":"#/definitions/TicketType"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["name","icon","default_template","default_playbooks"],"x-embed":"","properties":{"default_groups":{"items":{"type":"string"},"type":"array"},"default_playbooks":{"items":{"type":"string"},"type":"array"},"default_template":{"type":"string"},"icon":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"}},"$id":"#/definitions/TicketTypeForm"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["id","name","icon","default_template","default_playbooks"],"x-embed":"","properties":{"default_groups":{"items":{"type":"string"},"type":"array"},"default_playbooks":{"items":{"type":"string"},"type":"array"},"default_template":{"type":"string"},"icon":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"}},"$id":"#/definitions/TicketTypeResponse"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["id","name","type","status","created","modified","schema"],"x-embed":"","properties":{"artifacts":{"items":{"$ref":"#/definitions/Artifact"},"type":"array"},"comments":{"items":{"$ref":"#/definitions/Comment"},"type":"array"},"created":{"format":"date-time","type":"string"},"details":{"type":"object"},"files":{"items":{"$ref":"#/definitions/File"},"type":"array"},"id":{"format":"int64","type":"integer"},"logs":{"items":{"$ref":"#/definitions/LogEntry"},"type":"array"},"modified":{"format":"date-time","type":"string"},"name":{"type":"string"},"owner":{"type":"string"},"playbooks":{"type":"object","additionalProperties":{"$ref":"#/definitions/PlaybookResponse"}},"read":{"items":{"type":"string"},"type":"array"},"references":{"items":{"$ref":"#/definitions/Reference"},"type":"array"},"schema":{"type":"string"},"status":{"type":"string"},"tickets":{"items":{"$ref":"#/definitions/TicketSimpleResponse"},"type":"array"},"type":{"type":"string"},"write":{"items":{"type":"string"},"type":"array"}},"$id":"#/definitions/TicketWithTickets"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["id","name","icon"],"x-embed":"","properties":{"color":{"title":"Color","type":"string","enum":["error","info","success","warning"]},"icon":{"title":"Icon (https://materialdesignicons.com)","type":"string"},"id":{"title":"ID","type":"string"},"name":{"title":"Name","type":"string"}},"$id":"#/definitions/Type"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["blocked","apikey","roles"],"x-embed":"","properties":{"apikey":{"type":"boolean"},"blocked":{"type":"boolean"},"roles":{"items":{"type":"string"},"type":"array"},"sha256":{"type":"string"}},"$id":"#/definitions/User"}`), - gojsonschema.NewStringLoader(`{"type":"object","x-embed":"","properties":{"email":{"type":"string"},"image":{"type":"string"},"name":{"type":"string"},"timeformat":{"title":"Time Format (https://moment.github.io/luxon/docs/manual/formatting.html#table-of-tokens)","type":"string"}},"$id":"#/definitions/UserData"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["id"],"x-embed":"","properties":{"email":{"type":"string"},"id":{"type":"string"},"image":{"type":"string"},"name":{"type":"string"},"timeformat":{"title":"Time Format (https://moment.github.io/luxon/docs/manual/formatting.html#table-of-tokens)","type":"string"}},"$id":"#/definitions/UserDataResponse"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["id","blocked","roles","apikey"],"x-embed":"","properties":{"apikey":{"type":"boolean"},"blocked":{"type":"boolean"},"id":{"type":"string"},"roles":{"items":{"type":"string"},"type":"array"}},"$id":"#/definitions/UserForm"}`), - gojsonschema.NewStringLoader(`{"type":"object","required":["id","blocked","roles","apikey"],"x-embed":"","properties":{"apikey":{"type":"boolean"},"blocked":{"type":"boolean"},"id":{"type":"string"},"roles":{"items":{"type":"string"},"type":"array"}},"$id":"#/definitions/UserResponse"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"enrichments":{"type":"object","additionalProperties":{"$ref":"#/definitions/Enrichment"}},"name":{"type":"string"},"status":{"type":"string"},"type":{"type":"string"}},"required":["name"],"$id":"#/definitions/Artifact"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"artifact":{"type":"string"},"ticket_id":{"format":"int64","type":"integer"}},"required":["ticket_id","artifact"],"$id":"#/definitions/ArtifactOrigin"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"image":{"type":"string"},"schema":{"type":"string"},"script":{"type":"string"},"type":{"items":{"type":"string","enum":["artifact","playbook","global"]},"type":"array"}},"required":["image","script","type"],"$id":"#/definitions/Automation"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"id":{"type":"string"},"image":{"type":"string"},"schema":{"type":"string"},"script":{"type":"string"},"type":{"items":{"type":"string","enum":["artifact","playbook","global"]},"type":"array"}},"required":["id","image","script","type"],"$id":"#/definitions/AutomationForm"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"id":{"type":"string"},"image":{"type":"string"},"schema":{"type":"string"},"script":{"type":"string"},"type":{"items":{"type":"string","enum":["artifact","playbook","global"]},"type":"array"}},"required":["id","image","script","type"],"$id":"#/definitions/AutomationResponse"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"created":{"format":"date-time","type":"string"},"creator":{"type":"string"},"message":{"type":"string"}},"required":["creator","created","message"],"$id":"#/definitions/Comment"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"created":{"format":"date-time","type":"string"},"creator":{"type":"string"},"message":{"type":"string"}},"required":["message"],"$id":"#/definitions/CommentForm"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"artifact":{"$ref":"#/definitions/Artifact"},"playbook":{"$ref":"#/definitions/PlaybookResponse"},"task":{"$ref":"#/definitions/TaskResponse"},"ticket":{"$ref":"#/definitions/TicketResponse"}},"$id":"#/definitions/Context"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"created":{"format":"date-time","type":"string"},"data":{"type":"object"},"name":{"type":"string"}},"required":["name","data","created"],"$id":"#/definitions/Enrichment"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"data":{"type":"object"},"name":{"type":"string"}},"required":["name","data"],"$id":"#/definitions/EnrichmentForm"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"$id":"#/definitions/File"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"automation":{"type":"string"},"container":{"type":"string"},"log":{"type":"string"},"origin":{"$ref":"#/definitions/Origin"},"output":{"type":"object"},"payload":{},"running":{"type":"boolean"},"status":{"type":"string"}},"required":["automation","running","status"],"$id":"#/definitions/Job"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"automation":{"type":"string"},"origin":{"$ref":"#/definitions/Origin"},"payload":{}},"required":["automation"],"$id":"#/definitions/JobForm"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"automation":{"type":"string"},"container":{"type":"string"},"id":{"type":"string"},"log":{"type":"string"},"origin":{"$ref":"#/definitions/Origin"},"output":{"type":"object"},"payload":{},"status":{"type":"string"}},"required":["id","automation","status"],"$id":"#/definitions/JobResponse"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"container":{"type":"string"},"log":{"type":"string"},"output":{"type":"object"},"running":{"type":"boolean"},"status":{"type":"string"}},"required":["running","status"],"$id":"#/definitions/JobUpdate"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"created":{"format":"date-time","type":"string"},"creator":{"type":"string"},"message":{"type":"string"},"reference":{"type":"string"},"type":{"type":"string"}},"required":["type","reference","creator","created","message"],"$id":"#/definitions/LogEntry"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"context":{"$ref":"#/definitions/Context"},"payload":{},"secrets":{"type":"object","additionalProperties":{"type":"string"}}},"$id":"#/definitions/Message"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"blocked":{"type":"boolean"},"id":{"type":"string"},"roles":{"items":{"type":"string"},"type":"array"},"secret":{"type":"string"}},"required":["id","blocked","roles"],"$id":"#/definitions/NewUserResponse"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"artifact_origin":{"$ref":"#/definitions/ArtifactOrigin"},"task_origin":{"$ref":"#/definitions/TaskOrigin"}},"$id":"#/definitions/Origin"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"name":{"type":"string"},"tasks":{"type":"object","additionalProperties":{"$ref":"#/definitions/Task"}}},"required":["name","tasks"],"$id":"#/definitions/Playbook"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"name":{"type":"string"},"tasks":{"type":"object","additionalProperties":{"$ref":"#/definitions/TaskResponse"}}},"required":["name","tasks"],"$id":"#/definitions/PlaybookResponse"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"name":{"type":"string"},"yaml":{"type":"string"}},"required":["name","yaml"],"$id":"#/definitions/PlaybookTemplate"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"id":{"type":"string"},"yaml":{"type":"string"}},"required":["yaml"],"$id":"#/definitions/PlaybookTemplateForm"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"yaml":{"type":"string"}},"required":["id","name","yaml"],"$id":"#/definitions/PlaybookTemplateResponse"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"href":{"type":"string"},"name":{"type":"string"}},"required":["name","href"],"$id":"#/definitions/Reference"}`), + gojsonschema.NewStringLoader(`{"items":{"$ref":"#/definitions/Reference"},"type":"array","$id":"#/definitions/ReferenceArray"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"artifactStates":{"title":"Artifact States","items":{"$ref":"#/definitions/Type"},"type":"array"},"roles":{"title":"Roles","items":{"type":"string"},"type":"array"},"ticketTypes":{"title":"Ticket Types","items":{"$ref":"#/definitions/TicketTypeResponse"},"type":"array"},"tier":{"title":"Tier","type":"string","enum":["community","enterprise"]},"timeformat":{"title":"Time Format","type":"string"},"version":{"title":"Version","type":"string"}},"required":["version","tier","timeformat","ticketTypes","artifactStates"],"$id":"#/definitions/Settings"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"open_tickets_per_user":{"type":"object","additionalProperties":{"type":"integer"}},"tickets_per_type":{"type":"object","additionalProperties":{"type":"integer"}},"tickets_per_week":{"type":"object","additionalProperties":{"type":"integer"}},"unassigned":{"type":"integer"}},"required":["unassigned","open_tickets_per_user","tickets_per_week","tickets_per_type"],"$id":"#/definitions/Statistics"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"automation":{"type":"string"},"closed":{"format":"date-time","type":"string"},"created":{"format":"date-time","type":"string"},"data":{"type":"object"},"done":{"type":"boolean"},"join":{"type":"boolean"},"name":{"type":"string"},"next":{"type":"object","additionalProperties":{"type":"string"}},"owner":{"type":"string"},"payload":{"type":"object","additionalProperties":{"type":"string"}},"schema":{"type":"object"},"type":{"type":"string","enum":["task","input","automation"]}},"required":["name","type","done","created"],"$id":"#/definitions/Task"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"playbook_id":{"type":"string"},"task_id":{"type":"string"},"ticket_id":{"format":"int64","type":"integer"}},"required":["ticket_id","playbook_id","task_id"],"$id":"#/definitions/TaskOrigin"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"active":{"type":"boolean"},"automation":{"type":"string"},"closed":{"format":"date-time","type":"string"},"created":{"format":"date-time","type":"string"},"data":{"type":"object"},"done":{"type":"boolean"},"join":{"type":"boolean"},"name":{"type":"string"},"next":{"type":"object","additionalProperties":{"type":"string"}},"order":{"format":"int64","type":"number"},"owner":{"type":"string"},"payload":{"type":"object","additionalProperties":{"type":"string"}},"schema":{"type":"object"},"type":{"type":"string","enum":["task","input","automation"]}},"required":["name","type","done","created","order","active"],"$id":"#/definitions/TaskResponse"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"playbook_id":{"type":"string"},"playbook_name":{"type":"string"},"task":{"$ref":"#/definitions/TaskResponse"},"task_id":{"type":"string"},"ticket_id":{"format":"int64","type":"number"},"ticket_name":{"type":"string"}},"required":["ticket_id","ticket_name","playbook_id","playbook_name","task_id","task"],"$id":"#/definitions/TaskWithContext"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"artifacts":{"items":{"$ref":"#/definitions/Artifact"},"type":"array"},"comments":{"items":{"$ref":"#/definitions/Comment"},"type":"array"},"created":{"format":"date-time","type":"string"},"details":{"type":"object"},"files":{"items":{"$ref":"#/definitions/File"},"type":"array"},"modified":{"format":"date-time","type":"string"},"name":{"type":"string"},"owner":{"type":"string"},"playbooks":{"type":"object","additionalProperties":{"$ref":"#/definitions/Playbook"}},"read":{"items":{"type":"string"},"type":"array"},"references":{"items":{"$ref":"#/definitions/Reference"},"type":"array"},"schema":{"type":"string"},"status":{"type":"string"},"type":{"type":"string"},"write":{"items":{"type":"string"},"type":"array"}},"required":["name","type","status","created","modified","schema"],"$id":"#/definitions/Ticket"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"artifacts":{"items":{"$ref":"#/definitions/Artifact"},"type":"array"},"comments":{"items":{"$ref":"#/definitions/Comment"},"type":"array"},"created":{"format":"date-time","type":"string"},"details":{"type":"object"},"files":{"items":{"$ref":"#/definitions/File"},"type":"array"},"id":{"format":"int64","type":"integer"},"modified":{"format":"date-time","type":"string"},"name":{"type":"string"},"owner":{"type":"string"},"playbooks":{"items":{"$ref":"#/definitions/PlaybookTemplateForm"},"type":"array"},"read":{"items":{"type":"string"},"type":"array"},"references":{"items":{"$ref":"#/definitions/Reference"},"type":"array"},"schema":{"type":"string"},"status":{"type":"string"},"type":{"type":"string"},"write":{"items":{"type":"string"},"type":"array"}},"required":["name","type","status"],"$id":"#/definitions/TicketForm"}`), + gojsonschema.NewStringLoader(`{"items":{"$ref":"#/definitions/TicketForm"},"type":"array","$id":"#/definitions/TicketFormArray"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"count":{"type":"number"},"tickets":{"items":{"$ref":"#/definitions/TicketSimpleResponse"},"type":"array"}},"required":["tickets","count"],"$id":"#/definitions/TicketList"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"artifacts":{"items":{"$ref":"#/definitions/Artifact"},"type":"array"},"comments":{"items":{"$ref":"#/definitions/Comment"},"type":"array"},"created":{"format":"date-time","type":"string"},"details":{"type":"object"},"files":{"items":{"$ref":"#/definitions/File"},"type":"array"},"id":{"format":"int64","type":"integer"},"modified":{"format":"date-time","type":"string"},"name":{"type":"string"},"owner":{"type":"string"},"playbooks":{"type":"object","additionalProperties":{"$ref":"#/definitions/PlaybookResponse"}},"read":{"items":{"type":"string"},"type":"array"},"references":{"items":{"$ref":"#/definitions/Reference"},"type":"array"},"schema":{"type":"string"},"status":{"type":"string"},"type":{"type":"string"},"write":{"items":{"type":"string"},"type":"array"}},"required":["id","name","type","status","created","modified","schema"],"$id":"#/definitions/TicketResponse"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"artifacts":{"items":{"$ref":"#/definitions/Artifact"},"type":"array"},"comments":{"items":{"$ref":"#/definitions/Comment"},"type":"array"},"created":{"format":"date-time","type":"string"},"details":{"type":"object"},"files":{"items":{"$ref":"#/definitions/File"},"type":"array"},"id":{"format":"int64","type":"integer"},"modified":{"format":"date-time","type":"string"},"name":{"type":"string"},"owner":{"type":"string"},"playbooks":{"type":"object","additionalProperties":{"$ref":"#/definitions/Playbook"}},"read":{"items":{"type":"string"},"type":"array"},"references":{"items":{"$ref":"#/definitions/Reference"},"type":"array"},"schema":{"type":"string"},"status":{"type":"string"},"type":{"type":"string"},"write":{"items":{"type":"string"},"type":"array"}},"required":["id","name","type","status","created","modified","schema"],"$id":"#/definitions/TicketSimpleResponse"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"name":{"type":"string"},"schema":{"type":"string"}},"required":["name","schema"],"$id":"#/definitions/TicketTemplate"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"schema":{"type":"string"}},"required":["name","schema"],"$id":"#/definitions/TicketTemplateForm"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"schema":{"type":"string"}},"required":["id","name","schema"],"$id":"#/definitions/TicketTemplateResponse"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"default_groups":{"items":{"type":"string"},"type":"array"},"default_playbooks":{"items":{"type":"string"},"type":"array"},"default_template":{"type":"string"},"icon":{"type":"string"},"name":{"type":"string"}},"required":["name","icon","default_template","default_playbooks"],"$id":"#/definitions/TicketType"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"default_groups":{"items":{"type":"string"},"type":"array"},"default_playbooks":{"items":{"type":"string"},"type":"array"},"default_template":{"type":"string"},"icon":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"}},"required":["name","icon","default_template","default_playbooks"],"$id":"#/definitions/TicketTypeForm"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"default_groups":{"items":{"type":"string"},"type":"array"},"default_playbooks":{"items":{"type":"string"},"type":"array"},"default_template":{"type":"string"},"icon":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name","icon","default_template","default_playbooks"],"$id":"#/definitions/TicketTypeResponse"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"artifacts":{"items":{"$ref":"#/definitions/Artifact"},"type":"array"},"comments":{"items":{"$ref":"#/definitions/Comment"},"type":"array"},"created":{"format":"date-time","type":"string"},"details":{"type":"object"},"files":{"items":{"$ref":"#/definitions/File"},"type":"array"},"id":{"format":"int64","type":"integer"},"logs":{"items":{"$ref":"#/definitions/LogEntry"},"type":"array"},"modified":{"format":"date-time","type":"string"},"name":{"type":"string"},"owner":{"type":"string"},"playbooks":{"type":"object","additionalProperties":{"$ref":"#/definitions/PlaybookResponse"}},"read":{"items":{"type":"string"},"type":"array"},"references":{"items":{"$ref":"#/definitions/Reference"},"type":"array"},"schema":{"type":"string"},"status":{"type":"string"},"tickets":{"items":{"$ref":"#/definitions/TicketSimpleResponse"},"type":"array"},"type":{"type":"string"},"write":{"items":{"type":"string"},"type":"array"}},"required":["id","name","type","status","created","modified","schema"],"$id":"#/definitions/TicketWithTickets"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"color":{"title":"Color","type":"string","enum":["error","info","success","warning"]},"icon":{"title":"Icon (https://materialdesignicons.com)","type":"string"},"id":{"title":"ID","type":"string"},"name":{"title":"Name","type":"string"}},"required":["id","name","icon"],"$id":"#/definitions/Type"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"apikey":{"type":"boolean"},"blocked":{"type":"boolean"},"roles":{"items":{"type":"string"},"type":"array"},"sha256":{"type":"string"}},"required":["blocked","apikey","roles"],"$id":"#/definitions/User"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"email":{"type":"string"},"image":{"type":"string"},"name":{"type":"string"},"timeformat":{"title":"Time Format (https://moment.github.io/luxon/docs/manual/formatting.html#table-of-tokens)","type":"string"}},"$id":"#/definitions/UserData"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"email":{"type":"string"},"id":{"type":"string"},"image":{"type":"string"},"name":{"type":"string"},"timeformat":{"title":"Time Format (https://moment.github.io/luxon/docs/manual/formatting.html#table-of-tokens)","type":"string"}},"required":["id"],"$id":"#/definitions/UserDataResponse"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"apikey":{"type":"boolean"},"blocked":{"type":"boolean"},"id":{"type":"string"},"roles":{"items":{"type":"string"},"type":"array"}},"required":["id","blocked","roles","apikey"],"$id":"#/definitions/UserForm"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"apikey":{"type":"boolean"},"blocked":{"type":"boolean"},"id":{"type":"string"},"roles":{"items":{"type":"string"},"type":"array"}},"required":["id","blocked","roles","apikey"],"$id":"#/definitions/UserResponse"}`), ) if err != nil { panic(err) @@ -131,6 +133,7 @@ func init() { JobSchema = mustCompile(`#/definitions/Job`) JobFormSchema = mustCompile(`#/definitions/JobForm`) JobResponseSchema = mustCompile(`#/definitions/JobResponse`) + JobUpdateSchema = mustCompile(`#/definitions/JobUpdate`) LogEntrySchema = mustCompile(`#/definitions/LogEntry`) MessageSchema = mustCompile(`#/definitions/Message`) NewUserResponseSchema = mustCompile(`#/definitions/NewUserResponse`) @@ -141,15 +144,16 @@ func init() { PlaybookTemplateFormSchema = mustCompile(`#/definitions/PlaybookTemplateForm`) PlaybookTemplateResponseSchema = mustCompile(`#/definitions/PlaybookTemplateResponse`) ReferenceSchema = mustCompile(`#/definitions/Reference`) + ReferenceArraySchema = mustCompile(`#/definitions/ReferenceArray`) SettingsSchema = mustCompile(`#/definitions/Settings`) StatisticsSchema = mustCompile(`#/definitions/Statistics`) TaskSchema = mustCompile(`#/definitions/Task`) - TaskFormSchema = mustCompile(`#/definitions/TaskForm`) TaskOriginSchema = mustCompile(`#/definitions/TaskOrigin`) TaskResponseSchema = mustCompile(`#/definitions/TaskResponse`) TaskWithContextSchema = mustCompile(`#/definitions/TaskWithContext`) TicketSchema = mustCompile(`#/definitions/Ticket`) TicketFormSchema = mustCompile(`#/definitions/TicketForm`) + TicketFormArraySchema = mustCompile(`#/definitions/TicketFormArray`) TicketListSchema = mustCompile(`#/definitions/TicketList`) TicketResponseSchema = mustCompile(`#/definitions/TicketResponse`) TicketSimpleResponseSchema = mustCompile(`#/definitions/TicketSimpleResponse`) @@ -266,6 +270,14 @@ type JobResponse struct { Status string `json:"status"` } +type JobUpdate struct { + Container *string `json:"container,omitempty"` + Log *string `json:"log,omitempty"` + Output map[string]interface{} `json:"output,omitempty"` + Running bool `json:"running"` + Status string `json:"status"` +} + type LogEntry struct { Created time.Time `json:"created"` Creator string `json:"creator"` @@ -323,6 +335,8 @@ type Reference struct { Name string `json:"name"` } +type ReferenceArray []*Reference + type Settings struct { ArtifactStates []*Type `json:"artifactStates"` Roles []string `json:"roles,omitempty"` @@ -354,21 +368,6 @@ type Task struct { Type string `json:"type"` } -type TaskForm struct { - Automation *string `json:"automation,omitempty"` - Closed *time.Time `json:"closed,omitempty"` - Created *time.Time `json:"created,omitempty"` - Data map[string]interface{} `json:"data,omitempty"` - Done *bool `json:"done,omitempty"` - Join *bool `json:"join,omitempty"` - Name string `json:"name"` - Next map[string]string `json:"next,omitempty"` - Owner *string `json:"owner,omitempty"` - Payload map[string]string `json:"payload,omitempty"` - Schema map[string]interface{} `json:"schema,omitempty"` - Type string `json:"type"` -} - type TaskOrigin struct { PlaybookId string `json:"playbook_id"` TaskId string `json:"task_id"` @@ -438,6 +437,8 @@ type TicketForm struct { Write []string `json:"write,omitempty"` } +type TicketFormArray []*TicketForm + type TicketList struct { Count int `json:"count"` Tickets []*TicketSimpleResponse `json:"tickets"` @@ -596,22 +597,6 @@ func mustCompile(uri string) *gojsonschema.Schema { return s } -func validate(s *gojsonschema.Schema, b []byte) error { - res, err := s.Validate(gojsonschema.NewStringLoader(string(b))) - if err != nil { - return err - } - - if len(res.Errors()) > 0 { - var l []string - for _, e := range res.Errors() { - l = append(l, e.String()) - } - return fmt.Errorf("validation failed: %v", strings.Join(l, ", ")) - } - return nil -} - const ( SettingsTierCommunity = "community" @@ -623,12 +608,6 @@ const ( TaskTypeAutomation = "automation" - TaskFormTypeTask = "task" - - TaskFormTypeInput = "input" - - TaskFormTypeAutomation = "automation" - TaskResponseTypeTask = "task" TaskResponseTypeInput = "input" diff --git a/service/job.go b/service/job.go index 1ec0558..272e383 100644 --- a/service/job.go +++ b/service/job.go @@ -38,7 +38,7 @@ func (s *Service) GetJob(ctx context.Context, id string) (*model.JobResponse, er return s.database.JobGet(ctx, id) } -func (s *Service) UpdateJob(ctx context.Context, id string, job *model.Job) (doc *model.JobResponse, err error) { +func (s *Service) UpdateJob(ctx context.Context, id string, job *model.JobUpdate) (doc *model.JobResponse, err error) { defer s.publishRequest(ctx, err, "UpdateJob", jobResponseID(doc)) return s.database.JobUpdate(ctx, id, job) } diff --git a/service/ticket.go b/service/ticket.go index 12152d2..d7f56a5 100644 --- a/service/ticket.go +++ b/service/ticket.go @@ -2,12 +2,15 @@ package service import ( "context" + "errors" "fmt" + "net/http" "github.com/arangodb/go-driver" "github.com/google/uuid" "github.com/SecurityBrewery/catalyst/database" + "github.com/SecurityBrewery/catalyst/generated/api" "github.com/SecurityBrewery/catalyst/generated/model" ) @@ -63,8 +66,11 @@ func (s *Service) CreateTicket(ctx context.Context, form *model.TicketForm) (doc return nil, err } -func (s *Service) CreateTicketBatch(ctx context.Context, forms []*model.TicketForm) error { - createdTickets, err := s.database.TicketBatchCreate(ctx, forms) +func (s *Service) CreateTicketBatch(ctx context.Context, ticketFormArray *model.TicketFormArray) error { + if ticketFormArray == nil { + return &api.HTTPError{Status: http.StatusUnprocessableEntity, Internal: errors.New("no tickets given")} + } + createdTickets, err := s.database.TicketBatchCreate(ctx, *ticketFormArray) defer s.publishRequest(ctx, err, "CreateTicket", ticketIDs(createdTickets)) return err } @@ -140,9 +146,14 @@ func (s *Service) RemoveTicketPlaybook(ctx context.Context, i int64, s2 string) return s.database.RemoveTicketPlaybook(ctx, i, s2) } -func (s *Service) SetTask(ctx context.Context, i int64, s3 string, s2 string, task *model.Task) (doc *model.TicketWithTickets, err error) { +func (s *Service) SetTaskData(ctx context.Context, i int64, s3 string, s2 string, data map[string]interface{}) (doc *model.TicketWithTickets, err error) { defer s.publishRequest(ctx, err, "SetTask", ticketWithTicketsID(doc)) - return s.database.TaskUpdate(ctx, i, s3, s2, task) + return s.database.TaskUpdateData(ctx, i, s3, s2, data) +} + +func (s *Service) SetTaskOwner(ctx context.Context, i int64, s3 string, s2 string, owner string) (doc *model.TicketWithTickets, err error) { + defer s.publishRequest(ctx, err, "SetTask", ticketWithTicketsID(doc)) + return s.database.TaskUpdateOwner(ctx, i, s3, s2, owner) } func (s *Service) CompleteTask(ctx context.Context, i int64, s3 string, s2 string, m map[string]interface{}) (doc *model.TicketWithTickets, err error) { @@ -155,9 +166,12 @@ func (s *Service) RunTask(ctx context.Context, i int64, s3 string, s2 string) (e return s.database.TaskRun(ctx, i, s3, s2) } -func (s *Service) SetReferences(ctx context.Context, i int64, references []*model.Reference) (doc *model.TicketWithTickets, err error) { +func (s *Service) SetReferences(ctx context.Context, i int64, references *model.ReferenceArray) (doc *model.TicketWithTickets, err error) { + if references == nil { + return nil, &api.HTTPError{Status: http.StatusUnprocessableEntity, Internal: errors.New("no references given")} + } defer s.publishRequest(ctx, err, "SetReferences", ticketID(i)) - return s.database.SetReferences(ctx, i, references) + return s.database.SetReferences(ctx, i, *references) } func (s *Service) SetSchema(ctx context.Context, i int64, s2 string) (doc *model.TicketWithTickets, err error) { diff --git a/test/backup_test.go b/test/backup_test.go new file mode 100644 index 0000000..adfb2ab --- /dev/null +++ b/test/backup_test.go @@ -0,0 +1,235 @@ +package test + +import ( + "archive/zip" + "bytes" + "context" + "encoding/json" + "io" + "log" + "mime/multipart" + "net/http" + "net/http/httptest" + "regexp" + "testing" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/service/s3" + "github.com/aws/aws-sdk-go/service/s3/s3manager" + "github.com/stretchr/testify/assert" + + "github.com/SecurityBrewery/catalyst" + "github.com/SecurityBrewery/catalyst/generated/model" + "github.com/SecurityBrewery/catalyst/pointer" +) + +func TestBackupAndRestore(t *testing.T) { + log.SetFlags(log.LstdFlags | log.Lshortfile) + + type want struct { + status int + } + tests := []struct { + name string + want want + }{ + {name: "Backup", want: want{status: http.StatusOK}}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + ctx, _, server, err := Catalyst(t) + if err != nil { + t.Fatal(err) + } + + if err := SetupTestData(ctx, server.DB); err != nil { + t.Fatal(err) + } + + createFile(ctx, server) + + zipB := assertBackup(t, server) + + assertZipFile(t, readZipFile(t, zipB)) + + clearAllDatabases(server) + _, err = server.DB.UserCreateSetupAPIKey(ctx, "test") + if err != nil { + log.Fatal(err) + } + + deleteAllBuckets(t, server) + + assertRestore(t, zipB, server) + + assertTicketExists(t, server) + + assertFileExists(t, server) + }) + } +} + +func assertBackup(t *testing.T, server *catalyst.Server) []byte { + // setup request + req := httptest.NewRequest(http.MethodGet, "/api/backup/create", nil) + req.Header.Set("PRIVATE-TOKEN", "test") + + // run request + backupRequestRecorder := httptest.NewRecorder() + server.Server.ServeHTTP(backupRequestRecorder, req) + backupResult := backupRequestRecorder.Result() + + // assert results + assert.Equal(t, http.StatusOK, backupResult.StatusCode) + + zipBuf := &bytes.Buffer{} + if _, err := io.Copy(zipBuf, backupResult.Body); err != nil { + t.Fatal(err) + } + assert.NoError(t, backupResult.Body.Close()) + + return zipBuf.Bytes() +} + +func assertZipFile(t *testing.T, r *zip.Reader) { + var names []string + for _, f := range r.File { + names = append(names, f.Name) + } + + if !includes(t, names, "minio/catalyst-8125/test.txt") { + t.Error("Minio file missing") + } + + for _, p := range []string{ + "arango/ENCRYPTION", "arango/automations_.*.data.json.gz", "arango/automations_.*.structure.json", "arango/dump.json", "arango/jobs_.*.data.json.gz", "arango/jobs_.*.structure.json", "arango/logs_.*.data.json.gz", "arango/logs_.*.structure.json", "arango/migrations_.*.data.json.gz", "arango/migrations_.*.structure.json", "arango/playbooks_.*.data.json.gz", "arango/playbooks_.*.structure.json", "arango/related_.*.data.json.gz", "arango/related_.*.structure.json", "arango/templates_.*.data.json.gz", "arango/templates_.*.structure.json", "arango/tickets_.*.data.json.gz", "arango/tickets_.*.structure.json", "arango/tickettypes_.*.data.json.gz", "arango/tickettypes_.*.structure.json", "arango/userdata_.*.data.json.gz", "arango/userdata_.*.structure.json", "arango/users_.*.data.json.gz", "arango/users_.*.structure.json", + } { + if !includes(t, names, p) { + t.Errorf("Arango file missing: %s", p) + } + } +} + +func clearAllDatabases(server *catalyst.Server) { + server.DB.Truncate(context.Background()) +} + +func deleteAllBuckets(t *testing.T, server *catalyst.Server) { + buckets, err := server.Storage.S3().ListBuckets(&s3.ListBucketsInput{}) + for _, bucket := range buckets.Buckets { + server.Storage.S3().DeleteBucket(&s3.DeleteBucketInput{ + Bucket: bucket.Name, + }) + } + + if err != nil { + t.Fatal(err) + } +} + +func assertRestore(t *testing.T, zipB []byte, server *catalyst.Server) { + bodyBuf := &bytes.Buffer{} + bodyWriter := multipart.NewWriter(bodyBuf) + fileWriter, err := bodyWriter.CreateFormFile("backup", "backup.zip") + if err != nil { + log.Fatal(err) + } + + _, err = fileWriter.Write(zipB) + if err != nil { + log.Fatal(err) + } + + assert.NoError(t, bodyWriter.Close()) + + req := httptest.NewRequest(http.MethodPost, "/api/backup/restore", bodyBuf) + req.Header.Set("PRIVATE-TOKEN", "test") + req.Header.Set("Content-Type", bodyWriter.FormDataContentType()) + + // run request + restoreRequestRecorder := httptest.NewRecorder() + server.Server.ServeHTTP(restoreRequestRecorder, req) + restoreResult := restoreRequestRecorder.Result() + + if !assert.Equal(t, http.StatusOK, restoreResult.StatusCode) { + b, _ := io.ReadAll(restoreResult.Body) + log.Println(string(b)) + t.FailNow() + } +} + +func createFile(ctx context.Context, server *catalyst.Server) { + buf := bytes.NewBufferString("test text") + + server.Storage.S3().CreateBucket(&s3.CreateBucketInput{Bucket: pointer.String("catalyst-8125")}) + + if _, err := server.Storage.Uploader().Upload(&s3manager.UploadInput{Body: buf, Bucket: pointer.String("catalyst-8125"), Key: pointer.String("test.txt")}); err != nil { + log.Fatal(err) + } + + if _, err := server.DB.AddFile(ctx, 8125, &model.File{Key: "test.txt", Name: "test.txt"}); err != nil { + log.Fatal(err) + } +} + +func assertTicketExists(t *testing.T, server *catalyst.Server) { + req := httptest.NewRequest(http.MethodGet, "/api/tickets/8125", nil) + req.Header.Set("PRIVATE-TOKEN", "test") + + // run request + backupRequestRecorder := httptest.NewRecorder() + server.Server.ServeHTTP(backupRequestRecorder, req) + backupResult := backupRequestRecorder.Result() + + // assert results + assert.Equal(t, http.StatusOK, backupResult.StatusCode) + + zipBuf := &bytes.Buffer{} + if _, err := io.Copy(zipBuf, backupResult.Body); err != nil { + t.Fatal(err) + } + assert.NoError(t, backupResult.Body.Close()) + + var ticket model.Ticket + assert.NoError(t, json.Unmarshal(zipBuf.Bytes(), &ticket)) + + assert.Equal(t, "phishing from selenafadel@von.com detected", ticket.Name) +} + +func assertFileExists(t *testing.T, server *catalyst.Server) { + obj, err := server.Storage.S3().GetObject(&s3.GetObjectInput{ + Bucket: aws.String("catalyst-8125"), + Key: aws.String("test.txt"), + }) + assert.NoError(t, err) + + b, err := io.ReadAll(obj.Body) + assert.NoError(t, err) + + assert.Equal(t, "test text", string(b)) +} + +func includes(t *testing.T, names []string, s string) bool { + for _, name := range names { + match, err := regexp.MatchString(s, name) + if err != nil { + t.Fatal(err) + } + + if match { + return true + } + } + return false +} + +func readZipFile(t *testing.T, b []byte) *zip.Reader { + buf := bytes.NewReader(b) + + zr, err := zip.NewReader(buf, int64(buf.Len())) + if err != nil { + t.Fatal(string(b), err) + } + + return zr +} diff --git a/test/job_test.go b/test/job_test.go new file mode 100644 index 0000000..162b2bc --- /dev/null +++ b/test/job_test.go @@ -0,0 +1,49 @@ +package test + +import ( + "bytes" + "encoding/json" + "net/http" + "net/http/httptest" + "testing" + + "github.com/SecurityBrewery/catalyst/generated/model" +) + +func TestJob(t *testing.T) { + _, _, _, _, _, _, _, server, cleanup, err := Server(t) + if err != nil { + t.Fatal(err) + } + defer cleanup() + + // server.ConfigureRoutes() + w := httptest.NewRecorder() + + // setup request + var req *http.Request + b, err := json.Marshal(model.JobForm{ + Automation: "hash.sha1", + Origin: nil, + Payload: nil, + }) + if err != nil { + t.Fatal(err) + } + + req = httptest.NewRequest(http.MethodPost, "/jobs", bytes.NewBuffer(b)) + req.Header.Set("Content-Type", "application/json") + + // run request + server.ServeHTTP(w, req) + + result := w.Result() + + // assert results + if result.StatusCode != http.StatusNoContent { + t.Fatalf("Status got = %v, want %v", result.Status, http.StatusNoContent) + } + // if tt.want.status != http.StatusNoContent { + // jsonEqual(t, result.Body, tt.want.body) + // } +} diff --git a/test/server_test.go b/test/server_test.go index bdbee81..93f89e1 100644 --- a/test/server_test.go +++ b/test/server_test.go @@ -1,31 +1,20 @@ package test import ( - "archive/zip" "bytes" - "context" "encoding/json" "io" - "log" - "mime/multipart" "net/http" "net/http/httptest" - "regexp" "strings" "testing" "time" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/s3" - "github.com/aws/aws-sdk-go/service/s3/s3manager" "github.com/stretchr/testify/assert" "github.com/tidwall/gjson" "github.com/tidwall/sjson" - "github.com/SecurityBrewery/catalyst" "github.com/SecurityBrewery/catalyst/generated/api" - "github.com/SecurityBrewery/catalyst/generated/model" - "github.com/SecurityBrewery/catalyst/pointer" ctime "github.com/SecurityBrewery/catalyst/time" ) @@ -75,7 +64,7 @@ func TestServer(t *testing.T) { if result.StatusCode != tt.Want.Status { msg, _ := io.ReadAll(result.Body) - t.Fatalf("Status got = %v, want %v: %s", result.Status, tt.Want.Status, msg) + t.Fatalf("Status got = %v (%s), want %v", result.Status, msg, tt.Want.Status) } if tt.Want.Status != http.StatusNoContent { jsonEqual(t, result.Body, tt.Want.Body) @@ -84,276 +73,6 @@ func TestServer(t *testing.T) { } } -func TestService(t *testing.T) { - type args struct { - method string - url string - data interface{} - } - type want struct { - status int - body interface{} - } - tests := []struct { - name string - args args - want want - }{ - {name: "GetUser not existing", args: args{method: http.MethodGet, url: "/users/123"}, want: want{status: http.StatusNotFound, body: map[string]string{"error": "document not found"}}}, - {name: "ListUsers", args: args{method: http.MethodGet, url: "/users"}, want: want{status: http.StatusOK}}, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - _, _, _, _, _, _, _, server, cleanup, err := Server(t) - if err != nil { - t.Fatal(err) - } - defer cleanup() - - // server.ConfigureRoutes() - w := httptest.NewRecorder() - - // setup request - var req *http.Request - if tt.args.data != nil { - b, err := json.Marshal(tt.args.data) - if err != nil { - t.Fatal(err) - } - - req = httptest.NewRequest(tt.args.method, tt.args.url, bytes.NewBuffer(b)) - req.Header.Set("Content-Type", "application/json") - } else { - req = httptest.NewRequest(tt.args.method, tt.args.url, nil) - } - - // run request - server.ServeHTTP(w, req) - - result := w.Result() - - // assert results - if result.StatusCode != tt.want.status { - t.Fatalf("Status got = %v, want %v", result.Status, tt.want.status) - } - if tt.want.status != http.StatusNoContent { - jsonEqual(t, result.Body, tt.want.body) - } - }) - } -} - -func TestBackupAndRestore(t *testing.T) { - log.SetFlags(log.LstdFlags | log.Lshortfile) - - type want struct { - status int - } - tests := []struct { - name string - want want - }{ - {name: "Backup", want: want{status: http.StatusOK}}, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - ctx, _, server, err := Catalyst(t) - if err != nil { - t.Fatal(err) - } - - if err := SetupTestData(ctx, server.DB); err != nil { - t.Fatal(err) - } - - createFile(ctx, server) - - zipB := assertBackup(t, server) - - assertZipFile(t, readZipFile(t, zipB)) - - clearAllDatabases(server) - _, err = server.DB.UserCreateSetupAPIKey(ctx, "test") - if err != nil { - log.Fatal(err) - } - - deleteAllBuckets(t, server) - - assertRestore(t, zipB, server) - - assertTicketExists(t, server) - - assertFileExists(t, server) - }) - } -} - -func assertBackup(t *testing.T, server *catalyst.Server) []byte { - // setup request - req := httptest.NewRequest(http.MethodGet, "/api/backup/create", nil) - req.Header.Set("PRIVATE-TOKEN", "test") - - // run request - backupRequestRecorder := httptest.NewRecorder() - server.Server.ServeHTTP(backupRequestRecorder, req) - backupResult := backupRequestRecorder.Result() - - // assert results - assert.Equal(t, http.StatusOK, backupResult.StatusCode) - - zipBuf := &bytes.Buffer{} - if _, err := io.Copy(zipBuf, backupResult.Body); err != nil { - t.Fatal(err) - } - assert.NoError(t, backupResult.Body.Close()) - - return zipBuf.Bytes() -} - -func assertZipFile(t *testing.T, r *zip.Reader) { - var names []string - for _, f := range r.File { - names = append(names, f.Name) - } - - if !includes(t, names, "minio/catalyst-8125/test.txt") { - t.Error("Minio file missing") - } - - for _, p := range []string{ - "arango/ENCRYPTION", "arango/automations_.*.data.json.gz", "arango/automations_.*.structure.json", "arango/dump.json", "arango/jobs_.*.data.json.gz", "arango/jobs_.*.structure.json", "arango/logs_.*.data.json.gz", "arango/logs_.*.structure.json", "arango/migrations_.*.data.json.gz", "arango/migrations_.*.structure.json", "arango/playbooks_.*.data.json.gz", "arango/playbooks_.*.structure.json", "arango/related_.*.data.json.gz", "arango/related_.*.structure.json", "arango/templates_.*.data.json.gz", "arango/templates_.*.structure.json", "arango/tickets_.*.data.json.gz", "arango/tickets_.*.structure.json", "arango/tickettypes_.*.data.json.gz", "arango/tickettypes_.*.structure.json", "arango/userdata_.*.data.json.gz", "arango/userdata_.*.structure.json", "arango/users_.*.data.json.gz", "arango/users_.*.structure.json", - } { - if !includes(t, names, p) { - t.Errorf("Arango file missing: %s", p) - } - } -} - -func clearAllDatabases(server *catalyst.Server) { - server.DB.Truncate(context.Background()) -} - -func deleteAllBuckets(t *testing.T, server *catalyst.Server) { - buckets, err := server.Storage.S3().ListBuckets(&s3.ListBucketsInput{}) - for _, bucket := range buckets.Buckets { - server.Storage.S3().DeleteBucket(&s3.DeleteBucketInput{ - Bucket: bucket.Name, - }) - } - - if err != nil { - t.Fatal(err) - } -} - -func assertRestore(t *testing.T, zipB []byte, server *catalyst.Server) { - bodyBuf := &bytes.Buffer{} - bodyWriter := multipart.NewWriter(bodyBuf) - fileWriter, err := bodyWriter.CreateFormFile("backup", "backup.zip") - if err != nil { - log.Fatal(err) - } - - _, err = fileWriter.Write(zipB) - if err != nil { - log.Fatal(err) - } - - assert.NoError(t, bodyWriter.Close()) - - req := httptest.NewRequest(http.MethodPost, "/api/backup/restore", bodyBuf) - req.Header.Set("PRIVATE-TOKEN", "test") - req.Header.Set("Content-Type", bodyWriter.FormDataContentType()) - - // run request - restoreRequestRecorder := httptest.NewRecorder() - server.Server.ServeHTTP(restoreRequestRecorder, req) - restoreResult := restoreRequestRecorder.Result() - - if !assert.Equal(t, http.StatusOK, restoreResult.StatusCode) { - b, _ := io.ReadAll(restoreResult.Body) - log.Println(string(b)) - t.FailNow() - } -} - -func createFile(ctx context.Context, server *catalyst.Server) { - buf := bytes.NewBufferString("test text") - - server.Storage.S3().CreateBucket(&s3.CreateBucketInput{Bucket: pointer.String("catalyst-8125")}) - - if _, err := server.Storage.Uploader().Upload(&s3manager.UploadInput{Body: buf, Bucket: pointer.String("catalyst-8125"), Key: pointer.String("test.txt")}); err != nil { - log.Fatal(err) - } - - if _, err := server.DB.AddFile(ctx, 8125, &model.File{Key: "test.txt", Name: "test.txt"}); err != nil { - log.Fatal(err) - } -} - -func assertTicketExists(t *testing.T, server *catalyst.Server) { - req := httptest.NewRequest(http.MethodGet, "/api/tickets/8125", nil) - req.Header.Set("PRIVATE-TOKEN", "test") - - // run request - backupRequestRecorder := httptest.NewRecorder() - server.Server.ServeHTTP(backupRequestRecorder, req) - backupResult := backupRequestRecorder.Result() - - // assert results - assert.Equal(t, http.StatusOK, backupResult.StatusCode) - - zipBuf := &bytes.Buffer{} - if _, err := io.Copy(zipBuf, backupResult.Body); err != nil { - t.Fatal(err) - } - assert.NoError(t, backupResult.Body.Close()) - - var ticket model.Ticket - assert.NoError(t, json.Unmarshal(zipBuf.Bytes(), &ticket)) - - assert.Equal(t, "phishing from selenafadel@von.com detected", ticket.Name) -} - -func assertFileExists(t *testing.T, server *catalyst.Server) { - obj, err := server.Storage.S3().GetObject(&s3.GetObjectInput{ - Bucket: aws.String("catalyst-8125"), - Key: aws.String("test.txt"), - }) - assert.NoError(t, err) - - b, err := io.ReadAll(obj.Body) - assert.NoError(t, err) - - assert.Equal(t, "test text", string(b)) -} - -func includes(t *testing.T, names []string, s string) bool { - for _, name := range names { - match, err := regexp.MatchString(s, name) - if err != nil { - t.Fatal(err) - } - - if match { - return true - } - } - return false -} - -func readZipFile(t *testing.T, b []byte) *zip.Reader { - buf := bytes.NewReader(b) - - zr, err := zip.NewReader(buf, int64(buf.Len())) - if err != nil { - t.Fatal(string(b), err) - } - - return zr -} - func jsonEqual(t *testing.T, got io.Reader, want interface{}) { var gotObject, wantObject interface{} diff --git a/test/user_test.go b/test/user_test.go new file mode 100644 index 0000000..c843e45 --- /dev/null +++ b/test/user_test.go @@ -0,0 +1,68 @@ +package test + +import ( + "bytes" + "encoding/json" + "net/http" + "net/http/httptest" + "testing" +) + +func TestUser(t *testing.T) { + type args struct { + method string + url string + data interface{} + } + type want struct { + status int + body interface{} + } + tests := []struct { + name string + args args + want want + }{ + {name: "GetUser not existing", args: args{method: http.MethodGet, url: "/users/123"}, want: want{status: http.StatusNotFound, body: map[string]string{"error": "document not found"}}}, + {name: "ListUsers", args: args{method: http.MethodGet, url: "/users"}, want: want{status: http.StatusOK}}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + _, _, _, _, _, _, _, server, cleanup, err := Server(t) + if err != nil { + t.Fatal(err) + } + defer cleanup() + + // server.ConfigureRoutes() + w := httptest.NewRecorder() + + // setup request + var req *http.Request + if tt.args.data != nil { + b, err := json.Marshal(tt.args.data) + if err != nil { + t.Fatal(err) + } + + req = httptest.NewRequest(tt.args.method, tt.args.url, bytes.NewBuffer(b)) + req.Header.Set("Content-Type", "application/json") + } else { + req = httptest.NewRequest(tt.args.method, tt.args.url, nil) + } + + // run request + server.ServeHTTP(w, req) + + result := w.Result() + + // assert results + if result.StatusCode != tt.want.status { + t.Fatalf("Status got = %v, want %v", result.Status, tt.want.status) + } + if tt.want.status != http.StatusNoContent { + jsonEqual(t, result.Body, tt.want.body) + } + }) + } +} diff --git a/ui/src/client/api.ts b/ui/src/client/api.ts index 095375d..cea4dfd 100644 --- a/ui/src/client/api.ts +++ b/ui/src/client/api.ts @@ -14,7 +14,7 @@ import { Configuration } from './configuration'; -import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import globalAxios, { AxiosPromise, AxiosInstance, AxiosRequestConfig } from 'axios'; // Some imports not used depending on template conditions // @ts-ignore import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from './common'; @@ -32,25 +32,25 @@ export interface Artifact { * @type {{ [key: string]: Enrichment; }} * @memberof Artifact */ - enrichments?: { [key: string]: Enrichment; }; + 'enrichments'?: { [key: string]: Enrichment; }; /** * * @type {string} * @memberof Artifact */ - name: string; + 'name': string; /** * * @type {string} * @memberof Artifact */ - status?: string; + 'status'?: string; /** * * @type {string} * @memberof Artifact */ - type?: string; + 'type'?: string; } /** * @@ -63,13 +63,13 @@ export interface ArtifactOrigin { * @type {string} * @memberof ArtifactOrigin */ - artifact: string; + 'artifact': string; /** * * @type {number} * @memberof ArtifactOrigin */ - ticket_id: number; + 'ticket_id': number; } /** * @@ -82,36 +82,34 @@ export interface Automation { * @type {string} * @memberof Automation */ - image: string; + 'image': string; /** * * @type {string} * @memberof Automation */ - schema?: string; + 'schema'?: string; /** * * @type {string} * @memberof Automation */ - script: string; + 'script': string; /** * * @type {Array} * @memberof Automation */ - type: Array; + 'type': Array; } -/** - * @export - * @enum {string} - */ -export enum AutomationTypeEnum { - Artifact = 'artifact', - Playbook = 'playbook', - Global = 'global' -} +export const AutomationTypeEnum = { + Artifact: 'artifact', + Playbook: 'playbook', + Global: 'global' +} as const; + +export type AutomationTypeEnum = typeof AutomationTypeEnum[keyof typeof AutomationTypeEnum]; /** * @@ -124,42 +122,40 @@ export interface AutomationForm { * @type {string} * @memberof AutomationForm */ - id: string; + 'id': string; /** * * @type {string} * @memberof AutomationForm */ - image: string; + 'image': string; /** * * @type {string} * @memberof AutomationForm */ - schema?: string; + 'schema'?: string; /** * * @type {string} * @memberof AutomationForm */ - script: string; + 'script': string; /** * * @type {Array} * @memberof AutomationForm */ - type: Array; + 'type': Array; } -/** - * @export - * @enum {string} - */ -export enum AutomationFormTypeEnum { - Artifact = 'artifact', - Playbook = 'playbook', - Global = 'global' -} +export const AutomationFormTypeEnum = { + Artifact: 'artifact', + Playbook: 'playbook', + Global: 'global' +} as const; + +export type AutomationFormTypeEnum = typeof AutomationFormTypeEnum[keyof typeof AutomationFormTypeEnum]; /** * @@ -172,42 +168,40 @@ export interface AutomationResponse { * @type {string} * @memberof AutomationResponse */ - id: string; + 'id': string; /** * * @type {string} * @memberof AutomationResponse */ - image: string; + 'image': string; /** * * @type {string} * @memberof AutomationResponse */ - schema?: string; + 'schema'?: string; /** * * @type {string} * @memberof AutomationResponse */ - script: string; + 'script': string; /** * * @type {Array} * @memberof AutomationResponse */ - type: Array; + 'type': Array; } -/** - * @export - * @enum {string} - */ -export enum AutomationResponseTypeEnum { - Artifact = 'artifact', - Playbook = 'playbook', - Global = 'global' -} +export const AutomationResponseTypeEnum = { + Artifact: 'artifact', + Playbook: 'playbook', + Global: 'global' +} as const; + +export type AutomationResponseTypeEnum = typeof AutomationResponseTypeEnum[keyof typeof AutomationResponseTypeEnum]; /** * @@ -220,19 +214,19 @@ export interface Comment { * @type {string} * @memberof Comment */ - created: string; + 'created': string; /** * * @type {string} * @memberof Comment */ - creator: string; + 'creator': string; /** * * @type {string} * @memberof Comment */ - message: string; + 'message': string; } /** * @@ -245,19 +239,19 @@ export interface CommentForm { * @type {string} * @memberof CommentForm */ - created?: string; + 'created'?: string; /** * * @type {string} * @memberof CommentForm */ - creator?: string; + 'creator'?: string; /** * * @type {string} * @memberof CommentForm */ - message: string; + 'message': string; } /** * @@ -270,25 +264,25 @@ export interface Context { * @type {Artifact} * @memberof Context */ - artifact?: Artifact; + 'artifact'?: Artifact; /** * * @type {PlaybookResponse} * @memberof Context */ - playbook?: PlaybookResponse; + 'playbook'?: PlaybookResponse; /** * * @type {TaskResponse} * @memberof Context */ - task?: TaskResponse; + 'task'?: TaskResponse; /** * * @type {TicketResponse} * @memberof Context */ - ticket?: TicketResponse; + 'ticket'?: TicketResponse; } /** * @@ -301,19 +295,19 @@ export interface Enrichment { * @type {string} * @memberof Enrichment */ - created: string; + 'created': string; /** * * @type {object} * @memberof Enrichment */ - data: object; + 'data': object; /** * * @type {string} * @memberof Enrichment */ - name: string; + 'name': string; } /** * @@ -326,13 +320,13 @@ export interface EnrichmentForm { * @type {object} * @memberof EnrichmentForm */ - data: object; + 'data': object; /** * * @type {string} * @memberof EnrichmentForm */ - name: string; + 'name': string; } /** * @@ -345,13 +339,13 @@ export interface Graph { * @type {Array} * @memberof Graph */ - links?: Array; + 'links'?: Array; /** * * @type {Array} * @memberof Graph */ - nodes?: Array; + 'nodes'?: Array; } /** * @@ -364,13 +358,13 @@ export interface Group { * @type {string} * @memberof Group */ - name: string; + 'name': string; /** * * @type {Array} * @memberof Group */ - users: Array; + 'users': Array; } /** * @@ -383,19 +377,19 @@ export interface GroupForm { * @type {string} * @memberof GroupForm */ - id?: string; + 'id'?: string; /** * * @type {string} * @memberof GroupForm */ - name: string; + 'name': string; /** * * @type {Array} * @memberof GroupForm */ - users: Array; + 'users': Array; } /** * @@ -408,19 +402,19 @@ export interface GroupResponse { * @type {string} * @memberof GroupResponse */ - id: string; + 'id': string; /** * * @type {string} * @memberof GroupResponse */ - name: string; + 'name': string; /** * * @type {Array} * @memberof GroupResponse */ - users: Array; + 'users': Array; } /** * @@ -433,49 +427,49 @@ export interface Job { * @type {string} * @memberof Job */ - automation: string; + 'automation': string; /** * * @type {string} * @memberof Job */ - container?: string; + 'container'?: string; /** * * @type {string} * @memberof Job */ - log?: string; + 'log'?: string; /** * * @type {Origin} * @memberof Job */ - origin?: Origin; + 'origin'?: Origin; /** * * @type {object} * @memberof Job */ - output?: object; + 'output'?: object; /** * * @type {object} * @memberof Job */ - payload?: object; + 'payload'?: object; /** * * @type {boolean} * @memberof Job */ - running: boolean; + 'running': boolean; /** * * @type {string} * @memberof Job */ - status: string; + 'status': string; } /** * @@ -488,19 +482,19 @@ export interface JobForm { * @type {string} * @memberof JobForm */ - automation: string; + 'automation': string; /** * * @type {Origin} * @memberof JobForm */ - origin?: Origin; + 'origin'?: Origin; /** * * @type {object} * @memberof JobForm */ - payload?: object; + 'payload'?: object; } /** * @@ -513,49 +507,86 @@ export interface JobResponse { * @type {string} * @memberof JobResponse */ - automation: string; + 'automation': string; /** * * @type {string} * @memberof JobResponse */ - container?: string; + 'container'?: string; /** * * @type {string} * @memberof JobResponse */ - id: string; + 'id': string; /** * * @type {string} * @memberof JobResponse */ - log?: string; + 'log'?: string; /** * * @type {Origin} * @memberof JobResponse */ - origin?: Origin; + 'origin'?: Origin; /** * * @type {object} * @memberof JobResponse */ - output?: object; + 'output'?: object; /** * * @type {object} * @memberof JobResponse */ - payload?: object; + 'payload'?: object; /** * * @type {string} * @memberof JobResponse */ - status: string; + 'status': string; +} +/** + * + * @export + * @interface JobUpdate + */ +export interface JobUpdate { + /** + * + * @type {string} + * @memberof JobUpdate + */ + 'container'?: string; + /** + * + * @type {string} + * @memberof JobUpdate + */ + 'log'?: string; + /** + * + * @type {object} + * @memberof JobUpdate + */ + 'output'?: object; + /** + * + * @type {boolean} + * @memberof JobUpdate + */ + 'running': boolean; + /** + * + * @type {string} + * @memberof JobUpdate + */ + 'status': string; } /** * @@ -568,19 +599,19 @@ export interface Link { * @type {string} * @memberof Link */ - id: string; + 'id': string; /** * * @type {string} * @memberof Link */ - sid: string; + 'sid': string; /** * * @type {string} * @memberof Link */ - tid: string; + 'tid': string; } /** * @@ -593,31 +624,31 @@ export interface LogEntry { * @type {string} * @memberof LogEntry */ - created: string; + 'created': string; /** * * @type {string} * @memberof LogEntry */ - creator: string; + 'creator': string; /** * * @type {string} * @memberof LogEntry */ - message: string; + 'message': string; /** * * @type {string} * @memberof LogEntry */ - reference: string; + 'reference': string; /** * * @type {string} * @memberof LogEntry */ - type: string; + 'type': string; } /** * @@ -630,19 +661,19 @@ export interface Message { * @type {Context} * @memberof Message */ - context?: Context; + 'context'?: Context; /** * * @type {object} * @memberof Message */ - payload?: object; + 'payload'?: object; /** * * @type {{ [key: string]: string; }} * @memberof Message */ - secrets?: { [key: string]: string; }; + 'secrets'?: { [key: string]: string; }; } /** * @@ -655,13 +686,13 @@ export interface ModelFile { * @type {string} * @memberof ModelFile */ - key: string; + 'key': string; /** * * @type {string} * @memberof ModelFile */ - name: string; + 'name': string; } /** * @@ -674,25 +705,25 @@ export interface NewUserResponse { * @type {boolean} * @memberof NewUserResponse */ - blocked: boolean; + 'blocked': boolean; /** * * @type {string} * @memberof NewUserResponse */ - id: string; + 'id': string; /** * * @type {Array} * @memberof NewUserResponse */ - roles: Array; + 'roles': Array; /** * * @type {string} * @memberof NewUserResponse */ - secret?: string; + 'secret'?: string; } /** * @@ -705,13 +736,13 @@ export interface Node { * @type {string} * @memberof Node */ - id: string; + 'id': string; /** * * @type {string} * @memberof Node */ - name: string; + 'name': string; } /** * @@ -724,13 +755,13 @@ export interface Origin { * @type {ArtifactOrigin} * @memberof Origin */ - artifact_origin?: ArtifactOrigin; + 'artifact_origin'?: ArtifactOrigin; /** * * @type {TaskOrigin} * @memberof Origin */ - task_origin?: TaskOrigin; + 'task_origin'?: TaskOrigin; } /** * @@ -743,13 +774,13 @@ export interface Playbook { * @type {string} * @memberof Playbook */ - name: string; + 'name': string; /** * * @type {{ [key: string]: Task; }} * @memberof Playbook */ - tasks: { [key: string]: Task; }; + 'tasks': { [key: string]: Task; }; } /** * @@ -762,13 +793,13 @@ export interface PlaybookResponse { * @type {string} * @memberof PlaybookResponse */ - name: string; + 'name': string; /** * * @type {{ [key: string]: TaskResponse; }} * @memberof PlaybookResponse */ - tasks: { [key: string]: TaskResponse; }; + 'tasks': { [key: string]: TaskResponse; }; } /** * @@ -781,13 +812,13 @@ export interface PlaybookTemplate { * @type {string} * @memberof PlaybookTemplate */ - name: string; + 'name': string; /** * * @type {string} * @memberof PlaybookTemplate */ - yaml: string; + 'yaml': string; } /** * @@ -800,13 +831,13 @@ export interface PlaybookTemplateForm { * @type {string} * @memberof PlaybookTemplateForm */ - id?: string; + 'id'?: string; /** * * @type {string} * @memberof PlaybookTemplateForm */ - yaml: string; + 'yaml': string; } /** * @@ -819,19 +850,19 @@ export interface PlaybookTemplateResponse { * @type {string} * @memberof PlaybookTemplateResponse */ - id: string; + 'id': string; /** * * @type {string} * @memberof PlaybookTemplateResponse */ - name: string; + 'name': string; /** * * @type {string} * @memberof PlaybookTemplateResponse */ - yaml: string; + 'yaml': string; } /** * @@ -844,13 +875,13 @@ export interface Reference { * @type {string} * @memberof Reference */ - href: string; + 'href': string; /** * * @type {string} * @memberof Reference */ - name: string; + 'name': string; } /** * @@ -863,19 +894,19 @@ export interface Rule { * @type {string} * @memberof Rule */ - condition: string; + 'condition': string; /** * * @type {string} * @memberof Rule */ - name: string; + 'name': string; /** * * @type {object} * @memberof Rule */ - update: object; + 'update': object; } /** * @@ -888,25 +919,25 @@ export interface RuleForm { * @type {string} * @memberof RuleForm */ - condition: string; + 'condition': string; /** * * @type {string} * @memberof RuleForm */ - id?: string; + 'id'?: string; /** * * @type {string} * @memberof RuleForm */ - name: string; + 'name': string; /** * * @type {object} * @memberof RuleForm */ - update: object; + 'update': object; } /** * @@ -919,25 +950,25 @@ export interface RuleResponse { * @type {string} * @memberof RuleResponse */ - condition: string; + 'condition': string; /** * * @type {string} * @memberof RuleResponse */ - id: string; + 'id': string; /** * * @type {string} * @memberof RuleResponse */ - name: string; + 'name': string; /** * * @type {object} * @memberof RuleResponse */ - update: object; + 'update': object; } /** * @@ -950,47 +981,45 @@ export interface Settings { * @type {Array} * @memberof Settings */ - artifactStates: Array; + 'artifactStates': Array; /** * * @type {Array} * @memberof Settings */ - roles?: Array; + 'roles'?: Array; /** * * @type {Array} * @memberof Settings */ - ticketTypes: Array; + 'ticketTypes': Array; /** * * @type {string} * @memberof Settings */ - tier: SettingsTierEnum; + 'tier': SettingsTierEnum; /** * * @type {string} * @memberof Settings */ - timeformat: string; + 'timeformat': string; /** * * @type {string} * @memberof Settings */ - version: string; + 'version': string; } -/** - * @export - * @enum {string} - */ -export enum SettingsTierEnum { - Community = 'community', - Enterprise = 'enterprise' -} +export const SettingsTierEnum = { + Community: 'community', + Enterprise: 'enterprise' +} as const; + +export type SettingsTierEnum = typeof SettingsTierEnum[keyof typeof SettingsTierEnum]; /** * @@ -1003,25 +1032,25 @@ export interface Statistics { * @type {{ [key: string]: number; }} * @memberof Statistics */ - open_tickets_per_user: { [key: string]: number; }; + 'open_tickets_per_user': { [key: string]: number; }; /** * * @type {{ [key: string]: number; }} * @memberof Statistics */ - tickets_per_type: { [key: string]: number; }; + 'tickets_per_type': { [key: string]: number; }; /** * * @type {{ [key: string]: number; }} * @memberof Statistics */ - tickets_per_week: { [key: string]: number; }; + 'tickets_per_week': { [key: string]: number; }; /** * * @type {number} * @memberof Statistics */ - unassigned: number; + 'unassigned': number; } /** * @@ -1034,174 +1063,82 @@ export interface Task { * @type {string} * @memberof Task */ - automation?: string; + 'automation'?: string; /** * * @type {string} * @memberof Task */ - closed?: string; + 'closed'?: string; /** * * @type {string} * @memberof Task */ - created: string; + 'created': string; /** * * @type {object} * @memberof Task */ - data?: object; + 'data'?: object; /** * * @type {boolean} * @memberof Task */ - done: boolean; + 'done': boolean; /** * * @type {boolean} * @memberof Task */ - join?: boolean; + 'join'?: boolean; /** * * @type {string} * @memberof Task */ - name: string; + 'name': string; /** * * @type {{ [key: string]: string; }} * @memberof Task */ - next?: { [key: string]: string; }; + 'next'?: { [key: string]: string; }; /** * * @type {string} * @memberof Task */ - owner?: string; + 'owner'?: string; /** * * @type {{ [key: string]: string; }} * @memberof Task */ - payload?: { [key: string]: string; }; + 'payload'?: { [key: string]: string; }; /** * * @type {object} * @memberof Task */ - schema?: object; + 'schema'?: object; /** * * @type {string} * @memberof Task */ - type: TaskTypeEnum; + 'type': TaskTypeEnum; } -/** - * @export - * @enum {string} - */ -export enum TaskTypeEnum { - Task = 'task', - Input = 'input', - Automation = 'automation' -} +export const TaskTypeEnum = { + Task: 'task', + Input: 'input', + Automation: 'automation' +} as const; -/** - * - * @export - * @interface TaskForm - */ -export interface TaskForm { - /** - * - * @type {string} - * @memberof TaskForm - */ - automation?: string; - /** - * - * @type {string} - * @memberof TaskForm - */ - closed?: string; - /** - * - * @type {string} - * @memberof TaskForm - */ - created?: string; - /** - * - * @type {object} - * @memberof TaskForm - */ - data?: object; - /** - * - * @type {boolean} - * @memberof TaskForm - */ - done?: boolean; - /** - * - * @type {boolean} - * @memberof TaskForm - */ - join?: boolean; - /** - * - * @type {string} - * @memberof TaskForm - */ - name: string; - /** - * - * @type {{ [key: string]: string; }} - * @memberof TaskForm - */ - next?: { [key: string]: string; }; - /** - * - * @type {string} - * @memberof TaskForm - */ - owner?: string; - /** - * - * @type {{ [key: string]: string; }} - * @memberof TaskForm - */ - payload?: { [key: string]: string; }; - /** - * - * @type {object} - * @memberof TaskForm - */ - schema?: object; - /** - * - * @type {string} - * @memberof TaskForm - */ - type: TaskFormTypeEnum; -} - -/** - * @export - * @enum {string} - */ -export enum TaskFormTypeEnum { - Task = 'task', - Input = 'input', - Automation = 'automation' -} +export type TaskTypeEnum = typeof TaskTypeEnum[keyof typeof TaskTypeEnum]; /** * @@ -1214,19 +1151,19 @@ export interface TaskOrigin { * @type {string} * @memberof TaskOrigin */ - playbook_id: string; + 'playbook_id': string; /** * * @type {string} * @memberof TaskOrigin */ - task_id: string; + 'task_id': string; /** * * @type {number} * @memberof TaskOrigin */ - ticket_id: number; + 'ticket_id': number; } /** * @@ -1239,96 +1176,94 @@ export interface TaskResponse { * @type {boolean} * @memberof TaskResponse */ - active: boolean; + 'active': boolean; /** * * @type {string} * @memberof TaskResponse */ - automation?: string; + 'automation'?: string; /** * * @type {string} * @memberof TaskResponse */ - closed?: string; + 'closed'?: string; /** * * @type {string} * @memberof TaskResponse */ - created: string; + 'created': string; /** * * @type {object} * @memberof TaskResponse */ - data?: object; + 'data'?: object; /** * * @type {boolean} * @memberof TaskResponse */ - done: boolean; + 'done': boolean; /** * * @type {boolean} * @memberof TaskResponse */ - join?: boolean; + 'join'?: boolean; /** * * @type {string} * @memberof TaskResponse */ - name: string; + 'name': string; /** * * @type {{ [key: string]: string; }} * @memberof TaskResponse */ - next?: { [key: string]: string; }; + 'next'?: { [key: string]: string; }; /** * * @type {number} * @memberof TaskResponse */ - order: number; + 'order': number; /** * * @type {string} * @memberof TaskResponse */ - owner?: string; + 'owner'?: string; /** * * @type {{ [key: string]: string; }} * @memberof TaskResponse */ - payload?: { [key: string]: string; }; + 'payload'?: { [key: string]: string; }; /** * * @type {object} * @memberof TaskResponse */ - schema?: object; + 'schema'?: object; /** * * @type {string} * @memberof TaskResponse */ - type: TaskResponseTypeEnum; + 'type': TaskResponseTypeEnum; } -/** - * @export - * @enum {string} - */ -export enum TaskResponseTypeEnum { - Task = 'task', - Input = 'input', - Automation = 'automation' -} +export const TaskResponseTypeEnum = { + Task: 'task', + Input: 'input', + Automation: 'automation' +} as const; + +export type TaskResponseTypeEnum = typeof TaskResponseTypeEnum[keyof typeof TaskResponseTypeEnum]; /** * @@ -1341,37 +1276,37 @@ export interface TaskWithContext { * @type {string} * @memberof TaskWithContext */ - playbook_id: string; + 'playbook_id': string; /** * * @type {string} * @memberof TaskWithContext */ - playbook_name: string; + 'playbook_name': string; /** * * @type {TaskResponse} * @memberof TaskWithContext */ - task: TaskResponse; + 'task': TaskResponse; /** * * @type {string} * @memberof TaskWithContext */ - task_id: string; + 'task_id': string; /** * * @type {number} * @memberof TaskWithContext */ - ticket_id: number; + 'ticket_id': number; /** * * @type {string} * @memberof TaskWithContext */ - ticket_name: string; + 'ticket_name': string; } /** * @@ -1384,91 +1319,91 @@ export interface Ticket { * @type {Array} * @memberof Ticket */ - artifacts?: Array; + 'artifacts'?: Array; /** * * @type {Array} * @memberof Ticket */ - comments?: Array; + 'comments'?: Array; /** * * @type {string} * @memberof Ticket */ - created: string; + 'created': string; /** * * @type {object} * @memberof Ticket */ - details?: object; + 'details'?: object; /** * * @type {Array} * @memberof Ticket */ - files?: Array; + 'files'?: Array; /** * * @type {string} * @memberof Ticket */ - modified: string; + 'modified': string; /** * * @type {string} * @memberof Ticket */ - name: string; + 'name': string; /** * * @type {string} * @memberof Ticket */ - owner?: string; + 'owner'?: string; /** * * @type {{ [key: string]: Playbook; }} * @memberof Ticket */ - playbooks?: { [key: string]: Playbook; }; + 'playbooks'?: { [key: string]: Playbook; }; /** * * @type {Array} * @memberof Ticket */ - read?: Array; + 'read'?: Array; /** * * @type {Array} * @memberof Ticket */ - references?: Array; + 'references'?: Array; /** * * @type {string} * @memberof Ticket */ - schema: string; + 'schema': string; /** * * @type {string} * @memberof Ticket */ - status: string; + 'status': string; /** * * @type {string} * @memberof Ticket */ - type: string; + 'type': string; /** * * @type {Array} * @memberof Ticket */ - write?: Array; + 'write'?: Array; } /** * @@ -1481,97 +1416,97 @@ export interface TicketForm { * @type {Array} * @memberof TicketForm */ - artifacts?: Array; + 'artifacts'?: Array; /** * * @type {Array} * @memberof TicketForm */ - comments?: Array; + 'comments'?: Array; /** * * @type {string} * @memberof TicketForm */ - created?: string; + 'created'?: string; /** * * @type {object} * @memberof TicketForm */ - details?: object; + 'details'?: object; /** * * @type {Array} * @memberof TicketForm */ - files?: Array; + 'files'?: Array; /** * * @type {number} * @memberof TicketForm */ - id?: number; + 'id'?: number; /** * * @type {string} * @memberof TicketForm */ - modified?: string; + 'modified'?: string; /** * * @type {string} * @memberof TicketForm */ - name: string; + 'name': string; /** * * @type {string} * @memberof TicketForm */ - owner?: string; + 'owner'?: string; /** * * @type {Array} * @memberof TicketForm */ - playbooks?: Array; + 'playbooks'?: Array; /** * * @type {Array} * @memberof TicketForm */ - read?: Array; + 'read'?: Array; /** * * @type {Array} * @memberof TicketForm */ - references?: Array; + 'references'?: Array; /** * * @type {string} * @memberof TicketForm */ - schema?: string; + 'schema'?: string; /** * * @type {string} * @memberof TicketForm */ - status: string; + 'status': string; /** * * @type {string} * @memberof TicketForm */ - type: string; + 'type': string; /** * * @type {Array} * @memberof TicketForm */ - write?: Array; + 'write'?: Array; } /** * @@ -1584,13 +1519,13 @@ export interface TicketList { * @type {number} * @memberof TicketList */ - count: number; + 'count': number; /** * * @type {Array} * @memberof TicketList */ - tickets: Array; + 'tickets': Array; } /** * @@ -1603,97 +1538,97 @@ export interface TicketResponse { * @type {Array} * @memberof TicketResponse */ - artifacts?: Array; + 'artifacts'?: Array; /** * * @type {Array} * @memberof TicketResponse */ - comments?: Array; + 'comments'?: Array; /** * * @type {string} * @memberof TicketResponse */ - created: string; + 'created': string; /** * * @type {object} * @memberof TicketResponse */ - details?: object; + 'details'?: object; /** * * @type {Array} * @memberof TicketResponse */ - files?: Array; + 'files'?: Array; /** * * @type {number} * @memberof TicketResponse */ - id: number; + 'id': number; /** * * @type {string} * @memberof TicketResponse */ - modified: string; + 'modified': string; /** * * @type {string} * @memberof TicketResponse */ - name: string; + 'name': string; /** * * @type {string} * @memberof TicketResponse */ - owner?: string; + 'owner'?: string; /** * * @type {{ [key: string]: PlaybookResponse; }} * @memberof TicketResponse */ - playbooks?: { [key: string]: PlaybookResponse; }; + 'playbooks'?: { [key: string]: PlaybookResponse; }; /** * * @type {Array} * @memberof TicketResponse */ - read?: Array; + 'read'?: Array; /** * * @type {Array} * @memberof TicketResponse */ - references?: Array; + 'references'?: Array; /** * * @type {string} * @memberof TicketResponse */ - schema: string; + 'schema': string; /** * * @type {string} * @memberof TicketResponse */ - status: string; + 'status': string; /** * * @type {string} * @memberof TicketResponse */ - type: string; + 'type': string; /** * * @type {Array} * @memberof TicketResponse */ - write?: Array; + 'write'?: Array; } /** * @@ -1706,97 +1641,97 @@ export interface TicketSimpleResponse { * @type {Array} * @memberof TicketSimpleResponse */ - artifacts?: Array; + 'artifacts'?: Array; /** * * @type {Array} * @memberof TicketSimpleResponse */ - comments?: Array; + 'comments'?: Array; /** * * @type {string} * @memberof TicketSimpleResponse */ - created: string; + 'created': string; /** * * @type {object} * @memberof TicketSimpleResponse */ - details?: object; + 'details'?: object; /** * * @type {Array} * @memberof TicketSimpleResponse */ - files?: Array; + 'files'?: Array; /** * * @type {number} * @memberof TicketSimpleResponse */ - id: number; + 'id': number; /** * * @type {string} * @memberof TicketSimpleResponse */ - modified: string; + 'modified': string; /** * * @type {string} * @memberof TicketSimpleResponse */ - name: string; + 'name': string; /** * * @type {string} * @memberof TicketSimpleResponse */ - owner?: string; + 'owner'?: string; /** * * @type {{ [key: string]: Playbook; }} * @memberof TicketSimpleResponse */ - playbooks?: { [key: string]: Playbook; }; + 'playbooks'?: { [key: string]: Playbook; }; /** * * @type {Array} * @memberof TicketSimpleResponse */ - read?: Array; + 'read'?: Array; /** * * @type {Array} * @memberof TicketSimpleResponse */ - references?: Array; + 'references'?: Array; /** * * @type {string} * @memberof TicketSimpleResponse */ - schema: string; + 'schema': string; /** * * @type {string} * @memberof TicketSimpleResponse */ - status: string; + 'status': string; /** * * @type {string} * @memberof TicketSimpleResponse */ - type: string; + 'type': string; /** * * @type {Array} * @memberof TicketSimpleResponse */ - write?: Array; + 'write'?: Array; } /** * @@ -1809,13 +1744,13 @@ export interface TicketTemplate { * @type {string} * @memberof TicketTemplate */ - name: string; + 'name': string; /** * * @type {string} * @memberof TicketTemplate */ - schema: string; + 'schema': string; } /** * @@ -1828,19 +1763,19 @@ export interface TicketTemplateForm { * @type {string} * @memberof TicketTemplateForm */ - id?: string; + 'id'?: string; /** * * @type {string} * @memberof TicketTemplateForm */ - name: string; + 'name': string; /** * * @type {string} * @memberof TicketTemplateForm */ - schema: string; + 'schema': string; } /** * @@ -1853,19 +1788,19 @@ export interface TicketTemplateResponse { * @type {string} * @memberof TicketTemplateResponse */ - id: string; + 'id': string; /** * * @type {string} * @memberof TicketTemplateResponse */ - name: string; + 'name': string; /** * * @type {string} * @memberof TicketTemplateResponse */ - schema: string; + 'schema': string; } /** * @@ -1878,31 +1813,31 @@ export interface TicketType { * @type {Array} * @memberof TicketType */ - default_groups?: Array; + 'default_groups'?: Array; /** * * @type {Array} * @memberof TicketType */ - default_playbooks: Array; + 'default_playbooks': Array; /** * * @type {string} * @memberof TicketType */ - default_template: string; + 'default_template': string; /** * * @type {string} * @memberof TicketType */ - icon: string; + 'icon': string; /** * * @type {string} * @memberof TicketType */ - name: string; + 'name': string; } /** * @@ -1915,37 +1850,37 @@ export interface TicketTypeForm { * @type {Array} * @memberof TicketTypeForm */ - default_groups?: Array; + 'default_groups'?: Array; /** * * @type {Array} * @memberof TicketTypeForm */ - default_playbooks: Array; + 'default_playbooks': Array; /** * * @type {string} * @memberof TicketTypeForm */ - default_template: string; + 'default_template': string; /** * * @type {string} * @memberof TicketTypeForm */ - icon: string; + 'icon': string; /** * * @type {string} * @memberof TicketTypeForm */ - id?: string; + 'id'?: string; /** * * @type {string} * @memberof TicketTypeForm */ - name: string; + 'name': string; } /** * @@ -1958,37 +1893,37 @@ export interface TicketTypeResponse { * @type {Array} * @memberof TicketTypeResponse */ - default_groups?: Array; + 'default_groups'?: Array; /** * * @type {Array} * @memberof TicketTypeResponse */ - default_playbooks: Array; + 'default_playbooks': Array; /** * * @type {string} * @memberof TicketTypeResponse */ - default_template: string; + 'default_template': string; /** * * @type {string} * @memberof TicketTypeResponse */ - icon: string; + 'icon': string; /** * * @type {string} * @memberof TicketTypeResponse */ - id: string; + 'id': string; /** * * @type {string} * @memberof TicketTypeResponse */ - name: string; + 'name': string; } /** * @@ -2001,109 +1936,109 @@ export interface TicketWithTickets { * @type {Array} * @memberof TicketWithTickets */ - artifacts?: Array; + 'artifacts'?: Array; /** * * @type {Array} * @memberof TicketWithTickets */ - comments?: Array; + 'comments'?: Array; /** * * @type {string} * @memberof TicketWithTickets */ - created: string; + 'created': string; /** * * @type {object} * @memberof TicketWithTickets */ - details?: object; + 'details'?: object; /** * * @type {Array} * @memberof TicketWithTickets */ - files?: Array; + 'files'?: Array; /** * * @type {number} * @memberof TicketWithTickets */ - id: number; + 'id': number; /** * * @type {Array} * @memberof TicketWithTickets */ - logs?: Array; + 'logs'?: Array; /** * * @type {string} * @memberof TicketWithTickets */ - modified: string; + 'modified': string; /** * * @type {string} * @memberof TicketWithTickets */ - name: string; + 'name': string; /** * * @type {string} * @memberof TicketWithTickets */ - owner?: string; + 'owner'?: string; /** * * @type {{ [key: string]: PlaybookResponse; }} * @memberof TicketWithTickets */ - playbooks?: { [key: string]: PlaybookResponse; }; + 'playbooks'?: { [key: string]: PlaybookResponse; }; /** * * @type {Array} * @memberof TicketWithTickets */ - read?: Array; + 'read'?: Array; /** * * @type {Array} * @memberof TicketWithTickets */ - references?: Array; + 'references'?: Array; /** * * @type {string} * @memberof TicketWithTickets */ - schema: string; + 'schema': string; /** * * @type {string} * @memberof TicketWithTickets */ - status: string; + 'status': string; /** * * @type {Array} * @memberof TicketWithTickets */ - tickets?: Array; + 'tickets'?: Array; /** * * @type {string} * @memberof TicketWithTickets */ - type: string; + 'type': string; /** * * @type {Array} * @memberof TicketWithTickets */ - write?: Array; + 'write'?: Array; } /** * @@ -2116,37 +2051,35 @@ export interface Type { * @type {string} * @memberof Type */ - color?: TypeColorEnum; + 'color'?: TypeColorEnum; /** * * @type {string} * @memberof Type */ - icon: string; + 'icon': string; /** * * @type {string} * @memberof Type */ - id: string; + 'id': string; /** * * @type {string} * @memberof Type */ - name: string; + 'name': string; } -/** - * @export - * @enum {string} - */ -export enum TypeColorEnum { - Error = 'error', - Info = 'info', - Success = 'success', - Warning = 'warning' -} +export const TypeColorEnum = { + Error: 'error', + Info: 'info', + Success: 'success', + Warning: 'warning' +} as const; + +export type TypeColorEnum = typeof TypeColorEnum[keyof typeof TypeColorEnum]; /** * @@ -2159,25 +2092,25 @@ export interface User { * @type {boolean} * @memberof User */ - apikey: boolean; + 'apikey': boolean; /** * * @type {boolean} * @memberof User */ - blocked: boolean; + 'blocked': boolean; /** * * @type {Array} * @memberof User */ - roles: Array; + 'roles': Array; /** * * @type {string} * @memberof User */ - sha256?: string; + 'sha256'?: string; } /** * @@ -2190,25 +2123,25 @@ export interface UserData { * @type {string} * @memberof UserData */ - email?: string; + 'email'?: string; /** * * @type {string} * @memberof UserData */ - image?: string; + 'image'?: string; /** * * @type {string} * @memberof UserData */ - name?: string; + 'name'?: string; /** * * @type {string} * @memberof UserData */ - timeformat?: string; + 'timeformat'?: string; } /** * @@ -2221,31 +2154,31 @@ export interface UserDataResponse { * @type {string} * @memberof UserDataResponse */ - email?: string; + 'email'?: string; /** * * @type {string} * @memberof UserDataResponse */ - id: string; + 'id': string; /** * * @type {string} * @memberof UserDataResponse */ - image?: string; + 'image'?: string; /** * * @type {string} * @memberof UserDataResponse */ - name?: string; + 'name'?: string; /** * * @type {string} * @memberof UserDataResponse */ - timeformat?: string; + 'timeformat'?: string; } /** * @@ -2258,25 +2191,25 @@ export interface UserForm { * @type {boolean} * @memberof UserForm */ - apikey: boolean; + 'apikey': boolean; /** * * @type {boolean} * @memberof UserForm */ - blocked: boolean; + 'blocked': boolean; /** * * @type {string} * @memberof UserForm */ - id: string; + 'id': string; /** * * @type {Array} * @memberof UserForm */ - roles: Array; + 'roles': Array; } /** * @@ -2289,25 +2222,25 @@ export interface UserResponse { * @type {boolean} * @memberof UserResponse */ - apikey: boolean; + 'apikey': boolean; /** * * @type {boolean} * @memberof UserResponse */ - blocked: boolean; + 'blocked': boolean; /** * * @type {string} * @memberof UserResponse */ - id: string; + 'id': string; /** * * @type {Array} * @memberof UserResponse */ - roles: Array; + 'roles': Array; } /** @@ -2323,7 +2256,7 @@ export const AutomationsApiAxiosParamCreator = function (configuration?: Configu * @param {*} [options] Override http request option. * @throws {RequiredError} */ - createAutomation: async (automation: AutomationForm, options: any = {}): Promise => { + createAutomation: async (automation: AutomationForm, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'automation' is not null or undefined assertParamExists('createAutomation', 'automation', automation) const localVarPath = `/automations`; @@ -2342,7 +2275,7 @@ export const AutomationsApiAxiosParamCreator = function (configuration?: Configu localVarHeaderParameter['Content-Type'] = 'application/json'; - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; localVarRequestOptions.data = serializeDataIfNeeded(automation, localVarRequestOptions, configuration) @@ -2359,7 +2292,7 @@ export const AutomationsApiAxiosParamCreator = function (configuration?: Configu * @param {*} [options] Override http request option. * @throws {RequiredError} */ - deleteAutomation: async (id: string, options: any = {}): Promise => { + deleteAutomation: async (id: string, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('deleteAutomation', 'id', id) const localVarPath = `/automations/{id}` @@ -2377,7 +2310,7 @@ export const AutomationsApiAxiosParamCreator = function (configuration?: Configu - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -2393,7 +2326,7 @@ export const AutomationsApiAxiosParamCreator = function (configuration?: Configu * @param {*} [options] Override http request option. * @throws {RequiredError} */ - getAutomation: async (id: string, options: any = {}): Promise => { + getAutomation: async (id: string, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('getAutomation', 'id', id) const localVarPath = `/automations/{id}` @@ -2411,7 +2344,7 @@ export const AutomationsApiAxiosParamCreator = function (configuration?: Configu - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -2426,7 +2359,7 @@ export const AutomationsApiAxiosParamCreator = function (configuration?: Configu * @param {*} [options] Override http request option. * @throws {RequiredError} */ - listAutomations: async (options: any = {}): Promise => { + listAutomations: async (options: AxiosRequestConfig = {}): Promise => { const localVarPath = `/automations`; // use dummy base URL string because the URL constructor only accepts absolute URLs. const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); @@ -2441,7 +2374,7 @@ export const AutomationsApiAxiosParamCreator = function (configuration?: Configu - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -2458,7 +2391,7 @@ export const AutomationsApiAxiosParamCreator = function (configuration?: Configu * @param {*} [options] Override http request option. * @throws {RequiredError} */ - updateAutomation: async (id: string, automation: AutomationForm, options: any = {}): Promise => { + updateAutomation: async (id: string, automation: AutomationForm, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('updateAutomation', 'id', id) // verify required parameter 'automation' is not null or undefined @@ -2480,7 +2413,7 @@ export const AutomationsApiAxiosParamCreator = function (configuration?: Configu localVarHeaderParameter['Content-Type'] = 'application/json'; - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; localVarRequestOptions.data = serializeDataIfNeeded(automation, localVarRequestOptions, configuration) @@ -2507,7 +2440,7 @@ export const AutomationsApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async createAutomation(automation: AutomationForm, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async createAutomation(automation: AutomationForm, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.createAutomation(automation, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -2518,7 +2451,7 @@ export const AutomationsApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async deleteAutomation(id: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async deleteAutomation(id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.deleteAutomation(id, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -2529,7 +2462,7 @@ export const AutomationsApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async getAutomation(id: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async getAutomation(id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.getAutomation(id, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -2539,7 +2472,7 @@ export const AutomationsApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async listAutomations(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { + async listAutomations(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { const localVarAxiosArgs = await localVarAxiosParamCreator.listAutomations(options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -2551,7 +2484,7 @@ export const AutomationsApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async updateAutomation(id: string, automation: AutomationForm, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async updateAutomation(id: string, automation: AutomationForm, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.updateAutomation(id, automation, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -2633,7 +2566,7 @@ export class AutomationsApi extends BaseAPI { * @throws {RequiredError} * @memberof AutomationsApi */ - public createAutomation(automation: AutomationForm, options?: any) { + public createAutomation(automation: AutomationForm, options?: AxiosRequestConfig) { return AutomationsApiFp(this.configuration).createAutomation(automation, options).then((request) => request(this.axios, this.basePath)); } @@ -2645,7 +2578,7 @@ export class AutomationsApi extends BaseAPI { * @throws {RequiredError} * @memberof AutomationsApi */ - public deleteAutomation(id: string, options?: any) { + public deleteAutomation(id: string, options?: AxiosRequestConfig) { return AutomationsApiFp(this.configuration).deleteAutomation(id, options).then((request) => request(this.axios, this.basePath)); } @@ -2657,7 +2590,7 @@ export class AutomationsApi extends BaseAPI { * @throws {RequiredError} * @memberof AutomationsApi */ - public getAutomation(id: string, options?: any) { + public getAutomation(id: string, options?: AxiosRequestConfig) { return AutomationsApiFp(this.configuration).getAutomation(id, options).then((request) => request(this.axios, this.basePath)); } @@ -2668,7 +2601,7 @@ export class AutomationsApi extends BaseAPI { * @throws {RequiredError} * @memberof AutomationsApi */ - public listAutomations(options?: any) { + public listAutomations(options?: AxiosRequestConfig) { return AutomationsApiFp(this.configuration).listAutomations(options).then((request) => request(this.axios, this.basePath)); } @@ -2681,7 +2614,7 @@ export class AutomationsApi extends BaseAPI { * @throws {RequiredError} * @memberof AutomationsApi */ - public updateAutomation(id: string, automation: AutomationForm, options?: any) { + public updateAutomation(id: string, automation: AutomationForm, options?: AxiosRequestConfig) { return AutomationsApiFp(this.configuration).updateAutomation(id, automation, options).then((request) => request(this.axios, this.basePath)); } } @@ -2702,7 +2635,7 @@ export const GraphApiAxiosParamCreator = function (configuration?: Configuration * @param {*} [options] Override http request option. * @throws {RequiredError} */ - graph: async (col: string, id: string, depth: number, options: any = {}): Promise => { + graph: async (col: string, id: string, depth: number, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'col' is not null or undefined assertParamExists('graph', 'col', col) // verify required parameter 'id' is not null or undefined @@ -2729,7 +2662,7 @@ export const GraphApiAxiosParamCreator = function (configuration?: Configuration - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -2757,7 +2690,7 @@ export const GraphApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async graph(col: string, id: string, depth: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async graph(col: string, id: string, depth: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.graph(col, id, depth, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -2803,7 +2736,7 @@ export class GraphApi extends BaseAPI { * @throws {RequiredError} * @memberof GraphApi */ - public graph(col: string, id: string, depth: number, options?: any) { + public graph(col: string, id: string, depth: number, options?: AxiosRequestConfig) { return GraphApiFp(this.configuration).graph(col, id, depth, options).then((request) => request(this.axios, this.basePath)); } } @@ -2822,7 +2755,7 @@ export const GroupsApiAxiosParamCreator = function (configuration?: Configuratio * @param {*} [options] Override http request option. * @throws {RequiredError} */ - createGroup: async (group: GroupForm, options: any = {}): Promise => { + createGroup: async (group: GroupForm, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'group' is not null or undefined assertParamExists('createGroup', 'group', group) const localVarPath = `/groups`; @@ -2841,7 +2774,7 @@ export const GroupsApiAxiosParamCreator = function (configuration?: Configuratio localVarHeaderParameter['Content-Type'] = 'application/json'; - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; localVarRequestOptions.data = serializeDataIfNeeded(group, localVarRequestOptions, configuration) @@ -2858,7 +2791,7 @@ export const GroupsApiAxiosParamCreator = function (configuration?: Configuratio * @param {*} [options] Override http request option. * @throws {RequiredError} */ - deleteGroup: async (id: string, options: any = {}): Promise => { + deleteGroup: async (id: string, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('deleteGroup', 'id', id) const localVarPath = `/groups/{id}` @@ -2876,7 +2809,7 @@ export const GroupsApiAxiosParamCreator = function (configuration?: Configuratio - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -2892,7 +2825,7 @@ export const GroupsApiAxiosParamCreator = function (configuration?: Configuratio * @param {*} [options] Override http request option. * @throws {RequiredError} */ - getGroup: async (id: string, options: any = {}): Promise => { + getGroup: async (id: string, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('getGroup', 'id', id) const localVarPath = `/groups/{id}` @@ -2910,7 +2843,7 @@ export const GroupsApiAxiosParamCreator = function (configuration?: Configuratio - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -2925,7 +2858,7 @@ export const GroupsApiAxiosParamCreator = function (configuration?: Configuratio * @param {*} [options] Override http request option. * @throws {RequiredError} */ - listGroups: async (options: any = {}): Promise => { + listGroups: async (options: AxiosRequestConfig = {}): Promise => { const localVarPath = `/groups`; // use dummy base URL string because the URL constructor only accepts absolute URLs. const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); @@ -2940,7 +2873,7 @@ export const GroupsApiAxiosParamCreator = function (configuration?: Configuratio - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -2957,7 +2890,7 @@ export const GroupsApiAxiosParamCreator = function (configuration?: Configuratio * @param {*} [options] Override http request option. * @throws {RequiredError} */ - updateGroup: async (id: string, group: Group, options: any = {}): Promise => { + updateGroup: async (id: string, group: Group, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('updateGroup', 'id', id) // verify required parameter 'group' is not null or undefined @@ -2979,7 +2912,7 @@ export const GroupsApiAxiosParamCreator = function (configuration?: Configuratio localVarHeaderParameter['Content-Type'] = 'application/json'; - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; localVarRequestOptions.data = serializeDataIfNeeded(group, localVarRequestOptions, configuration) @@ -3006,7 +2939,7 @@ export const GroupsApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async createGroup(group: GroupForm, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async createGroup(group: GroupForm, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.createGroup(group, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -3017,7 +2950,7 @@ export const GroupsApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async deleteGroup(id: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async deleteGroup(id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.deleteGroup(id, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -3028,7 +2961,7 @@ export const GroupsApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async getGroup(id: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async getGroup(id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.getGroup(id, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -3038,7 +2971,7 @@ export const GroupsApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async listGroups(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { + async listGroups(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { const localVarAxiosArgs = await localVarAxiosParamCreator.listGroups(options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -3050,7 +2983,7 @@ export const GroupsApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async updateGroup(id: string, group: Group, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async updateGroup(id: string, group: Group, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.updateGroup(id, group, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -3132,7 +3065,7 @@ export class GroupsApi extends BaseAPI { * @throws {RequiredError} * @memberof GroupsApi */ - public createGroup(group: GroupForm, options?: any) { + public createGroup(group: GroupForm, options?: AxiosRequestConfig) { return GroupsApiFp(this.configuration).createGroup(group, options).then((request) => request(this.axios, this.basePath)); } @@ -3144,7 +3077,7 @@ export class GroupsApi extends BaseAPI { * @throws {RequiredError} * @memberof GroupsApi */ - public deleteGroup(id: string, options?: any) { + public deleteGroup(id: string, options?: AxiosRequestConfig) { return GroupsApiFp(this.configuration).deleteGroup(id, options).then((request) => request(this.axios, this.basePath)); } @@ -3156,7 +3089,7 @@ export class GroupsApi extends BaseAPI { * @throws {RequiredError} * @memberof GroupsApi */ - public getGroup(id: string, options?: any) { + public getGroup(id: string, options?: AxiosRequestConfig) { return GroupsApiFp(this.configuration).getGroup(id, options).then((request) => request(this.axios, this.basePath)); } @@ -3167,7 +3100,7 @@ export class GroupsApi extends BaseAPI { * @throws {RequiredError} * @memberof GroupsApi */ - public listGroups(options?: any) { + public listGroups(options?: AxiosRequestConfig) { return GroupsApiFp(this.configuration).listGroups(options).then((request) => request(this.axios, this.basePath)); } @@ -3180,7 +3113,7 @@ export class GroupsApi extends BaseAPI { * @throws {RequiredError} * @memberof GroupsApi */ - public updateGroup(id: string, group: Group, options?: any) { + public updateGroup(id: string, group: Group, options?: AxiosRequestConfig) { return GroupsApiFp(this.configuration).updateGroup(id, group, options).then((request) => request(this.axios, this.basePath)); } } @@ -3199,7 +3132,7 @@ export const JobsApiAxiosParamCreator = function (configuration?: Configuration) * @param {*} [options] Override http request option. * @throws {RequiredError} */ - getJob: async (id: string, options: any = {}): Promise => { + getJob: async (id: string, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('getJob', 'id', id) const localVarPath = `/jobs/{id}` @@ -3217,7 +3150,7 @@ export const JobsApiAxiosParamCreator = function (configuration?: Configuration) - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -3232,7 +3165,7 @@ export const JobsApiAxiosParamCreator = function (configuration?: Configuration) * @param {*} [options] Override http request option. * @throws {RequiredError} */ - listJobs: async (options: any = {}): Promise => { + listJobs: async (options: AxiosRequestConfig = {}): Promise => { const localVarPath = `/jobs`; // use dummy base URL string because the URL constructor only accepts absolute URLs. const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); @@ -3247,7 +3180,7 @@ export const JobsApiAxiosParamCreator = function (configuration?: Configuration) - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -3263,7 +3196,7 @@ export const JobsApiAxiosParamCreator = function (configuration?: Configuration) * @param {*} [options] Override http request option. * @throws {RequiredError} */ - runJob: async (job: JobForm, options: any = {}): Promise => { + runJob: async (job: JobForm, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'job' is not null or undefined assertParamExists('runJob', 'job', job) const localVarPath = `/jobs`; @@ -3282,7 +3215,7 @@ export const JobsApiAxiosParamCreator = function (configuration?: Configuration) localVarHeaderParameter['Content-Type'] = 'application/json'; - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; localVarRequestOptions.data = serializeDataIfNeeded(job, localVarRequestOptions, configuration) @@ -3296,11 +3229,11 @@ export const JobsApiAxiosParamCreator = function (configuration?: Configuration) * * @summary Update an existing job * @param {string} id Job ID - * @param {Job} job Job object that needs to be added + * @param {JobUpdate} job Job object that needs to be added * @param {*} [options] Override http request option. * @throws {RequiredError} */ - updateJob: async (id: string, job: Job, options: any = {}): Promise => { + updateJob: async (id: string, job: JobUpdate, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('updateJob', 'id', id) // verify required parameter 'job' is not null or undefined @@ -3322,7 +3255,7 @@ export const JobsApiAxiosParamCreator = function (configuration?: Configuration) localVarHeaderParameter['Content-Type'] = 'application/json'; - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; localVarRequestOptions.data = serializeDataIfNeeded(job, localVarRequestOptions, configuration) @@ -3349,7 +3282,7 @@ export const JobsApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async getJob(id: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async getJob(id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.getJob(id, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -3359,7 +3292,7 @@ export const JobsApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async listJobs(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { + async listJobs(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { const localVarAxiosArgs = await localVarAxiosParamCreator.listJobs(options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -3370,7 +3303,7 @@ export const JobsApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async runJob(job: JobForm, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async runJob(job: JobForm, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.runJob(job, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -3378,11 +3311,11 @@ export const JobsApiFp = function(configuration?: Configuration) { * * @summary Update an existing job * @param {string} id Job ID - * @param {Job} job Job object that needs to be added + * @param {JobUpdate} job Job object that needs to be added * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async updateJob(id: string, job: Job, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async updateJob(id: string, job: JobUpdate, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.updateJob(id, job, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -3429,11 +3362,11 @@ export const JobsApiFactory = function (configuration?: Configuration, basePath? * * @summary Update an existing job * @param {string} id Job ID - * @param {Job} job Job object that needs to be added + * @param {JobUpdate} job Job object that needs to be added * @param {*} [options] Override http request option. * @throws {RequiredError} */ - updateJob(id: string, job: Job, options?: any): AxiosPromise { + updateJob(id: string, job: JobUpdate, options?: any): AxiosPromise { return localVarFp.updateJob(id, job, options).then((request) => request(axios, basePath)); }, }; @@ -3454,7 +3387,7 @@ export class JobsApi extends BaseAPI { * @throws {RequiredError} * @memberof JobsApi */ - public getJob(id: string, options?: any) { + public getJob(id: string, options?: AxiosRequestConfig) { return JobsApiFp(this.configuration).getJob(id, options).then((request) => request(this.axios, this.basePath)); } @@ -3465,7 +3398,7 @@ export class JobsApi extends BaseAPI { * @throws {RequiredError} * @memberof JobsApi */ - public listJobs(options?: any) { + public listJobs(options?: AxiosRequestConfig) { return JobsApiFp(this.configuration).listJobs(options).then((request) => request(this.axios, this.basePath)); } @@ -3477,7 +3410,7 @@ export class JobsApi extends BaseAPI { * @throws {RequiredError} * @memberof JobsApi */ - public runJob(job: JobForm, options?: any) { + public runJob(job: JobForm, options?: AxiosRequestConfig) { return JobsApiFp(this.configuration).runJob(job, options).then((request) => request(this.axios, this.basePath)); } @@ -3485,12 +3418,12 @@ export class JobsApi extends BaseAPI { * * @summary Update an existing job * @param {string} id Job ID - * @param {Job} job Job object that needs to be added + * @param {JobUpdate} job Job object that needs to be added * @param {*} [options] Override http request option. * @throws {RequiredError} * @memberof JobsApi */ - public updateJob(id: string, job: Job, options?: any) { + public updateJob(id: string, job: JobUpdate, options?: AxiosRequestConfig) { return JobsApiFp(this.configuration).updateJob(id, job, options).then((request) => request(this.axios, this.basePath)); } } @@ -3509,7 +3442,7 @@ export const LogsApiAxiosParamCreator = function (configuration?: Configuration) * @param {*} [options] Override http request option. * @throws {RequiredError} */ - getLogs: async (reference: string, options: any = {}): Promise => { + getLogs: async (reference: string, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'reference' is not null or undefined assertParamExists('getLogs', 'reference', reference) const localVarPath = `/logs/{reference}` @@ -3527,7 +3460,7 @@ export const LogsApiAxiosParamCreator = function (configuration?: Configuration) - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -3553,7 +3486,7 @@ export const LogsApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async getLogs(reference: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { + async getLogs(reference: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { const localVarAxiosArgs = await localVarAxiosParamCreator.getLogs(reference, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -3595,7 +3528,7 @@ export class LogsApi extends BaseAPI { * @throws {RequiredError} * @memberof LogsApi */ - public getLogs(reference: string, options?: any) { + public getLogs(reference: string, options?: AxiosRequestConfig) { return LogsApiFp(this.configuration).getLogs(reference, options).then((request) => request(this.axios, this.basePath)); } } @@ -3614,7 +3547,7 @@ export const PlaybooksApiAxiosParamCreator = function (configuration?: Configura * @param {*} [options] Override http request option. * @throws {RequiredError} */ - createPlaybook: async (playbook: PlaybookTemplateForm, options: any = {}): Promise => { + createPlaybook: async (playbook: PlaybookTemplateForm, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'playbook' is not null or undefined assertParamExists('createPlaybook', 'playbook', playbook) const localVarPath = `/playbooks`; @@ -3633,7 +3566,7 @@ export const PlaybooksApiAxiosParamCreator = function (configuration?: Configura localVarHeaderParameter['Content-Type'] = 'application/json'; - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; localVarRequestOptions.data = serializeDataIfNeeded(playbook, localVarRequestOptions, configuration) @@ -3650,7 +3583,7 @@ export const PlaybooksApiAxiosParamCreator = function (configuration?: Configura * @param {*} [options] Override http request option. * @throws {RequiredError} */ - deletePlaybook: async (id: string, options: any = {}): Promise => { + deletePlaybook: async (id: string, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('deletePlaybook', 'id', id) const localVarPath = `/playbooks/{id}` @@ -3668,7 +3601,7 @@ export const PlaybooksApiAxiosParamCreator = function (configuration?: Configura - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -3684,7 +3617,7 @@ export const PlaybooksApiAxiosParamCreator = function (configuration?: Configura * @param {*} [options] Override http request option. * @throws {RequiredError} */ - getPlaybook: async (id: string, options: any = {}): Promise => { + getPlaybook: async (id: string, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('getPlaybook', 'id', id) const localVarPath = `/playbooks/{id}` @@ -3702,7 +3635,7 @@ export const PlaybooksApiAxiosParamCreator = function (configuration?: Configura - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -3717,7 +3650,7 @@ export const PlaybooksApiAxiosParamCreator = function (configuration?: Configura * @param {*} [options] Override http request option. * @throws {RequiredError} */ - listPlaybooks: async (options: any = {}): Promise => { + listPlaybooks: async (options: AxiosRequestConfig = {}): Promise => { const localVarPath = `/playbooks`; // use dummy base URL string because the URL constructor only accepts absolute URLs. const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); @@ -3732,7 +3665,7 @@ export const PlaybooksApiAxiosParamCreator = function (configuration?: Configura - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -3749,7 +3682,7 @@ export const PlaybooksApiAxiosParamCreator = function (configuration?: Configura * @param {*} [options] Override http request option. * @throws {RequiredError} */ - updatePlaybook: async (id: string, playbook: PlaybookTemplateForm, options: any = {}): Promise => { + updatePlaybook: async (id: string, playbook: PlaybookTemplateForm, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('updatePlaybook', 'id', id) // verify required parameter 'playbook' is not null or undefined @@ -3771,7 +3704,7 @@ export const PlaybooksApiAxiosParamCreator = function (configuration?: Configura localVarHeaderParameter['Content-Type'] = 'application/json'; - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; localVarRequestOptions.data = serializeDataIfNeeded(playbook, localVarRequestOptions, configuration) @@ -3798,7 +3731,7 @@ export const PlaybooksApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async createPlaybook(playbook: PlaybookTemplateForm, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async createPlaybook(playbook: PlaybookTemplateForm, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.createPlaybook(playbook, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -3809,7 +3742,7 @@ export const PlaybooksApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async deletePlaybook(id: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async deletePlaybook(id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.deletePlaybook(id, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -3820,7 +3753,7 @@ export const PlaybooksApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async getPlaybook(id: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async getPlaybook(id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.getPlaybook(id, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -3830,7 +3763,7 @@ export const PlaybooksApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async listPlaybooks(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { + async listPlaybooks(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { const localVarAxiosArgs = await localVarAxiosParamCreator.listPlaybooks(options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -3842,7 +3775,7 @@ export const PlaybooksApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async updatePlaybook(id: string, playbook: PlaybookTemplateForm, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async updatePlaybook(id: string, playbook: PlaybookTemplateForm, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.updatePlaybook(id, playbook, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -3924,7 +3857,7 @@ export class PlaybooksApi extends BaseAPI { * @throws {RequiredError} * @memberof PlaybooksApi */ - public createPlaybook(playbook: PlaybookTemplateForm, options?: any) { + public createPlaybook(playbook: PlaybookTemplateForm, options?: AxiosRequestConfig) { return PlaybooksApiFp(this.configuration).createPlaybook(playbook, options).then((request) => request(this.axios, this.basePath)); } @@ -3936,7 +3869,7 @@ export class PlaybooksApi extends BaseAPI { * @throws {RequiredError} * @memberof PlaybooksApi */ - public deletePlaybook(id: string, options?: any) { + public deletePlaybook(id: string, options?: AxiosRequestConfig) { return PlaybooksApiFp(this.configuration).deletePlaybook(id, options).then((request) => request(this.axios, this.basePath)); } @@ -3948,7 +3881,7 @@ export class PlaybooksApi extends BaseAPI { * @throws {RequiredError} * @memberof PlaybooksApi */ - public getPlaybook(id: string, options?: any) { + public getPlaybook(id: string, options?: AxiosRequestConfig) { return PlaybooksApiFp(this.configuration).getPlaybook(id, options).then((request) => request(this.axios, this.basePath)); } @@ -3959,7 +3892,7 @@ export class PlaybooksApi extends BaseAPI { * @throws {RequiredError} * @memberof PlaybooksApi */ - public listPlaybooks(options?: any) { + public listPlaybooks(options?: AxiosRequestConfig) { return PlaybooksApiFp(this.configuration).listPlaybooks(options).then((request) => request(this.axios, this.basePath)); } @@ -3972,7 +3905,7 @@ export class PlaybooksApi extends BaseAPI { * @throws {RequiredError} * @memberof PlaybooksApi */ - public updatePlaybook(id: string, playbook: PlaybookTemplateForm, options?: any) { + public updatePlaybook(id: string, playbook: PlaybookTemplateForm, options?: AxiosRequestConfig) { return PlaybooksApiFp(this.configuration).updatePlaybook(id, playbook, options).then((request) => request(this.axios, this.basePath)); } } @@ -3991,7 +3924,7 @@ export const RulesApiAxiosParamCreator = function (configuration?: Configuration * @param {*} [options] Override http request option. * @throws {RequiredError} */ - createRule: async (rule: RuleForm, options: any = {}): Promise => { + createRule: async (rule: RuleForm, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'rule' is not null or undefined assertParamExists('createRule', 'rule', rule) const localVarPath = `/rules`; @@ -4010,7 +3943,7 @@ export const RulesApiAxiosParamCreator = function (configuration?: Configuration localVarHeaderParameter['Content-Type'] = 'application/json'; - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; localVarRequestOptions.data = serializeDataIfNeeded(rule, localVarRequestOptions, configuration) @@ -4027,7 +3960,7 @@ export const RulesApiAxiosParamCreator = function (configuration?: Configuration * @param {*} [options] Override http request option. * @throws {RequiredError} */ - deleteRule: async (id: string, options: any = {}): Promise => { + deleteRule: async (id: string, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('deleteRule', 'id', id) const localVarPath = `/rules/{id}` @@ -4045,7 +3978,7 @@ export const RulesApiAxiosParamCreator = function (configuration?: Configuration - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -4061,7 +3994,7 @@ export const RulesApiAxiosParamCreator = function (configuration?: Configuration * @param {*} [options] Override http request option. * @throws {RequiredError} */ - getRule: async (id: string, options: any = {}): Promise => { + getRule: async (id: string, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('getRule', 'id', id) const localVarPath = `/rules/{id}` @@ -4079,7 +4012,7 @@ export const RulesApiAxiosParamCreator = function (configuration?: Configuration - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -4094,7 +4027,7 @@ export const RulesApiAxiosParamCreator = function (configuration?: Configuration * @param {*} [options] Override http request option. * @throws {RequiredError} */ - listRules: async (options: any = {}): Promise => { + listRules: async (options: AxiosRequestConfig = {}): Promise => { const localVarPath = `/rules`; // use dummy base URL string because the URL constructor only accepts absolute URLs. const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); @@ -4109,7 +4042,7 @@ export const RulesApiAxiosParamCreator = function (configuration?: Configuration - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -4126,7 +4059,7 @@ export const RulesApiAxiosParamCreator = function (configuration?: Configuration * @param {*} [options] Override http request option. * @throws {RequiredError} */ - updateRule: async (id: string, rule: RuleForm, options: any = {}): Promise => { + updateRule: async (id: string, rule: RuleForm, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('updateRule', 'id', id) // verify required parameter 'rule' is not null or undefined @@ -4148,7 +4081,7 @@ export const RulesApiAxiosParamCreator = function (configuration?: Configuration localVarHeaderParameter['Content-Type'] = 'application/json'; - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; localVarRequestOptions.data = serializeDataIfNeeded(rule, localVarRequestOptions, configuration) @@ -4175,7 +4108,7 @@ export const RulesApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async createRule(rule: RuleForm, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { + async createRule(rule: RuleForm, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { const localVarAxiosArgs = await localVarAxiosParamCreator.createRule(rule, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -4186,7 +4119,7 @@ export const RulesApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async deleteRule(id: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async deleteRule(id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.deleteRule(id, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -4197,7 +4130,7 @@ export const RulesApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async getRule(id: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async getRule(id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.getRule(id, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -4207,7 +4140,7 @@ export const RulesApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async listRules(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { + async listRules(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { const localVarAxiosArgs = await localVarAxiosParamCreator.listRules(options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -4219,7 +4152,7 @@ export const RulesApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async updateRule(id: string, rule: RuleForm, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async updateRule(id: string, rule: RuleForm, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.updateRule(id, rule, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -4301,7 +4234,7 @@ export class RulesApi extends BaseAPI { * @throws {RequiredError} * @memberof RulesApi */ - public createRule(rule: RuleForm, options?: any) { + public createRule(rule: RuleForm, options?: AxiosRequestConfig) { return RulesApiFp(this.configuration).createRule(rule, options).then((request) => request(this.axios, this.basePath)); } @@ -4313,7 +4246,7 @@ export class RulesApi extends BaseAPI { * @throws {RequiredError} * @memberof RulesApi */ - public deleteRule(id: string, options?: any) { + public deleteRule(id: string, options?: AxiosRequestConfig) { return RulesApiFp(this.configuration).deleteRule(id, options).then((request) => request(this.axios, this.basePath)); } @@ -4325,7 +4258,7 @@ export class RulesApi extends BaseAPI { * @throws {RequiredError} * @memberof RulesApi */ - public getRule(id: string, options?: any) { + public getRule(id: string, options?: AxiosRequestConfig) { return RulesApiFp(this.configuration).getRule(id, options).then((request) => request(this.axios, this.basePath)); } @@ -4336,7 +4269,7 @@ export class RulesApi extends BaseAPI { * @throws {RequiredError} * @memberof RulesApi */ - public listRules(options?: any) { + public listRules(options?: AxiosRequestConfig) { return RulesApiFp(this.configuration).listRules(options).then((request) => request(this.axios, this.basePath)); } @@ -4349,7 +4282,7 @@ export class RulesApi extends BaseAPI { * @throws {RequiredError} * @memberof RulesApi */ - public updateRule(id: string, rule: RuleForm, options?: any) { + public updateRule(id: string, rule: RuleForm, options?: AxiosRequestConfig) { return RulesApiFp(this.configuration).updateRule(id, rule, options).then((request) => request(this.axios, this.basePath)); } } @@ -4367,7 +4300,7 @@ export const SettingsApiAxiosParamCreator = function (configuration?: Configurat * @param {*} [options] Override http request option. * @throws {RequiredError} */ - getSettings: async (options: any = {}): Promise => { + getSettings: async (options: AxiosRequestConfig = {}): Promise => { const localVarPath = `/settings`; // use dummy base URL string because the URL constructor only accepts absolute URLs. const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); @@ -4382,7 +4315,7 @@ export const SettingsApiAxiosParamCreator = function (configuration?: Configurat - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -4407,7 +4340,7 @@ export const SettingsApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async getSettings(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async getSettings(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.getSettings(options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -4447,7 +4380,7 @@ export class SettingsApi extends BaseAPI { * @throws {RequiredError} * @memberof SettingsApi */ - public getSettings(options?: any) { + public getSettings(options?: AxiosRequestConfig) { return SettingsApiFp(this.configuration).getSettings(options).then((request) => request(this.axios, this.basePath)); } } @@ -4465,7 +4398,7 @@ export const StatisticsApiAxiosParamCreator = function (configuration?: Configur * @param {*} [options] Override http request option. * @throws {RequiredError} */ - getStatistics: async (options: any = {}): Promise => { + getStatistics: async (options: AxiosRequestConfig = {}): Promise => { const localVarPath = `/statistics`; // use dummy base URL string because the URL constructor only accepts absolute URLs. const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); @@ -4480,7 +4413,7 @@ export const StatisticsApiAxiosParamCreator = function (configuration?: Configur - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -4505,7 +4438,7 @@ export const StatisticsApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async getStatistics(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async getStatistics(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.getStatistics(options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -4545,7 +4478,7 @@ export class StatisticsApi extends BaseAPI { * @throws {RequiredError} * @memberof StatisticsApi */ - public getStatistics(options?: any) { + public getStatistics(options?: AxiosRequestConfig) { return StatisticsApiFp(this.configuration).getStatistics(options).then((request) => request(this.axios, this.basePath)); } } @@ -4563,7 +4496,7 @@ export const TasksApiAxiosParamCreator = function (configuration?: Configuration * @param {*} [options] Override http request option. * @throws {RequiredError} */ - listTasks: async (options: any = {}): Promise => { + listTasks: async (options: AxiosRequestConfig = {}): Promise => { const localVarPath = `/tasks`; // use dummy base URL string because the URL constructor only accepts absolute URLs. const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); @@ -4578,7 +4511,7 @@ export const TasksApiAxiosParamCreator = function (configuration?: Configuration - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -4603,7 +4536,7 @@ export const TasksApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async listTasks(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { + async listTasks(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { const localVarAxiosArgs = await localVarAxiosParamCreator.listTasks(options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -4643,7 +4576,7 @@ export class TasksApi extends BaseAPI { * @throws {RequiredError} * @memberof TasksApi */ - public listTasks(options?: any) { + public listTasks(options?: AxiosRequestConfig) { return TasksApiFp(this.configuration).listTasks(options).then((request) => request(this.axios, this.basePath)); } } @@ -4662,7 +4595,7 @@ export const TemplatesApiAxiosParamCreator = function (configuration?: Configura * @param {*} [options] Override http request option. * @throws {RequiredError} */ - createTemplate: async (template: TicketTemplateForm, options: any = {}): Promise => { + createTemplate: async (template: TicketTemplateForm, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'template' is not null or undefined assertParamExists('createTemplate', 'template', template) const localVarPath = `/templates`; @@ -4681,7 +4614,7 @@ export const TemplatesApiAxiosParamCreator = function (configuration?: Configura localVarHeaderParameter['Content-Type'] = 'application/json'; - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; localVarRequestOptions.data = serializeDataIfNeeded(template, localVarRequestOptions, configuration) @@ -4698,7 +4631,7 @@ export const TemplatesApiAxiosParamCreator = function (configuration?: Configura * @param {*} [options] Override http request option. * @throws {RequiredError} */ - deleteTemplate: async (id: string, options: any = {}): Promise => { + deleteTemplate: async (id: string, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('deleteTemplate', 'id', id) const localVarPath = `/templates/{id}` @@ -4716,7 +4649,7 @@ export const TemplatesApiAxiosParamCreator = function (configuration?: Configura - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -4732,7 +4665,7 @@ export const TemplatesApiAxiosParamCreator = function (configuration?: Configura * @param {*} [options] Override http request option. * @throws {RequiredError} */ - getTemplate: async (id: string, options: any = {}): Promise => { + getTemplate: async (id: string, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('getTemplate', 'id', id) const localVarPath = `/templates/{id}` @@ -4750,7 +4683,7 @@ export const TemplatesApiAxiosParamCreator = function (configuration?: Configura - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -4765,7 +4698,7 @@ export const TemplatesApiAxiosParamCreator = function (configuration?: Configura * @param {*} [options] Override http request option. * @throws {RequiredError} */ - listTemplates: async (options: any = {}): Promise => { + listTemplates: async (options: AxiosRequestConfig = {}): Promise => { const localVarPath = `/templates`; // use dummy base URL string because the URL constructor only accepts absolute URLs. const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); @@ -4780,7 +4713,7 @@ export const TemplatesApiAxiosParamCreator = function (configuration?: Configura - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -4797,7 +4730,7 @@ export const TemplatesApiAxiosParamCreator = function (configuration?: Configura * @param {*} [options] Override http request option. * @throws {RequiredError} */ - updateTemplate: async (id: string, template: TicketTemplateForm, options: any = {}): Promise => { + updateTemplate: async (id: string, template: TicketTemplateForm, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('updateTemplate', 'id', id) // verify required parameter 'template' is not null or undefined @@ -4819,7 +4752,7 @@ export const TemplatesApiAxiosParamCreator = function (configuration?: Configura localVarHeaderParameter['Content-Type'] = 'application/json'; - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; localVarRequestOptions.data = serializeDataIfNeeded(template, localVarRequestOptions, configuration) @@ -4846,7 +4779,7 @@ export const TemplatesApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async createTemplate(template: TicketTemplateForm, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async createTemplate(template: TicketTemplateForm, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.createTemplate(template, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -4857,7 +4790,7 @@ export const TemplatesApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async deleteTemplate(id: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async deleteTemplate(id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.deleteTemplate(id, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -4868,7 +4801,7 @@ export const TemplatesApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async getTemplate(id: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async getTemplate(id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.getTemplate(id, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -4878,7 +4811,7 @@ export const TemplatesApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async listTemplates(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { + async listTemplates(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { const localVarAxiosArgs = await localVarAxiosParamCreator.listTemplates(options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -4890,7 +4823,7 @@ export const TemplatesApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async updateTemplate(id: string, template: TicketTemplateForm, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async updateTemplate(id: string, template: TicketTemplateForm, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.updateTemplate(id, template, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -4972,7 +4905,7 @@ export class TemplatesApi extends BaseAPI { * @throws {RequiredError} * @memberof TemplatesApi */ - public createTemplate(template: TicketTemplateForm, options?: any) { + public createTemplate(template: TicketTemplateForm, options?: AxiosRequestConfig) { return TemplatesApiFp(this.configuration).createTemplate(template, options).then((request) => request(this.axios, this.basePath)); } @@ -4984,7 +4917,7 @@ export class TemplatesApi extends BaseAPI { * @throws {RequiredError} * @memberof TemplatesApi */ - public deleteTemplate(id: string, options?: any) { + public deleteTemplate(id: string, options?: AxiosRequestConfig) { return TemplatesApiFp(this.configuration).deleteTemplate(id, options).then((request) => request(this.axios, this.basePath)); } @@ -4996,7 +4929,7 @@ export class TemplatesApi extends BaseAPI { * @throws {RequiredError} * @memberof TemplatesApi */ - public getTemplate(id: string, options?: any) { + public getTemplate(id: string, options?: AxiosRequestConfig) { return TemplatesApiFp(this.configuration).getTemplate(id, options).then((request) => request(this.axios, this.basePath)); } @@ -5007,7 +4940,7 @@ export class TemplatesApi extends BaseAPI { * @throws {RequiredError} * @memberof TemplatesApi */ - public listTemplates(options?: any) { + public listTemplates(options?: AxiosRequestConfig) { return TemplatesApiFp(this.configuration).listTemplates(options).then((request) => request(this.axios, this.basePath)); } @@ -5020,7 +4953,7 @@ export class TemplatesApi extends BaseAPI { * @throws {RequiredError} * @memberof TemplatesApi */ - public updateTemplate(id: string, template: TicketTemplateForm, options?: any) { + public updateTemplate(id: string, template: TicketTemplateForm, options?: AxiosRequestConfig) { return TemplatesApiFp(this.configuration).updateTemplate(id, template, options).then((request) => request(this.axios, this.basePath)); } } @@ -5040,7 +4973,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati * @param {*} [options] Override http request option. * @throws {RequiredError} */ - addArtifact: async (id: number, artifact: Artifact, options: any = {}): Promise => { + addArtifact: async (id: number, artifact: Artifact, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('addArtifact', 'id', id) // verify required parameter 'artifact' is not null or undefined @@ -5062,7 +4995,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati localVarHeaderParameter['Content-Type'] = 'application/json'; - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; localVarRequestOptions.data = serializeDataIfNeeded(artifact, localVarRequestOptions, configuration) @@ -5080,7 +5013,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati * @param {*} [options] Override http request option. * @throws {RequiredError} */ - addComment: async (id: number, comment: CommentForm, options: any = {}): Promise => { + addComment: async (id: number, comment: CommentForm, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('addComment', 'id', id) // verify required parameter 'comment' is not null or undefined @@ -5102,7 +5035,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati localVarHeaderParameter['Content-Type'] = 'application/json'; - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; localVarRequestOptions.data = serializeDataIfNeeded(comment, localVarRequestOptions, configuration) @@ -5120,7 +5053,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati * @param {*} [options] Override http request option. * @throws {RequiredError} */ - addTicketPlaybook: async (id: number, playbook: PlaybookTemplateForm, options: any = {}): Promise => { + addTicketPlaybook: async (id: number, playbook: PlaybookTemplateForm, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('addTicketPlaybook', 'id', id) // verify required parameter 'playbook' is not null or undefined @@ -5142,7 +5075,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati localVarHeaderParameter['Content-Type'] = 'application/json'; - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; localVarRequestOptions.data = serializeDataIfNeeded(playbook, localVarRequestOptions, configuration) @@ -5162,7 +5095,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati * @param {*} [options] Override http request option. * @throws {RequiredError} */ - completeTask: async (id: number, playbookID: string, taskID: string, data: object, options: any = {}): Promise => { + completeTask: async (id: number, playbookID: string, taskID: string, data: object, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('completeTask', 'id', id) // verify required parameter 'playbookID' is not null or undefined @@ -5190,7 +5123,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati localVarHeaderParameter['Content-Type'] = 'application/json'; - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; localVarRequestOptions.data = serializeDataIfNeeded(data, localVarRequestOptions, configuration) @@ -5207,7 +5140,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati * @param {*} [options] Override http request option. * @throws {RequiredError} */ - createTicket: async (ticket: TicketForm, options: any = {}): Promise => { + createTicket: async (ticket: TicketForm, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'ticket' is not null or undefined assertParamExists('createTicket', 'ticket', ticket) const localVarPath = `/tickets`; @@ -5226,7 +5159,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati localVarHeaderParameter['Content-Type'] = 'application/json'; - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; localVarRequestOptions.data = serializeDataIfNeeded(ticket, localVarRequestOptions, configuration) @@ -5243,7 +5176,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati * @param {*} [options] Override http request option. * @throws {RequiredError} */ - createTicketBatch: async (ticket: Array, options: any = {}): Promise => { + createTicketBatch: async (ticket: Array, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'ticket' is not null or undefined assertParamExists('createTicketBatch', 'ticket', ticket) const localVarPath = `/tickets/batch`; @@ -5262,7 +5195,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati localVarHeaderParameter['Content-Type'] = 'application/json'; - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; localVarRequestOptions.data = serializeDataIfNeeded(ticket, localVarRequestOptions, configuration) @@ -5279,7 +5212,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati * @param {*} [options] Override http request option. * @throws {RequiredError} */ - deleteTicket: async (id: number, options: any = {}): Promise => { + deleteTicket: async (id: number, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('deleteTicket', 'id', id) const localVarPath = `/tickets/{id}` @@ -5297,7 +5230,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -5315,7 +5248,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati * @param {*} [options] Override http request option. * @throws {RequiredError} */ - enrichArtifact: async (id: number, name: string, data: EnrichmentForm, options: any = {}): Promise => { + enrichArtifact: async (id: number, name: string, data: EnrichmentForm, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('enrichArtifact', 'id', id) // verify required parameter 'name' is not null or undefined @@ -5340,7 +5273,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati localVarHeaderParameter['Content-Type'] = 'application/json'; - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; localVarRequestOptions.data = serializeDataIfNeeded(data, localVarRequestOptions, configuration) @@ -5358,7 +5291,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati * @param {*} [options] Override http request option. * @throws {RequiredError} */ - getArtifact: async (id: number, name: string, options: any = {}): Promise => { + getArtifact: async (id: number, name: string, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('getArtifact', 'id', id) // verify required parameter 'name' is not null or undefined @@ -5379,7 +5312,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -5395,7 +5328,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati * @param {*} [options] Override http request option. * @throws {RequiredError} */ - getTicket: async (id: number, options: any = {}): Promise => { + getTicket: async (id: number, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('getTicket', 'id', id) const localVarPath = `/tickets/{id}` @@ -5413,7 +5346,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -5430,7 +5363,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati * @param {*} [options] Override http request option. * @throws {RequiredError} */ - linkTicket: async (id: number, linkedID: number, options: any = {}): Promise => { + linkTicket: async (id: number, linkedID: number, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('linkTicket', 'id', id) // verify required parameter 'linkedID' is not null or undefined @@ -5452,7 +5385,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati localVarHeaderParameter['Content-Type'] = 'application/json'; - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; localVarRequestOptions.data = serializeDataIfNeeded(linkedID, localVarRequestOptions, configuration) @@ -5474,7 +5407,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati * @param {*} [options] Override http request option. * @throws {RequiredError} */ - listTickets: async (type?: string, offset?: number, count?: number, sort?: Array, desc?: Array, query?: string, options: any = {}): Promise => { + listTickets: async (type?: string, offset?: number, count?: number, sort?: Array, desc?: Array, query?: string, options: AxiosRequestConfig = {}): Promise => { const localVarPath = `/tickets`; // use dummy base URL string because the URL constructor only accepts absolute URLs. const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); @@ -5513,7 +5446,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -5530,7 +5463,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati * @param {*} [options] Override http request option. * @throws {RequiredError} */ - removeArtifact: async (id: number, name: string, options: any = {}): Promise => { + removeArtifact: async (id: number, name: string, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('removeArtifact', 'id', id) // verify required parameter 'name' is not null or undefined @@ -5551,7 +5484,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -5568,7 +5501,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati * @param {*} [options] Override http request option. * @throws {RequiredError} */ - removeComment: async (id: number, commentID: number, options: any = {}): Promise => { + removeComment: async (id: number, commentID: number, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('removeComment', 'id', id) // verify required parameter 'commentID' is not null or undefined @@ -5589,7 +5522,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -5606,7 +5539,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati * @param {*} [options] Override http request option. * @throws {RequiredError} */ - removeTicketPlaybook: async (id: number, playbookID: string, options: any = {}): Promise => { + removeTicketPlaybook: async (id: number, playbookID: string, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('removeTicketPlaybook', 'id', id) // verify required parameter 'playbookID' is not null or undefined @@ -5627,7 +5560,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -5645,7 +5578,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati * @param {*} [options] Override http request option. * @throws {RequiredError} */ - runArtifact: async (id: number, name: string, automation: string, options: any = {}): Promise => { + runArtifact: async (id: number, name: string, automation: string, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('runArtifact', 'id', id) // verify required parameter 'name' is not null or undefined @@ -5669,7 +5602,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -5687,7 +5620,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati * @param {*} [options] Override http request option. * @throws {RequiredError} */ - runTask: async (id: number, playbookID: string, taskID: string, options: any = {}): Promise => { + runTask: async (id: number, playbookID: string, taskID: string, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('runTask', 'id', id) // verify required parameter 'playbookID' is not null or undefined @@ -5711,7 +5644,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -5729,7 +5662,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati * @param {*} [options] Override http request option. * @throws {RequiredError} */ - setArtifact: async (id: number, name: string, artifact: Artifact, options: any = {}): Promise => { + setArtifact: async (id: number, name: string, artifact: Artifact, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('setArtifact', 'id', id) // verify required parameter 'name' is not null or undefined @@ -5754,7 +5687,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati localVarHeaderParameter['Content-Type'] = 'application/json'; - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; localVarRequestOptions.data = serializeDataIfNeeded(artifact, localVarRequestOptions, configuration) @@ -5772,7 +5705,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati * @param {*} [options] Override http request option. * @throws {RequiredError} */ - setReferences: async (id: number, references: Array, options: any = {}): Promise => { + setReferences: async (id: number, references: Array, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('setReferences', 'id', id) // verify required parameter 'references' is not null or undefined @@ -5794,7 +5727,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati localVarHeaderParameter['Content-Type'] = 'application/json'; - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; localVarRequestOptions.data = serializeDataIfNeeded(references, localVarRequestOptions, configuration) @@ -5812,7 +5745,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati * @param {*} [options] Override http request option. * @throws {RequiredError} */ - setSchema: async (id: number, schema: string, options: any = {}): Promise => { + setSchema: async (id: number, schema: string, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('setSchema', 'id', id) // verify required parameter 'schema' is not null or undefined @@ -5834,7 +5767,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati localVarHeaderParameter['Content-Type'] = 'application/json'; - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; localVarRequestOptions.data = serializeDataIfNeeded(schema, localVarRequestOptions, configuration) @@ -5846,23 +5779,23 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati }, /** * - * @summary Set a ticket playbook task + * @summary Set a ticket playbook task data * @param {number} id Ticket ID * @param {string} playbookID Playbook ID * @param {string} taskID Task ID - * @param {Task} task Task + * @param {object} data Task data * @param {*} [options] Override http request option. * @throws {RequiredError} */ - setTask: async (id: number, playbookID: string, taskID: string, task: Task, options: any = {}): Promise => { + setTaskData: async (id: number, playbookID: string, taskID: string, data: object, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined - assertParamExists('setTask', 'id', id) + assertParamExists('setTaskData', 'id', id) // verify required parameter 'playbookID' is not null or undefined - assertParamExists('setTask', 'playbookID', playbookID) + assertParamExists('setTaskData', 'playbookID', playbookID) // verify required parameter 'taskID' is not null or undefined - assertParamExists('setTask', 'taskID', taskID) - // verify required parameter 'task' is not null or undefined - assertParamExists('setTask', 'task', task) + assertParamExists('setTaskData', 'taskID', taskID) + // verify required parameter 'data' is not null or undefined + assertParamExists('setTaskData', 'data', data) const localVarPath = `/tickets/{id}/playbooks/{playbookID}/task/{taskID}` .replace(`{${"id"}}`, encodeURIComponent(String(id))) .replace(`{${"playbookID"}}`, encodeURIComponent(String(playbookID))) @@ -5882,10 +5815,58 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati localVarHeaderParameter['Content-Type'] = 'application/json'; - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(task, localVarRequestOptions, configuration) + localVarRequestOptions.data = serializeDataIfNeeded(data, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Set a ticket playbook task owner + * @param {number} id Ticket ID + * @param {string} playbookID Playbook ID + * @param {string} taskID Task ID + * @param {string} owner Task owner + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + setTaskOwner: async (id: number, playbookID: string, taskID: string, owner: string, options: AxiosRequestConfig = {}): Promise => { + // verify required parameter 'id' is not null or undefined + assertParamExists('setTaskOwner', 'id', id) + // verify required parameter 'playbookID' is not null or undefined + assertParamExists('setTaskOwner', 'playbookID', playbookID) + // verify required parameter 'taskID' is not null or undefined + assertParamExists('setTaskOwner', 'taskID', taskID) + // verify required parameter 'owner' is not null or undefined + assertParamExists('setTaskOwner', 'owner', owner) + const localVarPath = `/tickets/{id}/playbooks/{playbookID}/task/{taskID}/owner` + .replace(`{${"id"}}`, encodeURIComponent(String(id))) + .replace(`{${"playbookID"}}`, encodeURIComponent(String(playbookID))) + .replace(`{${"taskID"}}`, encodeURIComponent(String(taskID))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(owner, localVarRequestOptions, configuration) return { url: toPathString(localVarUrlObj), @@ -5900,7 +5881,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati * @param {*} [options] Override http request option. * @throws {RequiredError} */ - unlinkTicket: async (id: number, linkedID: number, options: any = {}): Promise => { + unlinkTicket: async (id: number, linkedID: number, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('unlinkTicket', 'id', id) // verify required parameter 'linkedID' is not null or undefined @@ -5922,7 +5903,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati localVarHeaderParameter['Content-Type'] = 'application/json'; - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; localVarRequestOptions.data = serializeDataIfNeeded(linkedID, localVarRequestOptions, configuration) @@ -5940,7 +5921,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati * @param {*} [options] Override http request option. * @throws {RequiredError} */ - updateTicket: async (id: number, ticket: Ticket, options: any = {}): Promise => { + updateTicket: async (id: number, ticket: Ticket, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('updateTicket', 'id', id) // verify required parameter 'ticket' is not null or undefined @@ -5962,7 +5943,7 @@ export const TicketsApiAxiosParamCreator = function (configuration?: Configurati localVarHeaderParameter['Content-Type'] = 'application/json'; - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; localVarRequestOptions.data = serializeDataIfNeeded(ticket, localVarRequestOptions, configuration) @@ -5990,7 +5971,7 @@ export const TicketsApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async addArtifact(id: number, artifact: Artifact, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async addArtifact(id: number, artifact: Artifact, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.addArtifact(id, artifact, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -6002,7 +5983,7 @@ export const TicketsApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async addComment(id: number, comment: CommentForm, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async addComment(id: number, comment: CommentForm, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.addComment(id, comment, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -6014,7 +5995,7 @@ export const TicketsApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async addTicketPlaybook(id: number, playbook: PlaybookTemplateForm, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async addTicketPlaybook(id: number, playbook: PlaybookTemplateForm, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.addTicketPlaybook(id, playbook, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -6028,7 +6009,7 @@ export const TicketsApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async completeTask(id: number, playbookID: string, taskID: string, data: object, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async completeTask(id: number, playbookID: string, taskID: string, data: object, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.completeTask(id, playbookID, taskID, data, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -6039,7 +6020,7 @@ export const TicketsApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async createTicket(ticket: TicketForm, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async createTicket(ticket: TicketForm, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.createTicket(ticket, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -6050,7 +6031,7 @@ export const TicketsApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async createTicketBatch(ticket: Array, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async createTicketBatch(ticket: Array, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.createTicketBatch(ticket, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -6061,7 +6042,7 @@ export const TicketsApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async deleteTicket(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async deleteTicket(id: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.deleteTicket(id, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -6074,7 +6055,7 @@ export const TicketsApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async enrichArtifact(id: number, name: string, data: EnrichmentForm, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async enrichArtifact(id: number, name: string, data: EnrichmentForm, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.enrichArtifact(id, name, data, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -6086,7 +6067,7 @@ export const TicketsApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async getArtifact(id: number, name: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async getArtifact(id: number, name: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.getArtifact(id, name, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -6097,7 +6078,7 @@ export const TicketsApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async getTicket(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async getTicket(id: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.getTicket(id, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -6109,7 +6090,7 @@ export const TicketsApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async linkTicket(id: number, linkedID: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async linkTicket(id: number, linkedID: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.linkTicket(id, linkedID, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -6125,7 +6106,7 @@ export const TicketsApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async listTickets(type?: string, offset?: number, count?: number, sort?: Array, desc?: Array, query?: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async listTickets(type?: string, offset?: number, count?: number, sort?: Array, desc?: Array, query?: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.listTickets(type, offset, count, sort, desc, query, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -6137,7 +6118,7 @@ export const TicketsApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async removeArtifact(id: number, name: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async removeArtifact(id: number, name: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.removeArtifact(id, name, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -6149,7 +6130,7 @@ export const TicketsApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async removeComment(id: number, commentID: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async removeComment(id: number, commentID: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.removeComment(id, commentID, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -6161,7 +6142,7 @@ export const TicketsApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async removeTicketPlaybook(id: number, playbookID: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async removeTicketPlaybook(id: number, playbookID: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.removeTicketPlaybook(id, playbookID, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -6174,7 +6155,7 @@ export const TicketsApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async runArtifact(id: number, name: string, automation: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async runArtifact(id: number, name: string, automation: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.runArtifact(id, name, automation, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -6187,7 +6168,7 @@ export const TicketsApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async runTask(id: number, playbookID: string, taskID: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async runTask(id: number, playbookID: string, taskID: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.runTask(id, playbookID, taskID, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -6200,7 +6181,7 @@ export const TicketsApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async setArtifact(id: number, name: string, artifact: Artifact, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async setArtifact(id: number, name: string, artifact: Artifact, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.setArtifact(id, name, artifact, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -6212,7 +6193,7 @@ export const TicketsApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async setReferences(id: number, references: Array, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async setReferences(id: number, references: Array, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.setReferences(id, references, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -6224,22 +6205,36 @@ export const TicketsApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async setSchema(id: number, schema: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async setSchema(id: number, schema: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.setSchema(id, schema, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, /** * - * @summary Set a ticket playbook task + * @summary Set a ticket playbook task data * @param {number} id Ticket ID * @param {string} playbookID Playbook ID * @param {string} taskID Task ID - * @param {Task} task Task + * @param {object} data Task data * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async setTask(id: number, playbookID: string, taskID: string, task: Task, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.setTask(id, playbookID, taskID, task, options); + async setTaskData(id: number, playbookID: string, taskID: string, data: object, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.setTaskData(id, playbookID, taskID, data, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Set a ticket playbook task owner + * @param {number} id Ticket ID + * @param {string} playbookID Playbook ID + * @param {string} taskID Task ID + * @param {string} owner Task owner + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async setTaskOwner(id: number, playbookID: string, taskID: string, owner: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.setTaskOwner(id, playbookID, taskID, owner, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, /** @@ -6250,7 +6245,7 @@ export const TicketsApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async unlinkTicket(id: number, linkedID: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async unlinkTicket(id: number, linkedID: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.unlinkTicket(id, linkedID, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -6262,7 +6257,7 @@ export const TicketsApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async updateTicket(id: number, ticket: Ticket, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async updateTicket(id: number, ticket: Ticket, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.updateTicket(id, ticket, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -6504,16 +6499,29 @@ export const TicketsApiFactory = function (configuration?: Configuration, basePa }, /** * - * @summary Set a ticket playbook task + * @summary Set a ticket playbook task data * @param {number} id Ticket ID * @param {string} playbookID Playbook ID * @param {string} taskID Task ID - * @param {Task} task Task + * @param {object} data Task data * @param {*} [options] Override http request option. * @throws {RequiredError} */ - setTask(id: number, playbookID: string, taskID: string, task: Task, options?: any): AxiosPromise { - return localVarFp.setTask(id, playbookID, taskID, task, options).then((request) => request(axios, basePath)); + setTaskData(id: number, playbookID: string, taskID: string, data: object, options?: any): AxiosPromise { + return localVarFp.setTaskData(id, playbookID, taskID, data, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Set a ticket playbook task owner + * @param {number} id Ticket ID + * @param {string} playbookID Playbook ID + * @param {string} taskID Task ID + * @param {string} owner Task owner + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + setTaskOwner(id: number, playbookID: string, taskID: string, owner: string, options?: any): AxiosPromise { + return localVarFp.setTaskOwner(id, playbookID, taskID, owner, options).then((request) => request(axios, basePath)); }, /** * @@ -6556,7 +6564,7 @@ export class TicketsApi extends BaseAPI { * @throws {RequiredError} * @memberof TicketsApi */ - public addArtifact(id: number, artifact: Artifact, options?: any) { + public addArtifact(id: number, artifact: Artifact, options?: AxiosRequestConfig) { return TicketsApiFp(this.configuration).addArtifact(id, artifact, options).then((request) => request(this.axios, this.basePath)); } @@ -6569,7 +6577,7 @@ export class TicketsApi extends BaseAPI { * @throws {RequiredError} * @memberof TicketsApi */ - public addComment(id: number, comment: CommentForm, options?: any) { + public addComment(id: number, comment: CommentForm, options?: AxiosRequestConfig) { return TicketsApiFp(this.configuration).addComment(id, comment, options).then((request) => request(this.axios, this.basePath)); } @@ -6582,7 +6590,7 @@ export class TicketsApi extends BaseAPI { * @throws {RequiredError} * @memberof TicketsApi */ - public addTicketPlaybook(id: number, playbook: PlaybookTemplateForm, options?: any) { + public addTicketPlaybook(id: number, playbook: PlaybookTemplateForm, options?: AxiosRequestConfig) { return TicketsApiFp(this.configuration).addTicketPlaybook(id, playbook, options).then((request) => request(this.axios, this.basePath)); } @@ -6597,7 +6605,7 @@ export class TicketsApi extends BaseAPI { * @throws {RequiredError} * @memberof TicketsApi */ - public completeTask(id: number, playbookID: string, taskID: string, data: object, options?: any) { + public completeTask(id: number, playbookID: string, taskID: string, data: object, options?: AxiosRequestConfig) { return TicketsApiFp(this.configuration).completeTask(id, playbookID, taskID, data, options).then((request) => request(this.axios, this.basePath)); } @@ -6609,7 +6617,7 @@ export class TicketsApi extends BaseAPI { * @throws {RequiredError} * @memberof TicketsApi */ - public createTicket(ticket: TicketForm, options?: any) { + public createTicket(ticket: TicketForm, options?: AxiosRequestConfig) { return TicketsApiFp(this.configuration).createTicket(ticket, options).then((request) => request(this.axios, this.basePath)); } @@ -6621,7 +6629,7 @@ export class TicketsApi extends BaseAPI { * @throws {RequiredError} * @memberof TicketsApi */ - public createTicketBatch(ticket: Array, options?: any) { + public createTicketBatch(ticket: Array, options?: AxiosRequestConfig) { return TicketsApiFp(this.configuration).createTicketBatch(ticket, options).then((request) => request(this.axios, this.basePath)); } @@ -6633,7 +6641,7 @@ export class TicketsApi extends BaseAPI { * @throws {RequiredError} * @memberof TicketsApi */ - public deleteTicket(id: number, options?: any) { + public deleteTicket(id: number, options?: AxiosRequestConfig) { return TicketsApiFp(this.configuration).deleteTicket(id, options).then((request) => request(this.axios, this.basePath)); } @@ -6647,7 +6655,7 @@ export class TicketsApi extends BaseAPI { * @throws {RequiredError} * @memberof TicketsApi */ - public enrichArtifact(id: number, name: string, data: EnrichmentForm, options?: any) { + public enrichArtifact(id: number, name: string, data: EnrichmentForm, options?: AxiosRequestConfig) { return TicketsApiFp(this.configuration).enrichArtifact(id, name, data, options).then((request) => request(this.axios, this.basePath)); } @@ -6660,7 +6668,7 @@ export class TicketsApi extends BaseAPI { * @throws {RequiredError} * @memberof TicketsApi */ - public getArtifact(id: number, name: string, options?: any) { + public getArtifact(id: number, name: string, options?: AxiosRequestConfig) { return TicketsApiFp(this.configuration).getArtifact(id, name, options).then((request) => request(this.axios, this.basePath)); } @@ -6672,7 +6680,7 @@ export class TicketsApi extends BaseAPI { * @throws {RequiredError} * @memberof TicketsApi */ - public getTicket(id: number, options?: any) { + public getTicket(id: number, options?: AxiosRequestConfig) { return TicketsApiFp(this.configuration).getTicket(id, options).then((request) => request(this.axios, this.basePath)); } @@ -6685,7 +6693,7 @@ export class TicketsApi extends BaseAPI { * @throws {RequiredError} * @memberof TicketsApi */ - public linkTicket(id: number, linkedID: number, options?: any) { + public linkTicket(id: number, linkedID: number, options?: AxiosRequestConfig) { return TicketsApiFp(this.configuration).linkTicket(id, linkedID, options).then((request) => request(this.axios, this.basePath)); } @@ -6702,7 +6710,7 @@ export class TicketsApi extends BaseAPI { * @throws {RequiredError} * @memberof TicketsApi */ - public listTickets(type?: string, offset?: number, count?: number, sort?: Array, desc?: Array, query?: string, options?: any) { + public listTickets(type?: string, offset?: number, count?: number, sort?: Array, desc?: Array, query?: string, options?: AxiosRequestConfig) { return TicketsApiFp(this.configuration).listTickets(type, offset, count, sort, desc, query, options).then((request) => request(this.axios, this.basePath)); } @@ -6715,7 +6723,7 @@ export class TicketsApi extends BaseAPI { * @throws {RequiredError} * @memberof TicketsApi */ - public removeArtifact(id: number, name: string, options?: any) { + public removeArtifact(id: number, name: string, options?: AxiosRequestConfig) { return TicketsApiFp(this.configuration).removeArtifact(id, name, options).then((request) => request(this.axios, this.basePath)); } @@ -6728,7 +6736,7 @@ export class TicketsApi extends BaseAPI { * @throws {RequiredError} * @memberof TicketsApi */ - public removeComment(id: number, commentID: number, options?: any) { + public removeComment(id: number, commentID: number, options?: AxiosRequestConfig) { return TicketsApiFp(this.configuration).removeComment(id, commentID, options).then((request) => request(this.axios, this.basePath)); } @@ -6741,7 +6749,7 @@ export class TicketsApi extends BaseAPI { * @throws {RequiredError} * @memberof TicketsApi */ - public removeTicketPlaybook(id: number, playbookID: string, options?: any) { + public removeTicketPlaybook(id: number, playbookID: string, options?: AxiosRequestConfig) { return TicketsApiFp(this.configuration).removeTicketPlaybook(id, playbookID, options).then((request) => request(this.axios, this.basePath)); } @@ -6755,7 +6763,7 @@ export class TicketsApi extends BaseAPI { * @throws {RequiredError} * @memberof TicketsApi */ - public runArtifact(id: number, name: string, automation: string, options?: any) { + public runArtifact(id: number, name: string, automation: string, options?: AxiosRequestConfig) { return TicketsApiFp(this.configuration).runArtifact(id, name, automation, options).then((request) => request(this.axios, this.basePath)); } @@ -6769,7 +6777,7 @@ export class TicketsApi extends BaseAPI { * @throws {RequiredError} * @memberof TicketsApi */ - public runTask(id: number, playbookID: string, taskID: string, options?: any) { + public runTask(id: number, playbookID: string, taskID: string, options?: AxiosRequestConfig) { return TicketsApiFp(this.configuration).runTask(id, playbookID, taskID, options).then((request) => request(this.axios, this.basePath)); } @@ -6783,7 +6791,7 @@ export class TicketsApi extends BaseAPI { * @throws {RequiredError} * @memberof TicketsApi */ - public setArtifact(id: number, name: string, artifact: Artifact, options?: any) { + public setArtifact(id: number, name: string, artifact: Artifact, options?: AxiosRequestConfig) { return TicketsApiFp(this.configuration).setArtifact(id, name, artifact, options).then((request) => request(this.axios, this.basePath)); } @@ -6796,7 +6804,7 @@ export class TicketsApi extends BaseAPI { * @throws {RequiredError} * @memberof TicketsApi */ - public setReferences(id: number, references: Array, options?: any) { + public setReferences(id: number, references: Array, options?: AxiosRequestConfig) { return TicketsApiFp(this.configuration).setReferences(id, references, options).then((request) => request(this.axios, this.basePath)); } @@ -6809,23 +6817,38 @@ export class TicketsApi extends BaseAPI { * @throws {RequiredError} * @memberof TicketsApi */ - public setSchema(id: number, schema: string, options?: any) { + public setSchema(id: number, schema: string, options?: AxiosRequestConfig) { return TicketsApiFp(this.configuration).setSchema(id, schema, options).then((request) => request(this.axios, this.basePath)); } /** * - * @summary Set a ticket playbook task + * @summary Set a ticket playbook task data * @param {number} id Ticket ID * @param {string} playbookID Playbook ID * @param {string} taskID Task ID - * @param {Task} task Task + * @param {object} data Task data * @param {*} [options] Override http request option. * @throws {RequiredError} * @memberof TicketsApi */ - public setTask(id: number, playbookID: string, taskID: string, task: Task, options?: any) { - return TicketsApiFp(this.configuration).setTask(id, playbookID, taskID, task, options).then((request) => request(this.axios, this.basePath)); + public setTaskData(id: number, playbookID: string, taskID: string, data: object, options?: AxiosRequestConfig) { + return TicketsApiFp(this.configuration).setTaskData(id, playbookID, taskID, data, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Set a ticket playbook task owner + * @param {number} id Ticket ID + * @param {string} playbookID Playbook ID + * @param {string} taskID Task ID + * @param {string} owner Task owner + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof TicketsApi + */ + public setTaskOwner(id: number, playbookID: string, taskID: string, owner: string, options?: AxiosRequestConfig) { + return TicketsApiFp(this.configuration).setTaskOwner(id, playbookID, taskID, owner, options).then((request) => request(this.axios, this.basePath)); } /** @@ -6837,7 +6860,7 @@ export class TicketsApi extends BaseAPI { * @throws {RequiredError} * @memberof TicketsApi */ - public unlinkTicket(id: number, linkedID: number, options?: any) { + public unlinkTicket(id: number, linkedID: number, options?: AxiosRequestConfig) { return TicketsApiFp(this.configuration).unlinkTicket(id, linkedID, options).then((request) => request(this.axios, this.basePath)); } @@ -6850,7 +6873,7 @@ export class TicketsApi extends BaseAPI { * @throws {RequiredError} * @memberof TicketsApi */ - public updateTicket(id: number, ticket: Ticket, options?: any) { + public updateTicket(id: number, ticket: Ticket, options?: AxiosRequestConfig) { return TicketsApiFp(this.configuration).updateTicket(id, ticket, options).then((request) => request(this.axios, this.basePath)); } } @@ -6869,7 +6892,7 @@ export const TickettypesApiAxiosParamCreator = function (configuration?: Configu * @param {*} [options] Override http request option. * @throws {RequiredError} */ - createTicketType: async (tickettype: TicketTypeForm, options: any = {}): Promise => { + createTicketType: async (tickettype: TicketTypeForm, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'tickettype' is not null or undefined assertParamExists('createTicketType', 'tickettype', tickettype) const localVarPath = `/tickettypes`; @@ -6888,7 +6911,7 @@ export const TickettypesApiAxiosParamCreator = function (configuration?: Configu localVarHeaderParameter['Content-Type'] = 'application/json'; - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; localVarRequestOptions.data = serializeDataIfNeeded(tickettype, localVarRequestOptions, configuration) @@ -6905,7 +6928,7 @@ export const TickettypesApiAxiosParamCreator = function (configuration?: Configu * @param {*} [options] Override http request option. * @throws {RequiredError} */ - deleteTicketType: async (id: string, options: any = {}): Promise => { + deleteTicketType: async (id: string, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('deleteTicketType', 'id', id) const localVarPath = `/tickettypes/{id}` @@ -6923,7 +6946,7 @@ export const TickettypesApiAxiosParamCreator = function (configuration?: Configu - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -6939,7 +6962,7 @@ export const TickettypesApiAxiosParamCreator = function (configuration?: Configu * @param {*} [options] Override http request option. * @throws {RequiredError} */ - getTicketType: async (id: string, options: any = {}): Promise => { + getTicketType: async (id: string, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('getTicketType', 'id', id) const localVarPath = `/tickettypes/{id}` @@ -6957,7 +6980,7 @@ export const TickettypesApiAxiosParamCreator = function (configuration?: Configu - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -6972,7 +6995,7 @@ export const TickettypesApiAxiosParamCreator = function (configuration?: Configu * @param {*} [options] Override http request option. * @throws {RequiredError} */ - listTicketTypes: async (options: any = {}): Promise => { + listTicketTypes: async (options: AxiosRequestConfig = {}): Promise => { const localVarPath = `/tickettypes`; // use dummy base URL string because the URL constructor only accepts absolute URLs. const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); @@ -6987,7 +7010,7 @@ export const TickettypesApiAxiosParamCreator = function (configuration?: Configu - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -7004,7 +7027,7 @@ export const TickettypesApiAxiosParamCreator = function (configuration?: Configu * @param {*} [options] Override http request option. * @throws {RequiredError} */ - updateTicketType: async (id: string, tickettype: TicketTypeForm, options: any = {}): Promise => { + updateTicketType: async (id: string, tickettype: TicketTypeForm, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('updateTicketType', 'id', id) // verify required parameter 'tickettype' is not null or undefined @@ -7026,7 +7049,7 @@ export const TickettypesApiAxiosParamCreator = function (configuration?: Configu localVarHeaderParameter['Content-Type'] = 'application/json'; - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; localVarRequestOptions.data = serializeDataIfNeeded(tickettype, localVarRequestOptions, configuration) @@ -7053,7 +7076,7 @@ export const TickettypesApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async createTicketType(tickettype: TicketTypeForm, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async createTicketType(tickettype: TicketTypeForm, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.createTicketType(tickettype, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -7064,7 +7087,7 @@ export const TickettypesApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async deleteTicketType(id: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async deleteTicketType(id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.deleteTicketType(id, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -7075,7 +7098,7 @@ export const TickettypesApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async getTicketType(id: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async getTicketType(id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.getTicketType(id, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -7085,7 +7108,7 @@ export const TickettypesApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async listTicketTypes(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { + async listTicketTypes(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { const localVarAxiosArgs = await localVarAxiosParamCreator.listTicketTypes(options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -7097,7 +7120,7 @@ export const TickettypesApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async updateTicketType(id: string, tickettype: TicketTypeForm, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async updateTicketType(id: string, tickettype: TicketTypeForm, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.updateTicketType(id, tickettype, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -7179,7 +7202,7 @@ export class TickettypesApi extends BaseAPI { * @throws {RequiredError} * @memberof TickettypesApi */ - public createTicketType(tickettype: TicketTypeForm, options?: any) { + public createTicketType(tickettype: TicketTypeForm, options?: AxiosRequestConfig) { return TickettypesApiFp(this.configuration).createTicketType(tickettype, options).then((request) => request(this.axios, this.basePath)); } @@ -7191,7 +7214,7 @@ export class TickettypesApi extends BaseAPI { * @throws {RequiredError} * @memberof TickettypesApi */ - public deleteTicketType(id: string, options?: any) { + public deleteTicketType(id: string, options?: AxiosRequestConfig) { return TickettypesApiFp(this.configuration).deleteTicketType(id, options).then((request) => request(this.axios, this.basePath)); } @@ -7203,7 +7226,7 @@ export class TickettypesApi extends BaseAPI { * @throws {RequiredError} * @memberof TickettypesApi */ - public getTicketType(id: string, options?: any) { + public getTicketType(id: string, options?: AxiosRequestConfig) { return TickettypesApiFp(this.configuration).getTicketType(id, options).then((request) => request(this.axios, this.basePath)); } @@ -7214,7 +7237,7 @@ export class TickettypesApi extends BaseAPI { * @throws {RequiredError} * @memberof TickettypesApi */ - public listTicketTypes(options?: any) { + public listTicketTypes(options?: AxiosRequestConfig) { return TickettypesApiFp(this.configuration).listTicketTypes(options).then((request) => request(this.axios, this.basePath)); } @@ -7227,7 +7250,7 @@ export class TickettypesApi extends BaseAPI { * @throws {RequiredError} * @memberof TickettypesApi */ - public updateTicketType(id: string, tickettype: TicketTypeForm, options?: any) { + public updateTicketType(id: string, tickettype: TicketTypeForm, options?: AxiosRequestConfig) { return TickettypesApiFp(this.configuration).updateTicketType(id, tickettype, options).then((request) => request(this.axios, this.basePath)); } } @@ -7245,7 +7268,7 @@ export const UserdataApiAxiosParamCreator = function (configuration?: Configurat * @param {*} [options] Override http request option. * @throws {RequiredError} */ - currentUserData: async (options: any = {}): Promise => { + currentUserData: async (options: AxiosRequestConfig = {}): Promise => { const localVarPath = `/currentuserdata`; // use dummy base URL string because the URL constructor only accepts absolute URLs. const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); @@ -7260,7 +7283,7 @@ export const UserdataApiAxiosParamCreator = function (configuration?: Configurat - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -7276,7 +7299,7 @@ export const UserdataApiAxiosParamCreator = function (configuration?: Configurat * @param {*} [options] Override http request option. * @throws {RequiredError} */ - getUserData: async (id: string, options: any = {}): Promise => { + getUserData: async (id: string, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('getUserData', 'id', id) const localVarPath = `/userdata/{id}` @@ -7294,7 +7317,7 @@ export const UserdataApiAxiosParamCreator = function (configuration?: Configurat - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -7309,7 +7332,7 @@ export const UserdataApiAxiosParamCreator = function (configuration?: Configurat * @param {*} [options] Override http request option. * @throws {RequiredError} */ - listUserData: async (options: any = {}): Promise => { + listUserData: async (options: AxiosRequestConfig = {}): Promise => { const localVarPath = `/userdata`; // use dummy base URL string because the URL constructor only accepts absolute URLs. const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); @@ -7324,7 +7347,7 @@ export const UserdataApiAxiosParamCreator = function (configuration?: Configurat - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -7340,7 +7363,7 @@ export const UserdataApiAxiosParamCreator = function (configuration?: Configurat * @param {*} [options] Override http request option. * @throws {RequiredError} */ - updateCurrentUserData: async (userdata: UserData, options: any = {}): Promise => { + updateCurrentUserData: async (userdata: UserData, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'userdata' is not null or undefined assertParamExists('updateCurrentUserData', 'userdata', userdata) const localVarPath = `/currentuserdata`; @@ -7359,7 +7382,7 @@ export const UserdataApiAxiosParamCreator = function (configuration?: Configurat localVarHeaderParameter['Content-Type'] = 'application/json'; - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; localVarRequestOptions.data = serializeDataIfNeeded(userdata, localVarRequestOptions, configuration) @@ -7377,7 +7400,7 @@ export const UserdataApiAxiosParamCreator = function (configuration?: Configurat * @param {*} [options] Override http request option. * @throws {RequiredError} */ - updateUserData: async (id: string, userdata: UserData, options: any = {}): Promise => { + updateUserData: async (id: string, userdata: UserData, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('updateUserData', 'id', id) // verify required parameter 'userdata' is not null or undefined @@ -7399,7 +7422,7 @@ export const UserdataApiAxiosParamCreator = function (configuration?: Configurat localVarHeaderParameter['Content-Type'] = 'application/json'; - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; localVarRequestOptions.data = serializeDataIfNeeded(userdata, localVarRequestOptions, configuration) @@ -7425,7 +7448,7 @@ export const UserdataApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async currentUserData(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async currentUserData(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.currentUserData(options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -7436,7 +7459,7 @@ export const UserdataApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async getUserData(id: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async getUserData(id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.getUserData(id, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -7446,7 +7469,7 @@ export const UserdataApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async listUserData(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { + async listUserData(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { const localVarAxiosArgs = await localVarAxiosParamCreator.listUserData(options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -7457,7 +7480,7 @@ export const UserdataApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async updateCurrentUserData(userdata: UserData, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async updateCurrentUserData(userdata: UserData, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.updateCurrentUserData(userdata, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -7469,7 +7492,7 @@ export const UserdataApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async updateUserData(id: string, userdata: UserData, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async updateUserData(id: string, userdata: UserData, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.updateUserData(id, userdata, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -7549,7 +7572,7 @@ export class UserdataApi extends BaseAPI { * @throws {RequiredError} * @memberof UserdataApi */ - public currentUserData(options?: any) { + public currentUserData(options?: AxiosRequestConfig) { return UserdataApiFp(this.configuration).currentUserData(options).then((request) => request(this.axios, this.basePath)); } @@ -7561,7 +7584,7 @@ export class UserdataApi extends BaseAPI { * @throws {RequiredError} * @memberof UserdataApi */ - public getUserData(id: string, options?: any) { + public getUserData(id: string, options?: AxiosRequestConfig) { return UserdataApiFp(this.configuration).getUserData(id, options).then((request) => request(this.axios, this.basePath)); } @@ -7572,7 +7595,7 @@ export class UserdataApi extends BaseAPI { * @throws {RequiredError} * @memberof UserdataApi */ - public listUserData(options?: any) { + public listUserData(options?: AxiosRequestConfig) { return UserdataApiFp(this.configuration).listUserData(options).then((request) => request(this.axios, this.basePath)); } @@ -7584,7 +7607,7 @@ export class UserdataApi extends BaseAPI { * @throws {RequiredError} * @memberof UserdataApi */ - public updateCurrentUserData(userdata: UserData, options?: any) { + public updateCurrentUserData(userdata: UserData, options?: AxiosRequestConfig) { return UserdataApiFp(this.configuration).updateCurrentUserData(userdata, options).then((request) => request(this.axios, this.basePath)); } @@ -7597,7 +7620,7 @@ export class UserdataApi extends BaseAPI { * @throws {RequiredError} * @memberof UserdataApi */ - public updateUserData(id: string, userdata: UserData, options?: any) { + public updateUserData(id: string, userdata: UserData, options?: AxiosRequestConfig) { return UserdataApiFp(this.configuration).updateUserData(id, userdata, options).then((request) => request(this.axios, this.basePath)); } } @@ -7616,7 +7639,7 @@ export const UsersApiAxiosParamCreator = function (configuration?: Configuration * @param {*} [options] Override http request option. * @throws {RequiredError} */ - createUser: async (user: UserForm, options: any = {}): Promise => { + createUser: async (user: UserForm, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'user' is not null or undefined assertParamExists('createUser', 'user', user) const localVarPath = `/users`; @@ -7635,7 +7658,7 @@ export const UsersApiAxiosParamCreator = function (configuration?: Configuration localVarHeaderParameter['Content-Type'] = 'application/json'; - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; localVarRequestOptions.data = serializeDataIfNeeded(user, localVarRequestOptions, configuration) @@ -7651,7 +7674,7 @@ export const UsersApiAxiosParamCreator = function (configuration?: Configuration * @param {*} [options] Override http request option. * @throws {RequiredError} */ - currentUser: async (options: any = {}): Promise => { + currentUser: async (options: AxiosRequestConfig = {}): Promise => { const localVarPath = `/currentuser`; // use dummy base URL string because the URL constructor only accepts absolute URLs. const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); @@ -7666,7 +7689,7 @@ export const UsersApiAxiosParamCreator = function (configuration?: Configuration - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -7682,7 +7705,7 @@ export const UsersApiAxiosParamCreator = function (configuration?: Configuration * @param {*} [options] Override http request option. * @throws {RequiredError} */ - deleteUser: async (id: string, options: any = {}): Promise => { + deleteUser: async (id: string, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('deleteUser', 'id', id) const localVarPath = `/users/{id}` @@ -7700,7 +7723,7 @@ export const UsersApiAxiosParamCreator = function (configuration?: Configuration - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -7716,7 +7739,7 @@ export const UsersApiAxiosParamCreator = function (configuration?: Configuration * @param {*} [options] Override http request option. * @throws {RequiredError} */ - getUser: async (id: string, options: any = {}): Promise => { + getUser: async (id: string, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('getUser', 'id', id) const localVarPath = `/users/{id}` @@ -7734,7 +7757,7 @@ export const UsersApiAxiosParamCreator = function (configuration?: Configuration - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -7749,7 +7772,7 @@ export const UsersApiAxiosParamCreator = function (configuration?: Configuration * @param {*} [options] Override http request option. * @throws {RequiredError} */ - listUsers: async (options: any = {}): Promise => { + listUsers: async (options: AxiosRequestConfig = {}): Promise => { const localVarPath = `/users`; // use dummy base URL string because the URL constructor only accepts absolute URLs. const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); @@ -7764,7 +7787,7 @@ export const UsersApiAxiosParamCreator = function (configuration?: Configuration - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; @@ -7781,7 +7804,7 @@ export const UsersApiAxiosParamCreator = function (configuration?: Configuration * @param {*} [options] Override http request option. * @throws {RequiredError} */ - updateUser: async (id: string, user: UserForm, options: any = {}): Promise => { + updateUser: async (id: string, user: UserForm, options: AxiosRequestConfig = {}): Promise => { // verify required parameter 'id' is not null or undefined assertParamExists('updateUser', 'id', id) // verify required parameter 'user' is not null or undefined @@ -7803,7 +7826,7 @@ export const UsersApiAxiosParamCreator = function (configuration?: Configuration localVarHeaderParameter['Content-Type'] = 'application/json'; - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + setSearchParams(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; localVarRequestOptions.data = serializeDataIfNeeded(user, localVarRequestOptions, configuration) @@ -7830,7 +7853,7 @@ export const UsersApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async createUser(user: UserForm, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async createUser(user: UserForm, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.createUser(user, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -7840,7 +7863,7 @@ export const UsersApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async currentUser(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async currentUser(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.currentUser(options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -7851,7 +7874,7 @@ export const UsersApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async deleteUser(id: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async deleteUser(id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.deleteUser(id, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -7862,7 +7885,7 @@ export const UsersApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async getUser(id: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async getUser(id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.getUser(id, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -7872,7 +7895,7 @@ export const UsersApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async listUsers(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { + async listUsers(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { const localVarAxiosArgs = await localVarAxiosParamCreator.listUsers(options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -7884,7 +7907,7 @@ export const UsersApiFp = function(configuration?: Configuration) { * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async updateUser(id: string, user: UserForm, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + async updateUser(id: string, user: UserForm, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { const localVarAxiosArgs = await localVarAxiosParamCreator.updateUser(id, user, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, @@ -7975,7 +7998,7 @@ export class UsersApi extends BaseAPI { * @throws {RequiredError} * @memberof UsersApi */ - public createUser(user: UserForm, options?: any) { + public createUser(user: UserForm, options?: AxiosRequestConfig) { return UsersApiFp(this.configuration).createUser(user, options).then((request) => request(this.axios, this.basePath)); } @@ -7986,7 +8009,7 @@ export class UsersApi extends BaseAPI { * @throws {RequiredError} * @memberof UsersApi */ - public currentUser(options?: any) { + public currentUser(options?: AxiosRequestConfig) { return UsersApiFp(this.configuration).currentUser(options).then((request) => request(this.axios, this.basePath)); } @@ -7998,7 +8021,7 @@ export class UsersApi extends BaseAPI { * @throws {RequiredError} * @memberof UsersApi */ - public deleteUser(id: string, options?: any) { + public deleteUser(id: string, options?: AxiosRequestConfig) { return UsersApiFp(this.configuration).deleteUser(id, options).then((request) => request(this.axios, this.basePath)); } @@ -8010,7 +8033,7 @@ export class UsersApi extends BaseAPI { * @throws {RequiredError} * @memberof UsersApi */ - public getUser(id: string, options?: any) { + public getUser(id: string, options?: AxiosRequestConfig) { return UsersApiFp(this.configuration).getUser(id, options).then((request) => request(this.axios, this.basePath)); } @@ -8021,7 +8044,7 @@ export class UsersApi extends BaseAPI { * @throws {RequiredError} * @memberof UsersApi */ - public listUsers(options?: any) { + public listUsers(options?: AxiosRequestConfig) { return UsersApiFp(this.configuration).listUsers(options).then((request) => request(this.axios, this.basePath)); } @@ -8034,7 +8057,7 @@ export class UsersApi extends BaseAPI { * @throws {RequiredError} * @memberof UsersApi */ - public updateUser(id: string, user: UserForm, options?: any) { + public updateUser(id: string, user: UserForm, options?: AxiosRequestConfig) { return UsersApiFp(this.configuration).updateUser(id, user, options).then((request) => request(this.axios, this.basePath)); } } diff --git a/ui/src/client/base.ts b/ui/src/client/base.ts index d4ff370..1a37ab9 100644 --- a/ui/src/client/base.ts +++ b/ui/src/client/base.ts @@ -16,7 +16,7 @@ import { Configuration } from "./configuration"; // Some imports not used depending on template conditions // @ts-ignore -import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import globalAxios, { AxiosPromise, AxiosInstance, AxiosRequestConfig } from 'axios'; export const BASE_PATH = "http://./api".replace(/\/+$/, ""); @@ -38,7 +38,7 @@ export const COLLECTION_FORMATS = { */ export interface RequestArgs { url: string; - options: any; + options: AxiosRequestConfig; } /** diff --git a/ui/src/client/common.ts b/ui/src/client/common.ts index 3d1fd99..0d69aae 100644 --- a/ui/src/client/common.ts +++ b/ui/src/client/common.ts @@ -14,8 +14,8 @@ import { Configuration } from "./configuration"; -import { RequiredError, RequestArgs } from "./base"; -import { AxiosInstance } from 'axios'; +import { RequiredError, RequestArgs } from "./base"; +import { AxiosInstance, AxiosResponse } from 'axios'; /** * @@ -131,8 +131,8 @@ export const toPathString = function (url: URL) { * @export */ export const createRequestFunction = function (axiosArgs: RequestArgs, globalAxios: AxiosInstance, BASE_PATH: string, configuration?: Configuration) { - return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => { + return >(axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => { const axiosRequestArgs = {...axiosArgs.options, url: (configuration?.basePath || basePath) + axiosArgs.url}; - return axios.request(axiosRequestArgs); + return axios.request(axiosRequestArgs); }; } diff --git a/ui/src/components/snippets/ArtifactSnippet.vue b/ui/src/components/snippets/ArtifactSnippet.vue index 4b573dd..607776f 100644 --- a/ui/src/components/snippets/ArtifactSnippet.vue +++ b/ui/src/components/snippets/ArtifactSnippet.vue @@ -40,10 +40,10 @@ export default Vue.extend({ return icon; }, statusColor: function () { - let color = TypeColorEnum.Info; + let color = TypeColorEnum.Info as TypeColorEnum; this.lodash.forEach(this.$store.state.settings.artifactStates, (state: Type) => { if (this.artifact.status === state.id && state.color) { - color = state.color + color = state.color; } }) return color; diff --git a/ui/src/suggestions/grammar/CAQLLexer.js b/ui/src/suggestions/grammar/CAQLLexer.js index 3a65707..78a6b10 100644 --- a/ui/src/suggestions/grammar/CAQLLexer.js +++ b/ui/src/suggestions/grammar/CAQLLexer.js @@ -1,4 +1,4 @@ -// Generated from CAQLLexer.g4 by ANTLR 4.9.2 +// Generated from CAQLLexer.g4 by ANTLR 4.9.3 // jshint ignore: start import antlr4 from 'antlr4'; diff --git a/ui/src/suggestions/grammar/CAQLParser.js b/ui/src/suggestions/grammar/CAQLParser.js index fc295fe..377e10f 100644 --- a/ui/src/suggestions/grammar/CAQLParser.js +++ b/ui/src/suggestions/grammar/CAQLParser.js @@ -1,4 +1,4 @@ -// Generated from CAQLParser.g4 by ANTLR 4.9.2 +// Generated from CAQLParser.g4 by ANTLR 4.9.3 // jshint ignore: start import antlr4 from 'antlr4'; import CAQLParserListener from './CAQLParserListener.js'; diff --git a/ui/src/suggestions/grammar/CAQLParserListener.js b/ui/src/suggestions/grammar/CAQLParserListener.js index 36af753..4bf0dd4 100644 --- a/ui/src/suggestions/grammar/CAQLParserListener.js +++ b/ui/src/suggestions/grammar/CAQLParserListener.js @@ -1,4 +1,4 @@ -// Generated from CAQLParser.g4 by ANTLR 4.9.2 +// Generated from CAQLParser.g4 by ANTLR 4.9.3 // jshint ignore: start import antlr4 from 'antlr4'; diff --git a/ui/src/views/ArtifactPopup.vue b/ui/src/views/ArtifactPopup.vue index 89d924e..6febd28 100644 --- a/ui/src/views/ArtifactPopup.vue +++ b/ui/src/views/ArtifactPopup.vue @@ -203,7 +203,7 @@ export default Vue.extend({ return icon; }, statusColor: function (status: string) { - let color = TypeColorEnum.Info; + let color = TypeColorEnum.Info as TypeColorEnum; this.lodash.forEach(this.$store.state.settings.artifactStates, (state: Type) => { if (status === state.id && state.color) { color = state.color diff --git a/ui/src/views/Job.vue b/ui/src/views/Job.vue index 1cdeb64..a5471fe 100644 --- a/ui/src/views/Job.vue +++ b/ui/src/views/Job.vue @@ -152,7 +152,7 @@ export default Vue.extend({ } }, loadAutomations() { - API.listAutomations(this.$route.params.id).then((response) => { + API.listAutomations().then((response) => { this.automations = response.data; }); }, diff --git a/ui/src/views/Ticket.vue b/ui/src/views/Ticket.vue index 3b571d8..0c5132d 100644 --- a/ui/src/views/Ticket.vue +++ b/ui/src/views/Ticket.vue @@ -1145,30 +1145,13 @@ export default Vue.extend({ this.selectedTask = undefined; this.selectedTaskPlaybook = undefined; }, - toTaskForm(task: TaskResponse): Task { - return { - automation: task.automation, - closed: task.closed, - created: task.created, - data: task.data, - done: task.done, - join: task.join, - payload: task.payload, - name: task.name, - next: task.next, - owner: task.owner, - schema: task.schema, - type: task.type.toString() as TaskTypeEnum, - } as Task - }, save(playbookID: string, taskID: string) { if (!this.ticket || !this.ticket.id || !this.ticket.playbooks) { return; } - let task = this.ticket.playbooks[playbookID].tasks[taskID] - task.data = this.tdata[playbookID.toString() + "-" + taskID]; - API.setTask(this.ticket.id, playbookID, taskID, this.toTaskForm(task)).then((response) => { + let data = this.tdata[playbookID.toString() + "-" + taskID]; + API.setTaskData(this.ticket.id, playbookID, taskID, data).then((response) => { this.$store.dispatch("alertSuccess", { name: "Task saved" }); this.setTicket(response.data); }); @@ -1181,9 +1164,7 @@ export default Vue.extend({ return; } - let task = this.ticket.playbooks[playbookID].tasks[taskID] - task.owner = owner - API.setTask(this.ticket.id, playbookID, taskID, this.toTaskForm(task)).then((response) => { + API.setTaskOwner(this.ticket.id, playbookID, taskID, owner).then((response) => { this.$store.dispatch("alertSuccess", { name: "Owner saved" }); this.setTicket(response.data); if (response.data.playbooks) { diff --git a/ui/src/views/User.vue b/ui/src/views/User.vue index a533045..42e9d54 100644 --- a/ui/src/views/User.vue +++ b/ui/src/views/User.vue @@ -49,7 +49,7 @@