1- const logger = require ( './logger' ) ;
1+ const { defaultLogger , bugLogger } = require ( './logger' ) ;
22const utils = require ( './utils' ) ;
33const fs = require ( 'fs' ) ;
44const config = require ( './config' ) ;
@@ -9,34 +9,36 @@ module.exports = {
99}
1010
1111async function scanAction ( sourceTarget , options ) {
12- if ( options . verbose ) { logger . setLevel ( 'verbose' ) }
12+ if ( options . verbose ) { defaultLogger . setLevel ( 'verbose' ) }
1313 if ( options . useDocker ) {
14- await utils . isCommandExist ( 'docker' , logger ) ;
15- logger . error ( 'Docker is not supported yet.' ) ;
14+ await utils . isCommandExist ( 'docker' , defaultLogger ) ;
15+ defaultLogger . error ( 'Docker is not supported yet.' ) ;
1616 return ;
1717 }
18- await utils . isCommandExist ( 'codeql' , logger ) ;
18+ if ( options . enableFileLogging ) { defaultLogger . enableFileTransport ( ) }
19+ if ( options . discordWebhook ) { bugLogger . enableDiscordTransport ( options . discordWebhook ) }
20+ await utils . isCommandExist ( 'codeql' , defaultLogger ) ;
1921 // Create Database
2022 var createDbOptions = { ...options } ;
2123 createDbOptions . output = options . dbOutput ;
2224 var isRemoteRepository = utils . isRemoteRepository ( sourceTarget ) ;
2325 if ( isRemoteRepository ) {
24- logger . info ( `Cloning remote repository ${ sourceTarget } ` )
25- sourceFolderPath = await utils . cloneRemoteRepository ( sourceTarget , logger ) ;
26+ defaultLogger . info ( `Cloning remote repository ${ sourceTarget } ` )
27+ sourceFolderPath = await utils . cloneRemoteRepository ( sourceTarget , defaultLogger ) ;
2628 } else sourceFolderPath = sourceTarget ;
2729 sourceFolderPath = fs . realpathSync ( sourceFolderPath ) ;
28- logger . info ( `Creating CodeQL database for ${ sourceFolderPath } ...` )
29- var { args : createDbArgs , databasePath } = await utils . setupCreateDatabaseCommandArgs ( sourceFolderPath , createDbOptions , logger ) ;
30- logger . verbose ( `Options:` ) ;
30+ defaultLogger . info ( `Creating CodeQL database for ${ sourceFolderPath } ...` )
31+ var { args : createDbArgs , databasePath } = await utils . setupCreateDatabaseCommandArgs ( sourceFolderPath , createDbOptions , defaultLogger ) ;
32+ defaultLogger . verbose ( `Options:` ) ;
3133 for ( const key in options ) {
3234 const element = options [ key ] ;
33- logger . verbose ( `[+] ${ key } : ${ element } ` ) ;
35+ defaultLogger . verbose ( `[+] ${ key } : ${ element } ` ) ;
3436 }
35- createDbExitCode = await utils . executeCommand ( 'codeql' , createDbArgs , 'Create CodeQL database' , logger ) ;
36- logger . info ( `CodeQL database created at ${ databasePath } .` )
37+ createDbExitCode = await utils . executeCommand ( 'codeql' , createDbArgs , 'Create CodeQL database' , defaultLogger ) ;
38+ defaultLogger . info ( `CodeQL database created at ${ databasePath } .` )
3739 if ( isRemoteRepository && options . removeRemoteRepository ) {
38- logger . info ( `Removing remote repository ${ sourceFolderPath } ` )
39- await utils . removeFolder ( sourceFolderPath , logger ) ;
40+ defaultLogger . info ( `Removing remote repository ${ sourceFolderPath } ` )
41+ await utils . removeFolder ( sourceFolderPath , defaultLogger ) ;
4042 }
4143 if ( options . createDbOnly ) {
4244 return databasePath ;
@@ -46,26 +48,39 @@ async function scanAction(sourceTarget, options) {
4648 if ( ! fs . existsSync ( outputFolderPath ) ) {
4749 fs . mkdirSync ( outputFolderPath ) ;
4850 }
49- const languages = await utils . getDatabaseLanguages ( databasePath , logger ) ;
51+ const languages = await utils . getDatabaseLanguages ( databasePath , defaultLogger ) ;
52+ if ( ! languages ) {
53+ defaultLogger . error ( 'Can not detect languages. Please specify the language using --language option' ) ;
54+ return ;
55+ }
5056 for ( const language of languages ) {
5157 options . language = language ;
5258 languageDatabasePath = path . resolve ( `${ databasePath } ${ path . sep } ${ language } ` ) ;
5359 options . output = path . resolve ( outputFolderPath , `${ language } -codeql-result.sarif` )
54- logger . info ( `Scanning ${ language } code in ${ databasePath } ...` )
55- var { args : scanArgs } = await utils . setupScanCommandArgs ( languageDatabasePath , options , logger ) ;
56- await utils . executeCommand ( 'codeql' , scanArgs , 'Scan CodeQL database' , logger ) ;
60+ defaultLogger . info ( `Scanning ${ language } code in ${ databasePath } ...` )
61+ var { args : scanArgs } = await utils . setupScanCommandArgs ( languageDatabasePath , options , defaultLogger ) ;
62+ await utils . executeCommand ( 'codeql' , scanArgs , 'Scan CodeQL database' , defaultLogger ) ;
5763 }
58- logger . info ( `CodeQL scan results saved at ${ outputFolderPath } .` )
64+ defaultLogger . info ( `CodeQL scan results saved at ${ outputFolderPath } .` )
5965 const resultFiles = fs . readdirSync ( outputFolderPath ) ;
66+ var alerts = [ ] ;
6067 for ( const resultFile of resultFiles ) {
61- const alerts = await utils . parseSarif ( path . resolve ( outputFolderPath , resultFile ) , logger ) ;
62- for ( const alert of alerts ) {
63- logger . error ( `[${ alert . id } ][${ alert . level } ][precision:${ alert . precision } ][severity:${ alert . severity } ] ${ alert . title } : ${ alert . location } ` ) ;
64- }
68+ alerts = alerts . concat ( await utils . parseSarif ( path . resolve ( outputFolderPath , resultFile ) , defaultLogger ) ) ;
69+ }
70+ for ( const alert of alerts ) {
71+ defaultLogger . log ( {
72+ level : utils . castBugLevelToLogLevel ( alert . level ) ,
73+ message : `[${ alert . id } ][${ alert . level } ][precision:${ alert . precision } ][severity:${ alert . severity } ][${ alert . location } ] ${ alert . title } `
74+ } ) ;
75+ bugLogger . log ( {
76+ level : utils . castBugLevelToLogLevel ( alert . level ) ,
77+ message : path . basename ( sourceFolderPath ) ,
78+ meta : alert
79+ } ) ;
6580 }
6681 if ( options . removeDatabase ) {
67- logger . info ( `Removing database folder ${ databasePath } ` )
68- await utils . removeFolder ( databasePath , logger ) ;
82+ defaultLogger . info ( `Removing database folder ${ databasePath } ` )
83+ await utils . removeFolder ( databasePath , defaultLogger ) ;
6984 }
70- return outputFolderPath ;
85+ return alerts ;
7186}
0 commit comments