diff --git a/cmd/api/src/api/v2/opengraphschema.go b/cmd/api/src/api/v2/opengraphschema.go index cf328983fd7..f13d0662173 100644 --- a/cmd/api/src/api/v2/opengraphschema.go +++ b/cmd/api/src/api/v2/opengraphschema.go @@ -51,7 +51,7 @@ type GraphExtensionPayload struct { GraphSchemaRelationshipKinds []GraphSchemaRelationshipKindsPayload `json:"relationship_kinds"` GraphSchemaNodeKinds []GraphSchemaNodeKindsPayload `json:"node_kinds"` GraphEnvironments []EnvironmentPayload `json:"environments"` - GraphRelationshipFindings []RelationshipFindingsPayload `json:"relationship_findings"` + GraphRelationshipFindings []FindingsPayload `json:"relationship_findings"` } type GraphSchemaExtensionPayload struct { @@ -88,13 +88,13 @@ type EnvironmentPayload struct { PrincipalKinds []string `json:"principal_kinds"` } -type RelationshipFindingsPayload struct { - Name string `json:"name"` - DisplayName string `json:"display_name"` - SourceKind string `json:"source_kind"` - RelationshipKind string `json:"relationship_kind"` - EnvironmentKind string `json:"environment_kind"` - Remediation RemediationPayload `json:"remediation"` +type FindingsPayload struct { + Name string `json:"name"` + DisplayName string `json:"display_name"` + SourceKind string `json:"source_kind"` + Kind string `json:"kind"` + EnvironmentKind string `json:"environment_kind"` + Remediation RemediationPayload `json:"remediation"` } type RemediationPayload struct { @@ -240,12 +240,12 @@ func convertGraphExtensionPayloadToGraphExtension(payload GraphExtensionPayload) }) } for _, findingPayload := range payload.GraphRelationshipFindings { - graphExtension.RelationshipFindingsInput = append(graphExtension.RelationshipFindingsInput, model.RelationshipFindingInput{ - Name: findingPayload.Name, - DisplayName: findingPayload.DisplayName, - SourceKindName: findingPayload.SourceKind, - RelationshipKindName: findingPayload.RelationshipKind, - EnvironmentKindName: findingPayload.EnvironmentKind, + graphExtension.FindingsInput = append(graphExtension.FindingsInput, model.FindingInput{ + Name: findingPayload.Name, + DisplayName: findingPayload.DisplayName, + SourceKindName: findingPayload.SourceKind, + KindName: findingPayload.Kind, + EnvironmentKindName: findingPayload.EnvironmentKind, RemediationInput: model.RemediationInput{ ShortDescription: findingPayload.Remediation.ShortDescription, LongDescription: findingPayload.Remediation.LongDescription, diff --git a/cmd/api/src/api/v2/opengraphschema_internal_test.go b/cmd/api/src/api/v2/opengraphschema_internal_test.go index 3b918a9dd9a..a8af27109ea 100644 --- a/cmd/api/src/api/v2/opengraphschema_internal_test.go +++ b/cmd/api/src/api/v2/opengraphschema_internal_test.go @@ -73,13 +73,13 @@ func Test_convertGraphExtensionPayloadToGraphExtension(t *testing.T) { PrincipalKinds: []string{"User"}, }, }, - GraphRelationshipFindings: []RelationshipFindingsPayload{ + GraphRelationshipFindings: []FindingsPayload{ { - Name: "Finding_1", - DisplayName: "Finding 1", - SourceKind: "Source_Kind_1", - RelationshipKind: "GraphSchemaEdgeKind_1", - EnvironmentKind: "EnvironmentInput", + Name: "Finding_1", + DisplayName: "Finding 1", + SourceKind: "Source_Kind_1", + Kind: "GraphSchemaEdgeKind_1", + EnvironmentKind: "EnvironmentInput", Remediation: RemediationPayload{ ShortDescription: "remediation for Finding_1", LongDescription: "a remediation for Finding 1", @@ -130,13 +130,13 @@ func Test_convertGraphExtensionPayloadToGraphExtension(t *testing.T) { PrincipalKinds: []string{"User"}, }, }, - RelationshipFindingsInput: []model.RelationshipFindingInput{ + FindingsInput: []model.FindingInput{ { - Name: "Finding_1", - DisplayName: "Finding 1", - SourceKindName: "Source_Kind_1", - RelationshipKindName: "GraphSchemaEdgeKind_1", - EnvironmentKindName: "EnvironmentInput", + Name: "Finding_1", + DisplayName: "Finding 1", + SourceKindName: "Source_Kind_1", + KindName: "GraphSchemaEdgeKind_1", + EnvironmentKindName: "EnvironmentInput", RemediationInput: model.RemediationInput{ ShortDescription: "remediation for Finding_1", LongDescription: "a remediation for Finding 1", diff --git a/cmd/api/src/api/v2/opengraphschema_test.go b/cmd/api/src/api/v2/opengraphschema_test.go index fce74ee16af..35b54f16f5b 100644 --- a/cmd/api/src/api/v2/opengraphschema_test.go +++ b/cmd/api/src/api/v2/opengraphschema_test.go @@ -89,13 +89,13 @@ func TestResources_OpenGraphSchemaIngest(t *testing.T) { PrincipalKinds: []string{"User"}, }, }, - GraphRelationshipFindings: []v2.RelationshipFindingsPayload{ + GraphRelationshipFindings: []v2.FindingsPayload{ { - Name: "TEST_Finding_1", - DisplayName: "Finding 1", - SourceKind: "Source_Kind_1", - RelationshipKind: "TEST_GraphSchemaEdgeKind_1", - EnvironmentKind: "TEST_EnvironmentInput", + Name: "TEST_Finding_1", + DisplayName: "Finding 1", + SourceKind: "Source_Kind_1", + Kind: "TEST_GraphSchemaEdgeKind_1", + EnvironmentKind: "TEST_EnvironmentInput", Remediation: v2.RemediationPayload{ ShortDescription: "remediation for Finding_1", LongDescription: "a remediation for Finding 1", @@ -145,13 +145,13 @@ func TestResources_OpenGraphSchemaIngest(t *testing.T) { PrincipalKinds: []string{"User"}, }, }, - RelationshipFindingsInput: []model.RelationshipFindingInput{ + FindingsInput: []model.FindingInput{ { - Name: "TEST_Finding_1", - DisplayName: "Finding 1", - SourceKindName: "Source_Kind_1", - RelationshipKindName: "TEST_GraphSchemaEdgeKind_1", - EnvironmentKindName: "TEST_EnvironmentInput", + Name: "TEST_Finding_1", + DisplayName: "Finding 1", + SourceKindName: "Source_Kind_1", + KindName: "TEST_GraphSchemaEdgeKind_1", + EnvironmentKindName: "TEST_EnvironmentInput", RemediationInput: model.RemediationInput{ ShortDescription: "remediation for Finding_1", LongDescription: "a remediation for Finding 1", diff --git a/cmd/api/src/database/assetgrouptags.go b/cmd/api/src/database/assetgrouptags.go index 5ec31eb02fb..670492dbea0 100644 --- a/cmd/api/src/database/assetgrouptags.go +++ b/cmd/api/src/database/assetgrouptags.go @@ -32,10 +32,6 @@ import ( "gorm.io/gorm" ) -const ( - kindTable = "kind" -) - // AssetGroupTagData defines the methods required to interact with the asset_group_tags table type AssetGroupTagData interface { CreateAssetGroupTag(ctx context.Context, tagType model.AssetGroupTagType, user model.User, name string, description string, position null.Int32, requireCertify null.Bool, glyph null.String) (model.AssetGroupTag, error) @@ -361,7 +357,7 @@ func (s *BloodhoundDB) CreateAssetGroupTag(ctx context.Context, tagType model.As INSERT INTO %s (type, kind_id, name, description, created_at, created_by, updated_at, updated_by, position, require_certify, analysis_enabled, glyph) VALUES (?, (SELECT id FROM inserted_kind), ?, ?, NOW(), ?, NOW(), ?, ?, ?, ?, ?) RETURNING id, type, kind_id, name, description, created_at, created_by, updated_at, updated_by, position, require_certify, analysis_enabled, glyph - `, kindTable, tag.TableName()) + `, model.Kind{}.TableName(), tag.TableName()) if result := tx.Raw(query, tag.KindName(), @@ -481,7 +477,7 @@ func (s *BloodhoundDB) UpdateAssetGroupTag(ctx context.Context, user model.User, } else { if origTag.Name != tag.Name { if result := tx.Exec( - fmt.Sprintf(`UPDATE %s SET name = ? WHERE id = ?`, kindTable), + fmt.Sprintf(`UPDATE %s SET name = ? WHERE id = ?`, model.Kind{}.TableName()), tag.KindName(), tag.KindId, ); result.Error != nil { diff --git a/cmd/api/src/database/graphschema.go b/cmd/api/src/database/graphschema.go index d20d2b0692d..cef2cbaf2da 100644 --- a/cmd/api/src/database/graphschema.go +++ b/cmd/api/src/database/graphschema.go @@ -323,13 +323,13 @@ func (s *BloodhoundDB) GetGraphSchemaNodeKinds(ctx context.Context, filters mode FROM %s nk JOIN %s k ON nk.kind_id = k.id %s %s %s`, - model.GraphSchemaNodeKind{}.TableName(), kindTable, filterAndPagination.WhereClause, filterAndPagination.OrderSql, filterAndPagination.SkipLimit) + model.GraphSchemaNodeKind{}.TableName(), model.Kind{}.TableName(), filterAndPagination.WhereClause, filterAndPagination.OrderSql, filterAndPagination.SkipLimit) if result := s.db.WithContext(ctx).Raw(sqlStr, filterAndPagination.Filter.params...).Scan(&schemaNodeKinds); result.Error != nil { return nil, 0, CheckError(result) } else { if limit > 0 || skip > 0 { countSqlStr := fmt.Sprintf(`SELECT COUNT(*) FROM %s nk JOIN %s k ON nk.kind_id = k.id %s`, - model.GraphSchemaNodeKind{}.TableName(), kindTable, filterAndPagination.WhereClause) + model.GraphSchemaNodeKind{}.TableName(), model.Kind{}.TableName(), filterAndPagination.WhereClause) if countResult := s.db.WithContext(ctx).Raw(countSqlStr, filterAndPagination.Filter.params...).Scan(&totalRowCount); countResult.Error != nil { return model.GraphSchemaNodeKinds{}, 0, CheckError(countResult) } @@ -346,8 +346,8 @@ func (s *BloodhoundDB) GetGraphSchemaNodeKindById(ctx context.Context, schemaNod var schemaNodeKind model.GraphSchemaNodeKind if result := s.db.WithContext(ctx).Raw(fmt.Sprintf(` SELECT %s.id, name, schema_extension_id, display_name, description, is_display_kind, icon, icon_color, created_at, updated_at, deleted_at - FROM %s JOIN %s ON %s.kind_id = %s.id WHERE %s.id = ?`, schemaNodeKind.TableName(), schemaNodeKind.TableName(), kindTable, - schemaNodeKind.TableName(), kindTable, schemaNodeKind.TableName()), schemaNodeKindId).First(&schemaNodeKind); result.Error != nil { + FROM %s JOIN %s ON %s.kind_id = %s.id WHERE %s.id = ?`, schemaNodeKind.TableName(), schemaNodeKind.TableName(), model.Kind{}.TableName(), + schemaNodeKind.TableName(), model.Kind{}.TableName(), schemaNodeKind.TableName()), schemaNodeKindId).First(&schemaNodeKind); result.Error != nil { return model.GraphSchemaNodeKind{}, CheckError(result) } return schemaNodeKind, nil @@ -366,10 +366,10 @@ func (s *BloodhoundDB) UpdateGraphSchemaNodeKind(ctx context.Context, schemaNode WHERE id = ? RETURNING id, kind_id, schema_extension_id, display_name, description, is_display_kind, icon, icon_color, created_at, updated_at, deleted_at ) - SELECT updated_row.id, %s.name, schema_extension_id, display_name, description, is_display_kind, icon, icon_color, created_at, updated_at, deleted_at + SELECT updated_row.id, k.name, schema_extension_id, display_name, description, is_display_kind, icon, icon_color, created_at, updated_at, deleted_at FROM updated_row - JOIN %s ON %s.id = updated_row.kind_id`, - schemaNodeKind.TableName(), kindTable, kindTable, kindTable), schemaNodeKind.SchemaExtensionId, + JOIN %s k ON k.id = updated_row.kind_id`, + schemaNodeKind.TableName(), model.Kind{}.TableName()), schemaNodeKind.SchemaExtensionId, schemaNodeKind.DisplayName, schemaNodeKind.Description, schemaNodeKind.IsDisplayKind, schemaNodeKind.Icon, schemaNodeKind.IconColor, schemaNodeKind.ID).Scan(&schemaNodeKind); result.Error != nil { if strings.Contains(result.Error.Error(), DuplicateKeyValueErrorString) { @@ -541,14 +541,14 @@ func (s *BloodhoundDB) GetGraphSchemaRelationshipKinds(ctx context.Context, rela FROM %s ek JOIN %s k ON ek.kind_id = k.id %s %s %s`, - model.GraphSchemaRelationshipKind{}.TableName(), kindTable, filterAndPagination.WhereClause, + model.GraphSchemaRelationshipKind{}.TableName(), model.Kind{}.TableName(), filterAndPagination.WhereClause, filterAndPagination.OrderSql, filterAndPagination.SkipLimit) if result := s.db.WithContext(ctx).Raw(sqlStr, filterAndPagination.Filter.params...).Scan(&schemaRelationshipKinds); result.Error != nil { return nil, 0, CheckError(result) } else { if limit > 0 || skip > 0 { countSqlStr := fmt.Sprintf(`SELECT COUNT(*) FROM %s ek JOIN %s k on ek.kind_id = k.id %s`, - model.GraphSchemaRelationshipKind{}.TableName(), kindTable, filterAndPagination.WhereClause) + model.GraphSchemaRelationshipKind{}.TableName(), model.Kind{}.TableName(), filterAndPagination.WhereClause) if countResult := s.db.WithContext(ctx).Raw(countSqlStr, filterAndPagination.Filter.params...).Scan(&totalRowCount); countResult.Error != nil { return model.GraphSchemaRelationshipKinds{}, 0, CheckError(countResult) } @@ -573,7 +573,7 @@ func (s *BloodhoundDB) GetGraphSchemaRelationshipKindsWithSchemaName(ctx context FROM %s edge JOIN %s schema ON edge.schema_extension_id = schema.id JOIN %s k ON edge.kind_id = k.id %s %s %s`, model.GraphSchemaRelationshipKind{}.TableName(), model.GraphSchemaExtension{}.TableName(), - kindTable, + model.Kind{}.TableName(), filterAndPagination.WhereClause, filterAndPagination.OrderSql, filterAndPagination.SkipLimit) @@ -583,7 +583,7 @@ func (s *BloodhoundDB) GetGraphSchemaRelationshipKindsWithSchemaName(ctx context } else { if limit > 0 || skip > 0 { countSqlStr := fmt.Sprintf(`SELECT COUNT(*) FROM %s edge JOIN %s schema ON edge.schema_extension_id = schema.id JOIN %s k ON edge.kind_id = k.id %s`, - model.GraphSchemaRelationshipKind{}.TableName(), model.GraphSchemaExtension{}.TableName(), kindTable, + model.GraphSchemaRelationshipKind{}.TableName(), model.GraphSchemaExtension{}.TableName(), model.Kind{}.TableName(), filterAndPagination.WhereClause) if countResult := s.db.WithContext(ctx).Raw(countSqlStr, filterAndPagination.Filter.params...).Scan(&totalRowCount); countResult.Error != nil { return model.GraphSchemaRelationshipKindsWithNamedSchema{}, 0, CheckError(countResult) @@ -602,8 +602,8 @@ func (s *BloodhoundDB) GetGraphSchemaRelationshipKindById(ctx context.Context, s var schemaRelationshipKind model.GraphSchemaRelationshipKind if result := s.db.WithContext(ctx).Raw(fmt.Sprintf(` SELECT %s.id, name, schema_extension_id, description, is_traversable, created_at, updated_at, deleted_at - FROM %s JOIN %s ON %s.kind_id = %s.id WHERE %s.id = ?`, schemaRelationshipKind.TableName(), schemaRelationshipKind.TableName(), kindTable, - schemaRelationshipKind.TableName(), kindTable, schemaRelationshipKind.TableName()), schemaRelationshipKindId).First(&schemaRelationshipKind); result.Error != nil { + FROM %s JOIN %s ON %s.kind_id = %s.id WHERE %s.id = ?`, schemaRelationshipKind.TableName(), schemaRelationshipKind.TableName(), model.Kind{}.TableName(), + schemaRelationshipKind.TableName(), model.Kind{}.TableName(), schemaRelationshipKind.TableName()), schemaRelationshipKindId).First(&schemaRelationshipKind); result.Error != nil { return schemaRelationshipKind, CheckError(result) } return schemaRelationshipKind, nil @@ -622,10 +622,10 @@ func (s *BloodhoundDB) UpdateGraphSchemaRelationshipKind(ctx context.Context, sc WHERE id = ? RETURNING id, kind_id, schema_extension_id, description, is_traversable, created_at, updated_at, deleted_at ) - SELECT updated_row.id, %s.name, schema_extension_id, description, is_traversable, created_at, updated_at, deleted_at + SELECT updated_row.id, k.name, schema_extension_id, description, is_traversable, created_at, updated_at, deleted_at FROM updated_row - JOIN %s ON %s.id = updated_row.kind_id`, - schemaRelationshipKind.TableName(), kindTable, kindTable, kindTable), + JOIN %s k ON k.id = updated_row.kind_id`, + schemaRelationshipKind.TableName(), model.Kind{}.TableName()), schemaRelationshipKind.SchemaExtensionId, schemaRelationshipKind.Description, schemaRelationshipKind.IsTraversable, schemaRelationshipKind.ID).Scan(&schemaRelationshipKind); result.Error != nil { if strings.Contains(result.Error.Error(), DuplicateKeyValueErrorString) { @@ -710,7 +710,7 @@ func (s *BloodhoundDB) GetEnvironmentsByExtensionId(ctx context.Context, extensi JOIN %s k ON e.environment_kind_id = k.id WHERE schema_extension_id = ? ORDER BY id`, - model.SchemaEnvironment{}.TableName(), kindTable), extensionId).Scan(&environments); result.Error != nil { + model.SchemaEnvironment{}.TableName(), model.Kind{}.TableName()), extensionId).Scan(&environments); result.Error != nil { return nil, CheckError(result) } diff --git a/cmd/api/src/database/graphschema_integration_test.go b/cmd/api/src/database/graphschema_integration_test.go index 5da993a911f..e2f107da1b3 100644 --- a/cmd/api/src/database/graphschema_integration_test.go +++ b/cmd/api/src/database/graphschema_integration_test.go @@ -2851,7 +2851,7 @@ func TestDatabase_GraphSchemaRelationshipKind_CRUD(t *testing.T) { rk.SchemaExtensionId == want.SchemaExtensionId { // Additional validations for the found item - assert.Greater(t, rk.ID, int32(0), "RelationshipKind %v - ID is invalid", rk.Name) + assert.Greater(t, rk.ID, int32(0), "Kind %v - ID is invalid", rk.Name) found = true break @@ -3612,7 +3612,7 @@ func TestDatabase_GetGraphSchemaRelationshipKindsWithSchemaName(t *testing.T) { rk.SchemaName == want.SchemaName { // Additional validations for the found item - assert.Greater(t, rk.ID, int32(0), "RelationshipKind %v - ID is invalid", rk.Name) + assert.Greater(t, rk.ID, int32(0), "Kind %v - ID is invalid", rk.Name) found = true break diff --git a/cmd/api/src/database/upsert_schema_extension.go b/cmd/api/src/database/upsert_schema_extension.go index a1d88831816..08551b40157 100644 --- a/cmd/api/src/database/upsert_schema_extension.go +++ b/cmd/api/src/database/upsert_schema_extension.go @@ -67,7 +67,7 @@ func (s *BloodhoundDB) UpsertOpenGraphExtension(ctx context.Context, graphExtens graphExtensionInput.EnvironmentsInput); err != nil { return schemaExists, err } else if err = bloodhoundDBTransaction.upsertFindingsAndRemediations(ctx, createdExtension.ID, - graphExtensionInput.RelationshipFindingsInput); err != nil { + graphExtensionInput.FindingsInput); err != nil { return schemaExists, err } else if err = tx.Commit().Error; err != nil { return schemaExists, err @@ -155,10 +155,10 @@ func (s *BloodhoundDB) upsertGraphEnvironments(ctx context.Context, extensionID } // upsertFindingsAndRemediations - inserts a slice of new findings/remediations for the provided extension. -func (s *BloodhoundDB) upsertFindingsAndRemediations(ctx context.Context, extensionId int32, findings model.RelationshipFindingsInput) error { +func (s *BloodhoundDB) upsertFindingsAndRemediations(ctx context.Context, extensionId int32, findings model.FindingsInput) error { for _, finding := range findings { if schemaFinding, err := s.UpsertFinding(ctx, extensionId, finding.SourceKindName, - finding.RelationshipKindName, finding.EnvironmentKindName, finding.Name, finding.DisplayName); err != nil { + finding.KindName, finding.EnvironmentKindName, finding.Name, finding.DisplayName); err != nil { return fmt.Errorf("failed to upsert finding: %w", err) } else { if err := s.UpsertRemediation(ctx, schemaFinding.ID, finding.RemediationInput.ShortDescription, diff --git a/cmd/api/src/database/upsert_schema_extension_integration_test.go b/cmd/api/src/database/upsert_schema_extension_integration_test.go index 8bf52963c0b..dec13ecd63d 100644 --- a/cmd/api/src/database/upsert_schema_extension_integration_test.go +++ b/cmd/api/src/database/upsert_schema_extension_integration_test.go @@ -152,12 +152,12 @@ func TestBloodhoundDB_UpsertOpenGraphExtension(t *testing.T) { SourceKindName: newSourceNodeKind.Name, PrincipalKinds: []string{newNodeKind3.Name, newNodeKind4.Name}, } - newFinding1 = model.RelationshipFindingInput{ - Name: "Upsert_New_Finding_1", - EnvironmentKindName: newEnvironmentNodeKind1.Name, - SourceKindName: newSourceNodeKind.Name, - DisplayName: "Finding 1", - RelationshipKindName: newEdgeKind1.Name, + newFinding1 = model.FindingInput{ + Name: "Upsert_New_Finding_1", + EnvironmentKindName: newEnvironmentNodeKind1.Name, + SourceKindName: newSourceNodeKind.Name, + DisplayName: "Finding 1", + KindName: newEdgeKind1.Name, RemediationInput: model.RemediationInput{ ShortDescription: "a remediation", LongDescription: "a remediation but longer", @@ -165,12 +165,12 @@ func TestBloodhoundDB_UpsertOpenGraphExtension(t *testing.T) { LongRemediation: "do x but also y", }, } - newFinding2 = model.RelationshipFindingInput{ - Name: "Upsert_New_Finding_2", - EnvironmentKindName: newEnvironmentNodeKind1.Name, - SourceKindName: newSourceNodeKind.Name, - DisplayName: "Finding 2", - RelationshipKindName: newEdgeKind2.Name, + newFinding2 = model.FindingInput{ + Name: "Upsert_New_Finding_2", + EnvironmentKindName: newEnvironmentNodeKind1.Name, + SourceKindName: newSourceNodeKind.Name, + DisplayName: "Finding 2", + KindName: newEdgeKind2.Name, RemediationInput: model.RemediationInput{ ShortDescription: "a remediation", LongDescription: "a remediation but longer", @@ -178,12 +178,12 @@ func TestBloodhoundDB_UpsertOpenGraphExtension(t *testing.T) { LongRemediation: "do x but also y", }, } - newFinding3 = model.RelationshipFindingInput{ - Name: "Upsert_New_Finding_3", - EnvironmentKindName: newEnvironmentNodeKind2.Name, - SourceKindName: newSourceNodeKind.Name, - DisplayName: "Finding 3", - RelationshipKindName: newEdgeKind3.Name, + newFinding3 = model.FindingInput{ + Name: "Upsert_New_Finding_3", + EnvironmentKindName: newEnvironmentNodeKind2.Name, + SourceKindName: newSourceNodeKind.Name, + DisplayName: "Finding 3", + KindName: newEdgeKind3.Name, RemediationInput: model.RemediationInput{ ShortDescription: "a remediation", LongDescription: "a remediation but longer", @@ -302,12 +302,12 @@ func TestBloodhoundDB_UpsertOpenGraphExtension(t *testing.T) { SourceKindName: existingSourceKind1.Name, PrincipalKinds: []string{existingNodeKind3.Name, existingNodeKind4.Name}, } - existingFinding1 = model.RelationshipFindingInput{ - Name: "Upsert_Existing_Finding_1", - EnvironmentKindName: existingEnvironmentNodeKind1.Name, - SourceKindName: existingSourceKind1.Name, - RelationshipKindName: existingEdgeKind1.Name, - DisplayName: "Existing Finding 1", + existingFinding1 = model.FindingInput{ + Name: "Upsert_Existing_Finding_1", + EnvironmentKindName: existingEnvironmentNodeKind1.Name, + SourceKindName: existingSourceKind1.Name, + KindName: existingEdgeKind1.Name, + DisplayName: "Existing Finding 1", RemediationInput: model.RemediationInput{ ShortDescription: "A short description", LongDescription: "A long description", @@ -315,12 +315,12 @@ func TestBloodhoundDB_UpsertOpenGraphExtension(t *testing.T) { LongRemediation: "A long remediation", }, } - existingFinding2 = model.RelationshipFindingInput{ - Name: "Upsert_Existing_Finding_2", - EnvironmentKindName: existingEnvironmentNodeKind2.Name, - SourceKindName: existingSourceKind1.Name, - RelationshipKindName: existingEdgeKind2.Name, - DisplayName: "Existing Finding 2", + existingFinding2 = model.FindingInput{ + Name: "Upsert_Existing_Finding_2", + EnvironmentKindName: existingEnvironmentNodeKind2.Name, + SourceKindName: existingSourceKind1.Name, + KindName: existingEdgeKind2.Name, + DisplayName: "Existing Finding 2", RemediationInput: model.RemediationInput{ ShortDescription: "A short description", LongDescription: "A long description", @@ -353,12 +353,12 @@ func TestBloodhoundDB_UpsertOpenGraphExtension(t *testing.T) { SourceKindName: newSourceNodeKind.Name, PrincipalKinds: []string{newNodeKind1.Name, existingNodeKind1.Name, updateNodeKind4.Name}, } - updateFinding1 = model.RelationshipFindingInput{ - Name: "Upsert_Update_Finding_1", - EnvironmentKindName: existingEnvironmentNodeKind1.Name, - SourceKindName: newSourceNodeKind.Name, - RelationshipKindName: updateEdgeKind4.Name, - DisplayName: "Update Finding 1", + updateFinding1 = model.FindingInput{ + Name: "Upsert_Update_Finding_1", + EnvironmentKindName: existingEnvironmentNodeKind1.Name, + SourceKindName: newSourceNodeKind.Name, + KindName: updateEdgeKind4.Name, + DisplayName: "Update Finding 1", RemediationInput: model.RemediationInput{ ShortDescription: "A short description", LongDescription: "A long description", @@ -373,7 +373,7 @@ func TestBloodhoundDB_UpsertOpenGraphExtension(t *testing.T) { existingEdgeKinds = model.RelationshipsInput{existingEdgeKind1, existingEdgeKind2, existingEdgeKind3, existingEdgeKind4} existingProperties = model.PropertiesInput{existingProperty1, existingProperty2, existingProperty3, existingProperty4} existingEnvironments = model.EnvironmentsInput{existingEnvironment1, existingEnvironment2} - existingFindings = model.RelationshipFindingsInput{existingFinding1, existingFinding2} + existingFindings = model.FindingsInput{existingFinding1, existingFinding2} // Used in both args and want, in doing so the SchemaExtensionId will be propagated back to the want // value, this allows for equality comparisons of the SchemaExtensionId rather than just checking @@ -383,7 +383,7 @@ func TestBloodhoundDB_UpsertOpenGraphExtension(t *testing.T) { newEdgeKinds = model.RelationshipsInput{newEdgeKind1, newEdgeKind2, newEdgeKind3, newEdgeKind4} newProperties = model.PropertiesInput{newProperty1, newProperty2, newProperty3, newProperty4} newEnvironments = model.EnvironmentsInput{newEnvironment1, newEnvironment2} - newFindings = model.RelationshipFindingsInput{newFinding1, newFinding2, newFinding3} + newFindings = model.FindingsInput{newFinding1, newFinding2, newFinding3} updateProperties = model.PropertiesInput{newProperty1, newProperty2, newProperty3, newProperty4, existingProperty1, updateProperty4} @@ -392,7 +392,7 @@ func TestBloodhoundDB_UpsertOpenGraphExtension(t *testing.T) { updateNodeKinds = model.NodesInput{newNodeKind1, newNodeKind2, newNodeKind3, newNodeKind4, existingNodeKind1, existingSourceKind1, newEnvironmentNodeKind1, updateNodeKind4, newSourceNodeKind} updateEnvironments = model.EnvironmentsInput{newEnvironment1, updateEnvironment1} - updateFindings = model.RelationshipFindingsInput{newFinding1, updateFinding1} + updateFindings = model.FindingsInput{newFinding1, updateFinding1} ) type fields struct { @@ -686,23 +686,23 @@ func TestBloodhoundDB_UpsertOpenGraphExtension(t *testing.T) { }, args: args{ graphExtension: model.GraphExtensionInput{ - ExtensionInput: testExtension, - NodeKindsInput: newNodeKinds, - RelationshipKindsInput: newEdgeKinds, - PropertiesInput: newProperties, - EnvironmentsInput: newEnvironments, - RelationshipFindingsInput: newFindings, + ExtensionInput: testExtension, + NodeKindsInput: newNodeKinds, + RelationshipKindsInput: newEdgeKinds, + PropertiesInput: newProperties, + EnvironmentsInput: newEnvironments, + FindingsInput: newFindings, }, }, wantErr: nil, want: false, wantGraphSchema: model.GraphExtensionInput{ - ExtensionInput: testExtension, - NodeKindsInput: newNodeKinds, - RelationshipKindsInput: newEdgeKinds, - PropertiesInput: newProperties, - EnvironmentsInput: newEnvironments, - RelationshipFindingsInput: newFindings, + ExtensionInput: testExtension, + NodeKindsInput: newNodeKinds, + RelationshipKindsInput: newEdgeKinds, + PropertiesInput: newProperties, + EnvironmentsInput: newEnvironments, + FindingsInput: newFindings, }, }, { @@ -748,7 +748,7 @@ func TestBloodhoundDB_UpsertOpenGraphExtension(t *testing.T) { ) schemaFinding, err = testSuite.BHDatabase.UpsertFinding(testSuite.Context, createdExtension.ID, - finding.SourceKindName, finding.RelationshipKindName, finding.EnvironmentKindName, + finding.SourceKindName, finding.KindName, finding.EnvironmentKindName, finding.Name, finding.DisplayName) require.NoError(t, err) @@ -772,24 +772,24 @@ func TestBloodhoundDB_UpsertOpenGraphExtension(t *testing.T) { }, args: args{ graphExtension: model.GraphExtensionInput{ - ExtensionInput: testExtension, - PropertiesInput: updateProperties, - RelationshipKindsInput: updateEdgeKinds, - NodeKindsInput: updateNodeKinds, - EnvironmentsInput: updateEnvironments, - RelationshipFindingsInput: updateFindings, + ExtensionInput: testExtension, + PropertiesInput: updateProperties, + RelationshipKindsInput: updateEdgeKinds, + NodeKindsInput: updateNodeKinds, + EnvironmentsInput: updateEnvironments, + FindingsInput: updateFindings, }, }, wantErr: nil, want: true, wantGraphSchema: model.GraphExtensionInput{ - ExtensionInput: testExtension, - PropertiesInput: updateProperties, - RelationshipKindsInput: updateEdgeKinds, - NodeKindsInput: updateNodeKinds, - EnvironmentsInput: updateEnvironments, - RelationshipFindingsInput: updateFindings, + ExtensionInput: testExtension, + PropertiesInput: updateProperties, + RelationshipKindsInput: updateEdgeKinds, + NodeKindsInput: updateNodeKinds, + EnvironmentsInput: updateEnvironments, + FindingsInput: updateFindings, }, }, { name: "success - insert new OpenGraph extension with one already present", // not update, two different extensions @@ -834,7 +834,7 @@ func TestBloodhoundDB_UpsertOpenGraphExtension(t *testing.T) { ) schemaFinding, err = testSuite.BHDatabase.UpsertFinding(testSuite.Context, createdExtension.ID, - finding.SourceKindName, finding.RelationshipKindName, finding.EnvironmentKindName, + finding.SourceKindName, finding.KindName, finding.EnvironmentKindName, finding.Name, finding.DisplayName) require.NoError(t, err) @@ -865,11 +865,11 @@ func TestBloodhoundDB_UpsertOpenGraphExtension(t *testing.T) { Version: "v1.0.0", Namespace: "TWO", }, - PropertiesInput: newProperties, - RelationshipKindsInput: newEdgeKinds, - NodeKindsInput: newNodeKinds, - EnvironmentsInput: newEnvironments, - RelationshipFindingsInput: newFindings, + PropertiesInput: newProperties, + RelationshipKindsInput: newEdgeKinds, + NodeKindsInput: newNodeKinds, + EnvironmentsInput: newEnvironments, + FindingsInput: newFindings, }, }, want: false, @@ -880,11 +880,11 @@ func TestBloodhoundDB_UpsertOpenGraphExtension(t *testing.T) { Version: "v1.0.0", Namespace: "TWO", }, - PropertiesInput: newProperties, - RelationshipKindsInput: newEdgeKinds, - NodeKindsInput: newNodeKinds, - EnvironmentsInput: newEnvironments, - RelationshipFindingsInput: newFindings, + PropertiesInput: newProperties, + RelationshipKindsInput: newEdgeKinds, + NodeKindsInput: newNodeKinds, + EnvironmentsInput: newEnvironments, + FindingsInput: newFindings, }, }, { @@ -915,14 +915,14 @@ func TestBloodhoundDB_UpsertOpenGraphExtension(t *testing.T) { PrincipalKinds: newEnvironment1.PrincipalKinds, }, }, - RelationshipFindingsInput: model.RelationshipFindingsInput{ + FindingsInput: model.FindingsInput{ { - Name: newFinding1.Name, - DisplayName: newFinding1.DisplayName, - SourceKindName: "UnregisteredSourceKind", - RelationshipKindName: newFinding1.RelationshipKindName, - EnvironmentKindName: newEnvironment1.EnvironmentKindName, - RemediationInput: newFinding1.RemediationInput, + Name: newFinding1.Name, + DisplayName: newFinding1.DisplayName, + SourceKindName: "UnregisteredSourceKind", + KindName: newFinding1.KindName, + EnvironmentKindName: newEnvironment1.EnvironmentKindName, + RemediationInput: newFinding1.RemediationInput, }, }, }, @@ -940,14 +940,14 @@ func TestBloodhoundDB_UpsertOpenGraphExtension(t *testing.T) { PrincipalKinds: newEnvironment1.PrincipalKinds, }, }, - RelationshipFindingsInput: model.RelationshipFindingsInput{ + FindingsInput: model.FindingsInput{ { - Name: newFinding1.Name, - DisplayName: newFinding1.DisplayName, - SourceKindName: "UnregisteredSourceKind", - RelationshipKindName: newFinding1.RelationshipKindName, - EnvironmentKindName: newEnvironment1.EnvironmentKindName, - RemediationInput: newFinding1.RemediationInput, + Name: newFinding1.Name, + DisplayName: newFinding1.DisplayName, + SourceKindName: "UnregisteredSourceKind", + KindName: newFinding1.KindName, + EnvironmentKindName: newEnvironment1.EnvironmentKindName, + RemediationInput: newFinding1.RemediationInput, }, }, }, @@ -1157,33 +1157,33 @@ func getAndCompareGraphExtension(t *testing.T, testContext context.Context, db * gotSchemaRelationshipFinding, err = db.GetSchemaFindingsBySchemaExtensionId(testContext, gotGraphExtension.ID) require.NoError(t, err) - require.Equalf(t, len(want.RelationshipFindingsInput), len(gotSchemaRelationshipFinding), "mismatched number of findings") + require.Equalf(t, len(want.FindingsInput), len(gotSchemaRelationshipFinding), "mismatched number of findings") for i, finding := range gotSchemaRelationshipFinding { // Finding require.Greater(t, finding.ID, int32(0)) - require.Equalf(t, gotGraphExtension.ID, finding.SchemaExtensionId, "RelationshipFindingInput - graph schema extension id should be greater than 0") + require.Equalf(t, gotGraphExtension.ID, finding.SchemaExtensionId, "FindingInput - graph schema extension id should be greater than 0") dawgsFindingRelationshipKind, err = db.GetKindById(testContext, finding.KindId) require.NoError(t, err) - require.Equalf(t, want.RelationshipFindingsInput[i].RelationshipKindName, dawgsFindingRelationshipKind.Name, "RelationshipFindingInput - relationship kind name mismatch") + require.Equalf(t, want.FindingsInput[i].KindName, dawgsFindingRelationshipKind.Name, "FindingInput - relationship kind name mismatch") findingEnvironment, err = db.GetEnvironmentById(testContext, finding.EnvironmentId) require.NoError(t, err) dawgsFindingEnvironmentKind, err = db.GetKindById(testContext, findingEnvironment.EnvironmentKindId) require.NoError(t, err) - require.Equalf(t, want.RelationshipFindingsInput[i].EnvironmentKindName, dawgsFindingEnvironmentKind.Name, "RelationshipFindingInput - environment kind name mismatch") + require.Equalf(t, want.FindingsInput[i].EnvironmentKindName, dawgsFindingEnvironmentKind.Name, "FindingInput - environment kind name mismatch") - require.Equalf(t, want.RelationshipFindingsInput[i].Name, finding.Name, "RelationshipFindingInput - name mismatch") - require.Equalf(t, want.RelationshipFindingsInput[i].DisplayName, finding.DisplayName, "RelationshipFindingInput - display name mismatch") + require.Equalf(t, want.FindingsInput[i].Name, finding.Name, "FindingInput - name mismatch") + require.Equalf(t, want.FindingsInput[i].DisplayName, finding.DisplayName, "FindingInput - display name mismatch") // Remediation gotRemediation, err = db.GetRemediationByFindingId(testContext, finding.ID) require.NoError(t, err) - require.Equalf(t, want.RelationshipFindingsInput[i].RemediationInput.ShortRemediation, gotRemediation.ShortRemediation, "Remediation - short_remediation mismatch") - require.Equalf(t, want.RelationshipFindingsInput[i].RemediationInput.LongRemediation, gotRemediation.LongRemediation, "Remediation - long_remediation mismatch") - require.Equalf(t, want.RelationshipFindingsInput[i].RemediationInput.ShortDescription, gotRemediation.ShortDescription, "Remediation - short_description mismatch") - require.Equalf(t, want.RelationshipFindingsInput[i].RemediationInput.LongDescription, gotRemediation.LongDescription, "Remediation - long_description mismatch") + require.Equalf(t, want.FindingsInput[i].RemediationInput.ShortRemediation, gotRemediation.ShortRemediation, "Remediation - short_remediation mismatch") + require.Equalf(t, want.FindingsInput[i].RemediationInput.LongRemediation, gotRemediation.LongRemediation, "Remediation - long_remediation mismatch") + require.Equalf(t, want.FindingsInput[i].RemediationInput.ShortDescription, gotRemediation.ShortDescription, "Remediation - short_description mismatch") + require.Equalf(t, want.FindingsInput[i].RemediationInput.LongDescription, gotRemediation.LongDescription, "Remediation - long_description mismatch") } diff --git a/cmd/api/src/database/upsert_schema_finding.go b/cmd/api/src/database/upsert_schema_finding.go index ea8b88650d6..e654d3b9a12 100644 --- a/cmd/api/src/database/upsert_schema_finding.go +++ b/cmd/api/src/database/upsert_schema_finding.go @@ -25,8 +25,8 @@ import ( // UpsertFinding validates and upserts a finding. // If a finding with the same name exists, it will be deleted and re-created. -func (s *BloodhoundDB) UpsertFinding(ctx context.Context, extensionId int32, sourceKindName, relationshipKindName, environmentKind string, name, displayName string) (model.SchemaFinding, error) { - relationshipKindId, err := s.validateAndTranslateRelationshipKind(ctx, relationshipKindName) +func (s *BloodhoundDB) UpsertFinding(ctx context.Context, extensionId int32, sourceKindName, kindName, environmentKind string, name, displayName string) (model.SchemaFinding, error) { + kindId, err := s.validateAndTranslateKind(ctx, kindName) if err != nil { return model.SchemaFinding{}, err } @@ -48,7 +48,7 @@ func (s *BloodhoundDB) UpsertFinding(ctx context.Context, extensionId int32, sou return model.SchemaFinding{}, err } - finding, err := s.replaceFinding(ctx, extensionId, relationshipKindId, environment.ID, name, displayName) + finding, err := s.replaceFinding(ctx, extensionId, kindId, environment.ID, name, displayName) if err != nil { return model.SchemaFinding{}, err } @@ -56,12 +56,12 @@ func (s *BloodhoundDB) UpsertFinding(ctx context.Context, extensionId int32, sou return finding, nil } -// validateAndTranslateRelationshipKind validates that the relationship kind exists in the kinds table. -func (s *BloodhoundDB) validateAndTranslateRelationshipKind(ctx context.Context, relationshipKindName string) (int32, error) { - if relationshipKind, err := s.GetKindByName(ctx, relationshipKindName); err != nil && !errors.Is(err, ErrNotFound) { - return 0, fmt.Errorf("error retrieving relationship kind '%s': %w", relationshipKindName, err) +// validateAndTranslateKind validates that the kind exists in the kinds table. +func (s *BloodhoundDB) validateAndTranslateKind(ctx context.Context, kindName string) (int32, error) { + if relationshipKind, err := s.GetKindByName(ctx, kindName); err != nil && !errors.Is(err, ErrNotFound) { + return 0, fmt.Errorf("error retrieving kind '%s': %w", kindName, err) } else if errors.Is(err, ErrNotFound) { - return 0, fmt.Errorf("relationship kind '%s' not found", relationshipKindName) + return 0, fmt.Errorf("kind '%s' not found", kindName) } else { return relationshipKind.ID, nil } diff --git a/cmd/api/src/database/upsert_schema_finding_integration_test.go b/cmd/api/src/database/upsert_schema_finding_integration_test.go index 3a05d6dbae3..89662b579be 100644 --- a/cmd/api/src/database/upsert_schema_finding_integration_test.go +++ b/cmd/api/src/database/upsert_schema_finding_integration_test.go @@ -30,7 +30,7 @@ import ( func TestBloodhoundDB_UpsertFinding(t *testing.T) { type args struct { - sourceKindName, relationshipKindName, environmentKind, name, displayName string + sourceKindName, kindName, environmentKind, name, displayName string } tests := []struct { name string @@ -56,9 +56,9 @@ func TestBloodhoundDB_UpsertFinding(t *testing.T) { return ext.ID }, args: args{ - sourceKindName: "Base", - relationshipKindName: "Tag_Tier_Zero", - environmentKind: "Tag_Tier_Zero", + sourceKindName: "Base", + kindName: "Tag_Tier_Zero", + environmentKind: "Tag_Tier_Zero", // Name triggers upsert so this needs to match the finding's name that we want to update name: "Finding Name", displayName: "Updated Display Name", @@ -88,11 +88,11 @@ func TestBloodhoundDB_UpsertFinding(t *testing.T) { return ext.ID }, args: args{ - sourceKindName: "Base", - relationshipKindName: "Tag_Tier_Zero", - environmentKind: "Tag_Tier_Zero", - name: "Finding", - displayName: "Finding Display Name", + sourceKindName: "Base", + kindName: "Tag_Tier_Zero", + environmentKind: "Tag_Tier_Zero", + name: "Finding", + displayName: "Finding Display Name", }, assert: func(t *testing.T, db *database.BloodhoundDB, extensionId int32) { t.Helper() @@ -121,7 +121,7 @@ func TestBloodhoundDB_UpsertFinding(t *testing.T) { context.Background(), extensionId, tt.args.sourceKindName, - tt.args.relationshipKindName, + tt.args.kindName, tt.args.environmentKind, tt.args.name, tt.args.displayName, diff --git a/cmd/api/src/model/graphschema.go b/cmd/api/src/model/graphschema.go index babce2998f8..d201ad94965 100644 --- a/cmd/api/src/model/graphschema.go +++ b/cmd/api/src/model/graphschema.go @@ -247,22 +247,22 @@ type GraphSchemaRelationshipKindsWithNamedSchema []GraphSchemaRelationshipKindWi // Graph Extension Upsert Input type GraphExtensionInput struct { - ExtensionInput ExtensionInput - PropertiesInput PropertiesInput - RelationshipKindsInput RelationshipsInput - NodeKindsInput NodesInput - EnvironmentsInput EnvironmentsInput - RelationshipFindingsInput RelationshipFindingsInput -} - -type RelationshipFindingsInput []RelationshipFindingInput -type RelationshipFindingInput struct { - Name string - DisplayName string - SourceKindName string - RelationshipKindName string // edge kind - EnvironmentKindName string - RemediationInput RemediationInput + ExtensionInput ExtensionInput + PropertiesInput PropertiesInput + RelationshipKindsInput RelationshipsInput + NodeKindsInput NodesInput + EnvironmentsInput EnvironmentsInput + FindingsInput FindingsInput +} + +type FindingsInput []FindingInput +type FindingInput struct { + Name string + DisplayName string + SourceKindName string + KindName string // edge or node kind + EnvironmentKindName string + RemediationInput RemediationInput } type EnvironmentsInput []EnvironmentInput diff --git a/cmd/api/src/model/kind.go b/cmd/api/src/model/kind.go index 95d3ad8f255..137aec8d0d3 100644 --- a/cmd/api/src/model/kind.go +++ b/cmd/api/src/model/kind.go @@ -19,3 +19,7 @@ type Kind struct { ID int32 `json:"id"` Name string `json:"name"` } + +func (k Kind) TableName() string { + return "kind" +} diff --git a/cmd/api/src/services/opengraphschema/extension.go b/cmd/api/src/services/opengraphschema/extension.go index 072690a7eb2..306d9fa5a1e 100644 --- a/cmd/api/src/services/opengraphschema/extension.go +++ b/cmd/api/src/services/opengraphschema/extension.go @@ -136,7 +136,7 @@ func validateGraphExtension(graphExtension model.GraphExtensionInput) error { } environments[environment.EnvironmentKindName] = struct{}{} } - for _, relationshipFindingInput := range graphExtension.RelationshipFindingsInput { + for _, relationshipFindingInput := range graphExtension.FindingsInput { if findingName, found := strings.CutPrefix(relationshipFindingInput.Name, fmt.Sprintf("%s_", graphExtension.ExtensionInput.Namespace)); !found { return fmt.Errorf("graph schema relationship finding %s is missing extension namespace prefix", relationshipFindingInput.Name) } else if findingName == "" { @@ -148,8 +148,8 @@ func validateGraphExtension(graphExtension model.GraphExtensionInput) error { if !strings.HasPrefix(relationshipFindingInput.EnvironmentKindName, fmt.Sprintf("%s_", graphExtension.ExtensionInput.Namespace)) { return fmt.Errorf("graph schema relationship finding environment kind %s is missing extension namespace prefix", relationshipFindingInput.EnvironmentKindName) } - if !strings.HasPrefix(relationshipFindingInput.RelationshipKindName, fmt.Sprintf("%s_", graphExtension.ExtensionInput.Namespace)) { - return fmt.Errorf("graph schema relationship finding relationship kind %s is missing extension namespace prefix", relationshipFindingInput.RelationshipKindName) + if !strings.HasPrefix(relationshipFindingInput.KindName, fmt.Sprintf("%s_", graphExtension.ExtensionInput.Namespace)) { + return fmt.Errorf("graph schema relationship finding relationship kind %s is missing extension namespace prefix", relationshipFindingInput.KindName) } if _, ok := nodeKinds[relationshipFindingInput.EnvironmentKindName]; !ok { return fmt.Errorf("graph schema relationship finding environment kind %s not declared as a node kind", relationshipFindingInput.EnvironmentKindName) @@ -157,8 +157,8 @@ func validateGraphExtension(graphExtension model.GraphExtensionInput) error { if _, ok := environments[relationshipFindingInput.EnvironmentKindName]; !ok { return fmt.Errorf("graph schema relationship finding environment kind %s not declared as an environment", relationshipFindingInput.EnvironmentKindName) } - if _, ok := relationshipKinds[relationshipFindingInput.RelationshipKindName]; !ok { - return fmt.Errorf("graph schema relationship finding relationship kind %s not declared as a relationship kind", relationshipFindingInput.RelationshipKindName) + if _, ok := relationshipKinds[relationshipFindingInput.KindName]; !ok { + return fmt.Errorf("graph schema relationship finding relationship kind %s not declared as a relationship kind", relationshipFindingInput.KindName) } if relationshipFindingInput.SourceKindName == "" { return fmt.Errorf("graph schema relationship finding source kind cannot be empty") diff --git a/cmd/api/src/services/opengraphschema/extension_internal_test.go b/cmd/api/src/services/opengraphschema/extension_internal_test.go index 78456d512e9..d6b82cc5976 100644 --- a/cmd/api/src/services/opengraphschema/extension_internal_test.go +++ b/cmd/api/src/services/opengraphschema/extension_internal_test.go @@ -765,7 +765,7 @@ func Test_validateGraphExtension(t *testing.T) { PrincipalKinds: []string{"AD_node_kind_1"}, }, }, - RelationshipFindingsInput: model.RelationshipFindingsInput{ + FindingsInput: model.FindingsInput{ { Name: "finding_1", }, @@ -811,7 +811,7 @@ func Test_validateGraphExtension(t *testing.T) { PrincipalKinds: []string{"AD_node_kind_1"}, }, }, - RelationshipFindingsInput: model.RelationshipFindingsInput{ + FindingsInput: model.FindingsInput{ { Name: "AD_", }, @@ -857,7 +857,7 @@ func Test_validateGraphExtension(t *testing.T) { PrincipalKinds: []string{"AD_node_kind_1"}, }, }, - RelationshipFindingsInput: model.RelationshipFindingsInput{ + FindingsInput: model.FindingsInput{ { Name: "AD_finding_1", EnvironmentKindName: "env_kind", @@ -868,7 +868,7 @@ func Test_validateGraphExtension(t *testing.T) { wantErr: fmt.Errorf("graph schema relationship finding environment kind %s is missing extension namespace prefix", "env_kind"), }, { - name: "fail - relationship finding relationship kind name missing namespace prefix", + name: "fail - relationship finding kind name missing namespace prefix", args: args{ graphExtension: model.GraphExtensionInput{ ExtensionInput: model.ExtensionInput{ @@ -904,11 +904,11 @@ func Test_validateGraphExtension(t *testing.T) { PrincipalKinds: []string{"AD_node_kind_1"}, }, }, - RelationshipFindingsInput: model.RelationshipFindingsInput{ + FindingsInput: model.FindingsInput{ { - Name: "AD_finding_1", - EnvironmentKindName: "AD_env_kind", - RelationshipKindName: "edge kind 1", + Name: "AD_finding_1", + EnvironmentKindName: "AD_env_kind", + KindName: "edge kind 1", }, }, }, @@ -952,11 +952,11 @@ func Test_validateGraphExtension(t *testing.T) { PrincipalKinds: []string{"AD_node_kind_1"}, }, }, - RelationshipFindingsInput: model.RelationshipFindingsInput{ + FindingsInput: model.FindingsInput{ { - Name: "AD_finding_1", - EnvironmentKindName: "AD_env_kind_MISSING", - RelationshipKindName: "AD_edge kind 1", + Name: "AD_finding_1", + EnvironmentKindName: "AD_env_kind_MISSING", + KindName: "AD_edge kind 1", }, }, }, @@ -993,11 +993,11 @@ func Test_validateGraphExtension(t *testing.T) { Name: "property 2", }, }, - RelationshipFindingsInput: model.RelationshipFindingsInput{ + FindingsInput: model.FindingsInput{ { - Name: "AD_finding_1", - EnvironmentKindName: "AD_env_kind", - RelationshipKindName: "AD_edge_kind_1", + Name: "AD_finding_1", + EnvironmentKindName: "AD_env_kind", + KindName: "AD_edge_kind_1", }, }, }, @@ -1041,11 +1041,11 @@ func Test_validateGraphExtension(t *testing.T) { PrincipalKinds: []string{"AD_node_kind_1"}, }, }, - RelationshipFindingsInput: model.RelationshipFindingsInput{ + FindingsInput: model.FindingsInput{ { - Name: "AD_finding_1", - EnvironmentKindName: "AD_env_kind", - RelationshipKindName: "AD_edge kind 2", + Name: "AD_finding_1", + EnvironmentKindName: "AD_env_kind", + KindName: "AD_edge kind 2", }, }, }, @@ -1089,11 +1089,11 @@ func Test_validateGraphExtension(t *testing.T) { PrincipalKinds: []string{"AD_node_kind_1"}, }, }, - RelationshipFindingsInput: model.RelationshipFindingsInput{ + FindingsInput: model.FindingsInput{ { - Name: "AD_finding_1", - EnvironmentKindName: "AD_env_kind", - RelationshipKindName: "AD_edge kind 1", + Name: "AD_finding_1", + EnvironmentKindName: "AD_env_kind", + KindName: "AD_edge kind 1", }, }, }, @@ -1137,12 +1137,12 @@ func Test_validateGraphExtension(t *testing.T) { PrincipalKinds: []string{"AD_node_kind_1"}, }, }, - RelationshipFindingsInput: model.RelationshipFindingsInput{ + FindingsInput: model.FindingsInput{ { - Name: "AD_finding_1", - EnvironmentKindName: "AD_env_kind", - RelationshipKindName: "AD_edge kind 1", - SourceKindName: "AD_node_kind_1", + Name: "AD_finding_1", + EnvironmentKindName: "AD_env_kind", + KindName: "AD_edge kind 1", + SourceKindName: "AD_node_kind_1", }, }, }, @@ -1186,12 +1186,12 @@ func Test_validateGraphExtension(t *testing.T) { PrincipalKinds: []string{"AD_node_kind_1"}, }, }, - RelationshipFindingsInput: model.RelationshipFindingsInput{ + FindingsInput: model.FindingsInput{ { - Name: "AD_finding_1", - EnvironmentKindName: "AD_env_kind", - RelationshipKindName: "AD_edge kind 1", - SourceKindName: "AD_edge kind 1", + Name: "AD_finding_1", + EnvironmentKindName: "AD_env_kind", + KindName: "AD_edge kind 1", + SourceKindName: "AD_edge kind 1", }, }, }, @@ -1238,18 +1238,18 @@ func Test_validateGraphExtension(t *testing.T) { PrincipalKinds: []string{"AD_node_kind_1"}, }, }, - RelationshipFindingsInput: model.RelationshipFindingsInput{ + FindingsInput: model.FindingsInput{ { - Name: "AD_finding_1", - EnvironmentKindName: "AD_env_kind_1", - RelationshipKindName: "AD_edge_kind_1", - SourceKindName: "Base", + Name: "AD_finding_1", + EnvironmentKindName: "AD_env_kind_1", + KindName: "AD_edge_kind_1", + SourceKindName: "Base", }, { - Name: "AD_finding_1", - EnvironmentKindName: "AD_env_kind_1", - RelationshipKindName: "AD_edge_kind_1", - SourceKindName: "Base", + Name: "AD_finding_1", + EnvironmentKindName: "AD_env_kind_1", + KindName: "AD_edge_kind_1", + SourceKindName: "Base", }, }, }, @@ -1301,12 +1301,12 @@ func Test_validateGraphExtension(t *testing.T) { }, }, }, - RelationshipFindingsInput: model.RelationshipFindingsInput{ + FindingsInput: model.FindingsInput{ { - Name: "AD_finding_1", - SourceKindName: "Base", - RelationshipKindName: "AD_edge kind 1", - EnvironmentKindName: "AD_env_kind_1", + Name: "AD_finding_1", + SourceKindName: "Base", + KindName: "AD_edge kind 1", + EnvironmentKindName: "AD_env_kind_1", }, }, }, diff --git a/cmd/api/src/services/opengraphschema/extension_test.go b/cmd/api/src/services/opengraphschema/extension_test.go index fd60713a9c4..a010c23b1b5 100644 --- a/cmd/api/src/services/opengraphschema/extension_test.go +++ b/cmd/api/src/services/opengraphschema/extension_test.go @@ -206,14 +206,14 @@ func TestOpenGraphSchemaService_UpsertGraphSchemaExtension(t *testing.T) { PrincipalKinds: []string{"DEFAULT_User", "DEFAULT_Group"}, }, }, - RelationshipFindingsInput: model.RelationshipFindingsInput{ + FindingsInput: model.FindingsInput{ { - Name: "DEFAULT_Finding_1", - DisplayName: "Finding 1", - SourceKindName: "Base", - RelationshipKindName: "DEFAULT_Relationship_Kind_1", - EnvironmentKindName: "DEFAULT_Domain", - RemediationInput: model.RemediationInput{}, + Name: "DEFAULT_Finding_1", + DisplayName: "Finding 1", + SourceKindName: "Base", + KindName: "DEFAULT_Relationship_Kind_1", + EnvironmentKindName: "DEFAULT_Domain", + RemediationInput: model.RemediationInput{}, }, }, }).Return(false, nil) @@ -262,14 +262,14 @@ func TestOpenGraphSchemaService_UpsertGraphSchemaExtension(t *testing.T) { PrincipalKinds: []string{"DEFAULT_User", "DEFAULT_Group"}, }, }, - RelationshipFindingsInput: model.RelationshipFindingsInput{ + FindingsInput: model.FindingsInput{ { - Name: "DEFAULT_Finding_1", - DisplayName: "Finding 1", - SourceKindName: "Base", - RelationshipKindName: "DEFAULT_Relationship_Kind_1", - EnvironmentKindName: "DEFAULT_Domain", - RemediationInput: model.RemediationInput{}, + Name: "DEFAULT_Finding_1", + DisplayName: "Finding 1", + SourceKindName: "Base", + KindName: "DEFAULT_Relationship_Kind_1", + EnvironmentKindName: "DEFAULT_Domain", + RemediationInput: model.RemediationInput{}, }, }, }, @@ -319,14 +319,14 @@ func TestOpenGraphSchemaService_UpsertGraphSchemaExtension(t *testing.T) { PrincipalKinds: []string{"DEFAULT_User", "DEFAULT_Group"}, }, }, - RelationshipFindingsInput: model.RelationshipFindingsInput{ + FindingsInput: model.FindingsInput{ { - Name: "DEFAULT_Finding_1", - DisplayName: "Finding 1", - SourceKindName: "Base", - RelationshipKindName: "DEFAULT_Relationship_Kind_1", - EnvironmentKindName: "DEFAULT_Domain", - RemediationInput: model.RemediationInput{}, + Name: "DEFAULT_Finding_1", + DisplayName: "Finding 1", + SourceKindName: "Base", + KindName: "DEFAULT_Relationship_Kind_1", + EnvironmentKindName: "DEFAULT_Domain", + RemediationInput: model.RemediationInput{}, }, }, }).Return(true, nil) @@ -375,14 +375,14 @@ func TestOpenGraphSchemaService_UpsertGraphSchemaExtension(t *testing.T) { PrincipalKinds: []string{"DEFAULT_User", "DEFAULT_Group"}, }, }, - RelationshipFindingsInput: model.RelationshipFindingsInput{ + FindingsInput: model.FindingsInput{ { - Name: "DEFAULT_Finding_1", - DisplayName: "Finding 1", - SourceKindName: "Base", - RelationshipKindName: "DEFAULT_Relationship_Kind_1", - EnvironmentKindName: "DEFAULT_Domain", - RemediationInput: model.RemediationInput{}, + Name: "DEFAULT_Finding_1", + DisplayName: "Finding 1", + SourceKindName: "Base", + KindName: "DEFAULT_Relationship_Kind_1", + EnvironmentKindName: "DEFAULT_Domain", + RemediationInput: model.RemediationInput{}, }, }, },