@@ -10,17 +10,16 @@ function writeVTScanUrl({core}, metadataFile, addonMetadata) {
10
10
addonMetadata . vtScanUrl = vtScanUrl ;
11
11
stringified = JSON . stringify ( addonMetadata , null , "\t" ) ;
12
12
// Write vtScanUrl to add-on metadata file
13
- fs . writeFileSync ( metadataFile , stringified ) ;
13
+ fs . writeFileSync ( metadataFile , stringified + "\n" ) ;
14
14
// Store the latest vtScanUrl for single file analysis
15
15
core . setOutput ( "vtScanUrl" , vtScanUrl ) ;
16
16
}
17
17
18
18
19
- function getVirusTotalAnalysis ( { core} , addonMetadata , metadataFile , reviewedAddonsData ) {
19
+ function getVirusTotalAnalysis ( { core} , addonMetadata , metadataFile ) {
20
20
/*
21
21
Get the VirusTotal analysis for the add-on file.
22
- If the add-on is flagged as malicious, store the sha256 hash in reviewedAddons.json.
23
- Always store the scan URL in the add-on metadata file.
22
+ Store the results in the metadata file and the scan URL in the add-on metadata file.
24
23
If Virus total fails to scan the add-on, fail the job.
25
24
*/
26
25
countAPIUsageAndWait ( { core} ) ;
@@ -33,27 +32,26 @@ function getVirusTotalAnalysis({core}, addonMetadata, metadataFile, reviewedAddo
33
32
if ( core . _isSingleFileAnalysis ) {
34
33
core . setFailed ( `Failed to get VirusTotal analysis for ${ metadataFile } ` ) ;
35
34
}
35
+ // Resubmit and try again
36
36
virusTotalSubmit ( { core} , [ metadataFile ] ) ;
37
- getVirusTotalAnalysis ( { core} , addonMetadata , metadataFile , reviewedAddonsData ) ;
37
+ getVirusTotalAnalysis ( { core} , addonMetadata , metadataFile ) ;
38
38
return ;
39
39
}
40
40
writeVTScanUrl ( { core} , metadataFile , addonMetadata ) ;
41
41
// Append the VirusTotal analysis to the file for an artifact
42
42
const vtData = JSON . parse ( stdout ) ;
43
- fs . appendFileSync ( "vt.json" , stdout ) ;
44
43
const stats = vtData [ 0 ] [ "last_analysis_stats" ] ;
45
44
const malicious = stats . malicious ;
45
+ if ( addonMetadata . scanResults === undefined ) {
46
+ addonMetadata . scanResults = { } ;
47
+ }
48
+ addonMetadata . scanResults . virusTotal = vtData ;
49
+ stringified = JSON . stringify ( addonMetadata , null , "\t" ) ;
50
+ fs . writeFileSync ( metadataFile , stringified + "\n" ) ;
46
51
if ( malicious === 0 ) {
47
52
core . info ( `VirusTotal analysis succeeded for ${ metadataFile } ` ) ;
48
- return ;
49
- }
50
- if ( reviewedAddonsData [ addonMetadata . addonId ] === undefined ) {
51
- reviewedAddonsData [ addonMetadata . addonId ] = [ ] ;
52
53
}
53
- reviewedAddonsData [ addonMetadata . addonId ] . push ( addonMetadata . sha256 ) ;
54
- stringified = JSON . stringify ( reviewedAddonsData , null , "\t" ) ;
55
- fs . writeFileSync ( "reviewedAddons.json" , stringified ) ;
56
- if ( core . _isSingleFileAnalysis ) {
54
+ else if ( core . _isSingleFileAnalysis ) {
57
55
core . setFailed ( `VirusTotal analysis failed for ${ metadataFile } ` ) ;
58
56
}
59
57
} ) ;
@@ -68,20 +66,17 @@ function getVirusTotalAnalysisIfRequired({core}, metadataFile) {
68
66
*/
69
67
const addonMetadataContents = fs . readFileSync ( metadataFile ) ;
70
68
const addonMetadata = JSON . parse ( addonMetadataContents ) ;
71
- const addonId = addonMetadata . addonId ;
72
- const reviewedAddonsContents = fs . readFileSync ( "reviewedAddons.json" ) ;
73
- const reviewedAddonsData = JSON . parse ( reviewedAddonsContents ) ;
74
- // Check if add-on has been flagged before through VirusTotal.
75
- if ( reviewedAddonsData [ addonId ] !== undefined && reviewedAddonsData [ addonId ] . includes ( sha256 ) ) {
76
- core . info ( `VirusTotal analysis skipped, already performed for ${ metadataFile } ` ) ;
77
- return ;
69
+ // Check if add-on has been submitted before to VirusTotal.
70
+ if ( addonMetadata . vtScanUrl === undefined ) {
71
+ core . info ( `VirusTotal scanning has not been performed for ${ metadataFile } ` ) ;
72
+ virusTotalSubmit ( { core} , [ metadataFile ] ) ;
78
73
}
79
- // Check if add-on has been scanned before through VirusTotal.
80
- if ( addonMetadata . vtScanUrl !== undefined ) {
74
+ // Check if add-on has had results saved before through VirusTotal.
75
+ if ( addonMetadata . scanResults !== undefined && addonMetadata . scanResults . virusTotal !== undefined ) {
81
76
core . info ( `VirusTotal analysis skipped, already performed for ${ metadataFile } ` ) ;
82
77
return ;
83
78
}
84
- getVirusTotalAnalysis ( { core} , addonMetadata , metadataFile , reviewedAddonsData ) ;
79
+ getVirusTotalAnalysis ( { core} , addonMetadata , metadataFile ) ;
85
80
}
86
81
87
82
module . exports = ( { core} , metadataFiles ) => {
0 commit comments