Skip to content

Commit f00b8ba

Browse files
committed
Merge branch 'feature/CG-534' into 'master'
feat: Included extra fields to findings result Closes CG-534 See merge request auto-cloud/cloudgraph/sdk!52
2 parents 93be45d + 4510423 commit f00b8ba

File tree

3 files changed

+39
-16
lines changed

3 files changed

+39
-16
lines changed

src/plugins/policyPack/index.ts

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ export default class PolicyPackPlugin extends Plugin {
7474
}
7575

7676
const {
77-
default: { rules = [], entity = 'Custom' },
77+
default: { rules = [], entity = 'Custom', extraFields = [] },
7878
} = (await pluginManager.getPlugin(policyPack)) ?? {}
7979

8080
if (!rules) {
@@ -83,7 +83,7 @@ export default class PolicyPackPlugin extends Plugin {
8383
)
8484
}
8585

86-
return { rules, entity }
86+
return { rules, entity, extraFields }
8787
} catch (error: any) {
8888
this.logger.error(error)
8989
this.logger.warn(
@@ -184,11 +184,12 @@ export default class PolicyPackPlugin extends Plugin {
184184
}
185185

186186
// Initialize RulesEngine
187-
const rulesEngine = new RulesEngine(
188-
this.provider.name,
189-
policyPackPlugin.entity,
190-
resourceTypeNamesToFieldsMap
191-
)
187+
const rulesEngine = new RulesEngine({
188+
providerName: this.provider.name,
189+
entityName: policyPackPlugin.entity,
190+
typenameToFieldMap: resourceTypeNamesToFieldsMap,
191+
extraFields: policyPackPlugin.extraFields,
192+
})
192193

193194
this.policyPacksPlugins[policyPack] = {
194195
engine: rulesEngine,

src/rules-engine/index.ts

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,25 @@ export default class RulesProvider implements Engine {
1818

1919
private readonly typenameToFieldMap: { [typeName: string]: string }
2020

21+
private readonly extraFields: string[]
22+
2123
private readonly providerName
2224

2325
private readonly entityName
2426

25-
constructor(
26-
providerName: string,
27-
entityName: string,
27+
constructor({
28+
providerName,
29+
entityName,
30+
typenameToFieldMap,
31+
extraFields,
32+
}: {
33+
providerName: string
34+
entityName: string
2835
typenameToFieldMap?: { [tn: string]: string }
29-
) {
30-
this.typenameToFieldMap = typenameToFieldMap || {}
36+
extraFields?: string[]
37+
}) {
38+
this.extraFields = extraFields ?? []
39+
this.typenameToFieldMap = typenameToFieldMap ?? {}
3140
this.entityName = entityName
3241
this.providerName = providerName
3342
}
@@ -60,6 +69,11 @@ export default class RulesProvider implements Engine {
6069
): Promise<RuleFinding> => {
6170
const finding = await evaluator.evaluateSingleResource(rule, data)
6271

72+
// Inject extra fields
73+
for (const field of this.extraFields) {
74+
finding[field] = data.resource[field]
75+
}
76+
6377
const connField =
6478
data.resource.__typename && // eslint-disable-line no-underscore-dangle
6579
this.typenameToFieldMap[data.resource.__typename] // eslint-disable-line no-underscore-dangle
@@ -201,7 +215,7 @@ export default class RulesProvider implements Engine {
201215
this.entityName
202216
}Findings]
203217
}
204-
type ${this.providerName}${this.entityName}Findings @key(fields: "id") {
218+
interface baseFinding {
205219
id: String! @id
206220
ruleId: String! @search(by: [hash, regexp])
207221
resourceId: String @search(by: [hash, regexp])
@@ -213,9 +227,17 @@ export default class RulesProvider implements Engine {
213227
remediation: String @search(by: [hash, regexp])
214228
references: [String] @search(by: [hash, regexp])
215229
result: FindingsResult @search
230+
}
231+
type ${this.providerName}${
232+
this.entityName
233+
}Findings implements baseFinding @key(fields: "id") {
216234
findings: ${this.providerName}Findings @hasInverse(field: ${
217235
this.entityName
218236
}Findings)
237+
# extra fields
238+
${this.extraFields.map(
239+
field => `${field}: String @search(by: [hash, regexp])`
240+
)}
219241
# connections
220242
${Object.keys(this.typenameToFieldMap)
221243
.map(

tests/rules-engine.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,11 @@ const ruleMock = {
3636
describe('RulesEngine', () => {
3737
let rulesEngine: Engine
3838
beforeAll(() => {
39-
rulesEngine = new RulesProvider(
39+
rulesEngine = new RulesProvider({
4040
providerName,
4141
entityName,
42-
typenameToFieldMap
43-
)
42+
typenameToFieldMap,
43+
})
4444
})
4545
it('Should pass getting the updated schema created dynamically using schemaTypeName and typenameToFieldMap fields', () => {
4646
const schema = rulesEngine.getSchema()

0 commit comments

Comments
 (0)