Skip to content

Commit dc3966e

Browse files
committed
Add provenance support to data extensions editor
The data extensions editor was always setting the `provenance` field of MaD to `manual`. This will change the `provenance` to be either `editor-manual` (for models which were added by the user), `df-generated` (for models generated by the dataflow generator), and `df-manual` (for models generated and then edited). This makes it easier to trace the origin of a model.
1 parent e9552df commit dc3966e

File tree

6 files changed

+31
-5
lines changed

6 files changed

+31
-5
lines changed

extensions/ql-vscode/src/data-extensions-editor/modeled-method.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,20 @@ export type ModeledMethodType =
55
| "summary"
66
| "neutral";
77

8+
export type Provenance =
9+
// Generated by the dataflow model
10+
| "df-generated"
11+
// Generated by the dataflow model and manually edited
12+
| "df-manual"
13+
// Entered by the user in the editor manually
14+
| "editor-manual";
15+
816
export type ModeledMethod = {
917
type: ModeledMethodType;
1018
input: string;
1119
output: string;
1220
kind: string;
21+
provenance: Provenance;
1322
};
1423

1524
export type ModeledMethodWithSignature = {

extensions/ql-vscode/src/data-extensions-editor/predicates.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {
33
ModeledMethod,
44
ModeledMethodType,
55
ModeledMethodWithSignature,
6+
Provenance,
67
} from "./modeled-method";
78

89
export type ExternalApiUsageByType = {
@@ -43,7 +44,7 @@ export const extensiblePredicateDefinitions: Record<
4344
"",
4445
method.modeledMethod.output,
4546
method.modeledMethod.kind,
46-
"manual",
47+
method.modeledMethod.provenance,
4748
],
4849
readModeledMethod: (row) => ({
4950
signature: readRowToMethod(row),
@@ -52,6 +53,7 @@ export const extensiblePredicateDefinitions: Record<
5253
input: "",
5354
output: row[6] as string,
5455
kind: row[7] as string,
56+
provenance: row[8] as Provenance,
5557
},
5658
}),
5759
supportedKinds: ["remote"],
@@ -71,7 +73,7 @@ export const extensiblePredicateDefinitions: Record<
7173
"",
7274
method.modeledMethod.input,
7375
method.modeledMethod.kind,
74-
"manual",
76+
method.modeledMethod.provenance,
7577
],
7678
readModeledMethod: (row) => ({
7779
signature: readRowToMethod(row),
@@ -80,6 +82,7 @@ export const extensiblePredicateDefinitions: Record<
8082
input: row[6] as string,
8183
output: "",
8284
kind: row[7] as string,
85+
provenance: row[8] as Provenance,
8386
},
8487
}),
8588
supportedKinds: ["sql", "xss", "logging"],
@@ -100,7 +103,7 @@ export const extensiblePredicateDefinitions: Record<
100103
method.modeledMethod.input,
101104
method.modeledMethod.output,
102105
method.modeledMethod.kind,
103-
"manual",
106+
method.modeledMethod.provenance,
104107
],
105108
readModeledMethod: (row) => ({
106109
signature: readRowToMethod(row),
@@ -109,6 +112,7 @@ export const extensiblePredicateDefinitions: Record<
109112
input: row[6] as string,
110113
output: row[7] as string,
111114
kind: row[8] as string,
115+
provenance: row[9] as Provenance,
112116
},
113117
}),
114118
supportedKinds: ["taint", "value"],
@@ -123,7 +127,7 @@ export const extensiblePredicateDefinitions: Record<
123127
method.externalApiUsage.typeName,
124128
method.externalApiUsage.methodName,
125129
method.externalApiUsage.methodParameters,
126-
"manual",
130+
method.modeledMethod.provenance,
127131
],
128132
readModeledMethod: (row) => ({
129133
signature: `${row[0]}.${row[1]}#${row[2]}${row[3]}`,
@@ -132,6 +136,7 @@ export const extensiblePredicateDefinitions: Record<
132136
input: "",
133137
output: "",
134138
kind: "",
139+
provenance: row[4] as Provenance,
135140
},
136141
}),
137142
},

extensions/ql-vscode/src/stories/data-extensions-editor/DataExtensionsEditor.stories.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,30 +210,35 @@ DataExtensionsEditor.args = {
210210
input: "Argument[0]",
211211
output: "",
212212
kind: "jndi-injection",
213+
provenance: "df-generated",
213214
},
214215
"org.sql2o.Connection#createQuery(String)": {
215216
type: "summary",
216217
input: "Argument[this]",
217218
output: "ReturnValue",
218219
kind: "taint",
220+
provenance: "df-manual",
219221
},
220222
"org.sql2o.Sql2o#open()": {
221223
type: "summary",
222224
input: "Argument[this]",
223225
output: "ReturnValue",
224226
kind: "taint",
227+
provenance: "editor-manual",
225228
},
226229
"org.sql2o.Query#executeScalar(Class)": {
227230
type: "neutral",
228231
input: "",
229232
output: "",
230233
kind: "",
234+
provenance: "df-generated",
231235
},
232236
"org.sql2o.Sql2o#Sql2o(String,String,String)": {
233237
type: "neutral",
234238
input: "",
235239
output: "",
236240
kind: "",
241+
provenance: "df-generated",
237242
},
238243
},
239244
};

extensions/ql-vscode/src/stories/data-extensions-editor/MethodRow.stories.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,5 +50,6 @@ MethodRow.args = {
5050
input: "Argument[this]",
5151
output: "ReturnValue",
5252
kind: "taint",
53+
provenance: "editor-manual",
5354
},
5455
};

extensions/ql-vscode/src/view/data-extensions-editor/MethodRow.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,10 @@ export const MethodRow = ({
7070
kind: "value",
7171
...modeledMethod,
7272
type: target.value as ModeledMethodType,
73+
provenance:
74+
modeledMethod?.provenance === "df-generated"
75+
? "df-manual"
76+
: "editor-manual",
7377
});
7478
},
7579
[onChange, externalApiUsage, modeledMethod, argumentsList],

extensions/ql-vscode/test/unit-tests/data-extensions-editor/yaml.test.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ describe("createDataExtensionYaml", () => {
7575
input: "Argument[0]",
7676
output: "",
7777
kind: "sql",
78+
provenance: "df-generated",
7879
},
7980
},
8081
);
@@ -89,7 +90,7 @@ describe("createDataExtensionYaml", () => {
8990
pack: codeql/java-all
9091
extensible: sinkModel
9192
data:
92-
- ["org.sql2o","Connection",true,"createQuery","(String)","","Argument[0]","sql","manual"]
93+
- ["org.sql2o","Connection",true,"createQuery","(String)","","Argument[0]","sql","df-generated"]
9394
9495
- addsTo:
9596
pack: codeql/java-all
@@ -171,6 +172,7 @@ describe("loadDataExtensionYaml", () => {
171172
kind: "sql",
172173
output: "",
173174
type: "sink",
175+
provenance: "manual",
174176
},
175177
});
176178
});

0 commit comments

Comments
 (0)