18
18
from ._binary_dao import get_oss_info_from_db
19
19
from ._binary import BinaryItem , TLSH_CHECKSUM_NULL
20
20
from ._jar_analysis import analyze_jar_file , merge_binary_list
21
+ from ._simple_mode import print_simple_mode , filter_binary , init_simple
21
22
from fosslight_util .correct import correct_with_yaml
22
23
from fosslight_util .oss_item import ScannerItem
23
24
import hashlib
41
42
_REMOVE_DIR = [os .path .sep + dir_name + os .path .sep for dir_name in _REMOVE_DIR ]
42
43
_error_logs = []
43
44
_root_path = ""
44
- _start_time = ""
45
+ start_time = ""
45
46
windows = False
46
47
BYTES = 2048
47
48
BIN_EXT_HEADER = {'BIN_FL_Binary' : ['ID' , 'Binary Path' , 'OSS Name' ,
@@ -72,18 +73,9 @@ def get_checksum_and_tlsh(bin_with_path):
72
73
73
74
74
75
def init (path_to_find_bin , output_file_name , formats , path_to_exclude = []):
75
- global _root_path , logger , _start_time
76
+ global logger , _result_log
76
77
77
78
_json_ext = ".json"
78
- _start_time = datetime .now ().strftime ('%y%m%d_%H%M' )
79
- _result_log = {
80
- "Tool Info" : PKG_NAME
81
- }
82
-
83
- _root_path = path_to_find_bin
84
- if not path_to_find_bin .endswith (os .path .sep ):
85
- _root_path += os .path .sep
86
-
87
79
success , msg , output_path , output_files , output_extensions , formats = check_output_formats_v2 (output_file_name , formats )
88
80
89
81
if success :
@@ -100,20 +92,20 @@ def init(path_to_find_bin, output_file_name, formats, path_to_exclude=[]):
100
92
if formats :
101
93
if formats [i ].startswith ('spdx' ):
102
94
if platform .system () != 'Windows' :
103
- output_files [i ] = f"fosslight_spdx_bin_{ _start_time } "
95
+ output_files [i ] = f"fosslight_spdx_bin_{ start_time } "
104
96
else :
105
97
logger .warning ('spdx format is not supported on Windows. Please remove spdx from format.' )
106
98
to_remove .append (i )
107
99
else :
108
100
if output_extension == _json_ext :
109
- output_files [i ] = f"fosslight_opossum_bin_{ _start_time } "
101
+ output_files [i ] = f"fosslight_opossum_bin_{ start_time } "
110
102
else :
111
- output_files [i ] = f"fosslight_report_bin_{ _start_time } "
103
+ output_files [i ] = f"fosslight_report_bin_{ start_time } "
112
104
else :
113
105
if output_extension == _json_ext :
114
- output_files [i ] = f"fosslight_opossum_bin_{ _start_time } "
106
+ output_files [i ] = f"fosslight_opossum_bin_{ start_time } "
115
107
else :
116
- output_files [i ] = f"fosslight_report_bin_{ _start_time } "
108
+ output_files [i ] = f"fosslight_report_bin_{ start_time } "
117
109
for index in sorted (to_remove , reverse = True ):
118
110
# remove elements of spdx format on windows
119
111
del output_files [index ]
@@ -127,7 +119,7 @@ def init(path_to_find_bin, output_file_name, formats, path_to_exclude=[]):
127
119
logger .error (f"Format error - { msg } " )
128
120
sys .exit (1 )
129
121
130
- log_file = os .path .join (output_path , f"fosslight_log_bin_{ _start_time } .txt" )
122
+ log_file = os .path .join (output_path , f"fosslight_log_bin_{ start_time } .txt" )
131
123
logger , _result_log = init_log (log_file , True , logging .INFO , logging .DEBUG ,
132
124
PKG_NAME , path_to_find_bin , path_to_exclude )
133
125
@@ -176,16 +168,30 @@ def get_file_list(path_to_find, abs_path_to_exclude):
176
168
bin_item .exclude = True
177
169
elif extension in _EXCLUDE_FILE_EXTENSION :
178
170
bin_item .exclude = True
171
+ elif file .startswith ('.' ):
172
+ bin_item .exclude = True
179
173
bin_list .append (bin_item )
180
174
file_cnt += 1
181
175
return file_cnt , bin_list , found_jar
182
176
183
177
184
178
def find_binaries (path_to_find_bin , output_dir , formats , dburl = "" , simple_mode = False ,
185
179
correct_mode = True , correct_filepath = "" , path_to_exclude = []):
180
+ global start_time , _root_path , _result_log
186
181
187
- _result_log , result_reports , output_extensions = init (
188
- path_to_find_bin , output_dir , formats , path_to_exclude )
182
+ mode = "Normal Mode"
183
+ start_time = datetime .now ().strftime ('%y%m%d_%H%M' )
184
+
185
+ _root_path = path_to_find_bin
186
+ if not path_to_find_bin .endswith (os .path .sep ):
187
+ _root_path += os .path .sep
188
+
189
+ if simple_mode :
190
+ mode = "Simple Mode"
191
+ _result_log , compressed_list_txt , simple_bin_list_txt = init_simple (output_dir , PKG_NAME , start_time )
192
+ else :
193
+ _result_log , result_reports , output_extensions = init (
194
+ path_to_find_bin , output_dir , formats , path_to_exclude )
189
195
190
196
total_bin_cnt = 0
191
197
total_file_cnt = 0
@@ -201,7 +207,8 @@ def find_binaries(path_to_find_bin, output_dir, formats, dburl="", simple_mode=F
201
207
if not os .path .isdir (path_to_find_bin ):
202
208
error_occured (error_msg = f"Can't find the directory : { path_to_find_bin } " ,
203
209
result_log = _result_log ,
204
- exit = True )
210
+ exit = True ,
211
+ mode = mode )
205
212
if not correct_filepath :
206
213
correct_filepath = path_to_find_bin
207
214
try :
@@ -210,12 +217,21 @@ def find_binaries(path_to_find_bin, output_dir, formats, dburl="", simple_mode=F
210
217
except Exception as ex :
211
218
error_occured (error_msg = f"Failed to check whether it is binary or not : { ex } " ,
212
219
result_log = _result_log ,
213
- exit = True )
214
- total_bin_cnt = len ( return_list )
220
+ exit = True ,
221
+ mode = mode )
215
222
if simple_mode :
216
- bin_list = [bin .bin_name_with_path for bin in return_list ]
223
+ try :
224
+ compressed_list , filtered_bin_list = filter_binary (return_list )
225
+ results = print_simple_mode (compressed_list_txt , simple_bin_list_txt , compressed_list , filtered_bin_list )
226
+ total_bin_cnt = len (filtered_bin_list )
227
+ except Exception as ex :
228
+ error_occured (error_msg = f"Failed to run simple mode: { ex } " ,
229
+ result_log = _result_log ,
230
+ exit = True ,
231
+ mode = "Simple mode" )
217
232
else :
218
- scan_item = ScannerItem (PKG_NAME , _start_time )
233
+ total_bin_cnt = len (return_list )
234
+ scan_item = ScannerItem (PKG_NAME , start_time )
219
235
scan_item .set_cover_pathinfo (path_to_find_bin , path_to_exclude )
220
236
try :
221
237
# Run OWASP Dependency-check
@@ -262,7 +278,7 @@ def find_binaries(path_to_find_bin, output_dir, formats, dburl="", simple_mode=F
262
278
logger .error (f"Fail to generate result file.:{ writing_msg } " )
263
279
264
280
try :
265
- print_result_log (success = True , result_log = _result_log ,
281
+ print_result_log (mode = mode , success = True , result_log = _result_log ,
266
282
file_cnt = str (total_file_cnt ),
267
283
bin_file_cnt = str (total_bin_cnt ),
268
284
auto_bin_cnt = str (db_loaded_cnt ), bin_list = bin_list )
@@ -279,7 +295,7 @@ def return_bin_only(file_list, need_checksum_tlsh=True):
279
295
if need_checksum_tlsh :
280
296
file_item .checksum , file_item .tlsh , error_msg = get_checksum_and_tlsh (file_item .bin_name_with_path )
281
297
if error_msg :
282
- error_occured (error_msg = error_msg , exit = False )
298
+ error_occured (modeerror_msg = error_msg , exit = False )
283
299
yield file_item
284
300
except Exception as ex :
285
301
logger .debug (f"Exception in get_file_list: { ex } " )
@@ -317,21 +333,22 @@ def check_binary(file_with_path):
317
333
return is_bin_confirmed
318
334
319
335
320
- def error_occured (error_msg , exit = False , result_log = {}):
336
+ def error_occured (error_msg , exit = False , result_log = {}, mode = "Normal mode" ):
321
337
global _error_logs
322
338
_error_logs .append (error_msg )
323
339
if exit :
324
- print_result_log (success = False , result_log = result_log )
340
+ print_result_log (mode , success = False , result_log = result_log )
325
341
sys .exit ()
326
342
327
343
328
- def print_result_log (success = True , result_log = {}, file_cnt = "" , bin_file_cnt = "" , auto_bin_cnt = "" , bin_list = []):
344
+ def print_result_log (mode = "Normal Mode" , success = True , result_log = {}, file_cnt = "" , bin_file_cnt = "" , auto_bin_cnt = "" , bin_list = []):
329
345
330
346
if "Running time" in result_log :
331
- start_time = result_log ["Running time" ]
347
+ starttime = result_log ["Running time" ]
332
348
else :
333
- start_time = _start_time
334
- result_log ["Running time" ] = start_time + " ~ " + \
349
+ starttime = start_time
350
+ result_log ["Mode" ] = mode
351
+ result_log ["Running time" ] = starttime + " ~ " + \
335
352
datetime .now ().strftime ('%Y%m%d_%H%M%S' )
336
353
result_log ["Execution result" ] = 'Success' if success else 'Error occurred'
337
354
result_log ["Binaries / Scanned files" ] = f"{ bin_file_cnt } /{ file_cnt } "
0 commit comments