Fix issues with JSON format and handling of non-existing file - #13
Fix issues with JSON format and handling of non-existing file#13Matmaus wants to merge 3 commits into
Conversation
`process_onenote_file` does not print document in JSON if `json_output` parameter is set. Instead, it always returns it. This return value is not even used in the main. This commit fixes use of `json_output` parameter. If `True`, `process_onenote_file` will print document in JSON form instead of the default text form. The default text form will be used otherwise. No value will be returned.
DissectMalware
commented
Mar 9, 2023
This JSON object is meant to be used in another application in which pyonenote is called as a library. |
Matmaus
commented
Mar 9, 2023
If I may, I would suggest to always return either Also, I think it could be better to have a separate function which will be expected to be used as API. Some function which never print anything. For example (only first ~11 lines are modified): defprocess_onenote_file(file):
ifnotcheck_valid(file):
log.error("please provide valid One file")
exit()
file.seek(0)
returnOneDocument(file)
defprocess_and_print_onenote_file(file, output_dir, extension, json_output):
document=process_onenote_file(file)
data=document.get_json()
ifnotjson_output:
print('Headers\n####################################################################')
indent='\t'forkey, headerindata['headers'].items():
print('{}{}: {}'.format(indent, key, header))
print('\n\nProperties\n####################################################################')
indent='\t'forpropertySetindata['properties']:
print('{}{}:'.format(indent, propertySet['type']))
forproperty_name, property_valinpropertySet['val'].items():
print('{}{}: {}'.format(indent+'\t', property_name, str(property_val)))
print("")
print('\n\nEmbedded Files\n####################################################################')
indent='\t'forname, fileindata['files'].items():
print('{}{}:'.format(indent, name))
print('\t{}Extension: {}'.format(indent, file['extension']))
print('{}'.format( get_hex_format(file['content'][:256], 16, indent+'\t')))
ifextensionandnotextension.startswith("."):
extension="."+extensioncounter=0forfile_guid, fileindocument.get_files().items():
withopen(
os.path.join(output_dir,
"file_{}{}{}".format(counter, file["extension"], extension)), "wb"
) asoutput_file:
output_file.write(file["content"])
counter+=1else:
print(json.dumps(data)) |
DissectMalware
commented
Jan 29, 2024
I think it is a good suggestion, will refactor the code based on your suggestion |
Hi, I stumbled upon three issues. They are independent, but I think they are too small, so making three separate PRs seems unnecessary to me.
process_onenote_filedoes not print document in JSON ifjson_outputparameter is set. Instead, it always returns it. This return value is not even used in the main.This fork fixes use of
json_outputparameter. IfTrue,process_onenote_filewill print document in JSON form instead of the default text form. The default text form will be used otherwise. No value will be returned.OneDocment->OneDocumentI think it was not intended at least based on the module's name.