in azdev/operations/secret.py [0:0]
def scan_secrets(file_path=None, directory_path=None, recursive=False,
include_pattern=None, exclude_pattern=None, data=None,
save_scan_result=None, scan_result_path=None,
confidence_level=None, custom_pattern=None,
continue_on_failure=None):
_validate_data_path(file_path=file_path, directory_path=directory_path,
include_pattern=include_pattern, exclude_pattern=exclude_pattern, data=data)
target_files = []
scan_results = {}
if directory_path:
directory_path = os.path.abspath(directory_path)
target_files = _get_files_from_directory(directory_path, recursive=recursive,
include_pattern=include_pattern, exclude_pattern=exclude_pattern)
if file_path:
file_path = os.path.abspath(file_path)
target_files.append(file_path)
if data:
secrets = _scan_secrets_for_string(data, confidence_level, custom_pattern)
if secrets:
scan_results['raw_data'] = secrets
elif target_files:
for target_file in target_files:
try:
logger.debug('start scanning secrets for %s', target_file)
with open(target_file, encoding='utf8') as f:
data = f.read()
if not data:
continue
secrets = _scan_secrets_for_string(data, confidence_level, custom_pattern)
logger.debug('%d secrets found for %s', len(secrets), target_file)
if secrets:
scan_results[target_file] = secrets
except Exception as ex: # pylint: disable=broad-exception-caught
if continue_on_failure:
logger.warning("Error handling file %s, exception %s", target_file, str(ex))
else:
raise ex
if scan_result_path:
save_scan_result = True
if not save_scan_result:
return {
'secrets_detected': bool(scan_results),
'scan_results': scan_results
}
if not scan_results:
return {'secrets_detected': False, 'scan_result_path': None}
if not scan_result_path:
from azdev.utilities.config import get_azdev_config_dir
from datetime import datetime
file_folder = os.path.join(get_azdev_config_dir(), 'scan_results')
if not os.path.exists(file_folder):
os.mkdir(file_folder, 0o755)
result_file_name = 'scan_result_' + datetime.now().strftime('%Y%m%d%H%M%S') + '.json'
scan_result_path = os.path.join(file_folder, result_file_name)
with open(scan_result_path, 'w', encoding='utf8') as f:
json.dump(scan_results, f)
logger.debug('store scanning results in %s', scan_result_path)
return {'secrets_detected': True, 'scan_result_path': os.path.abspath(scan_result_path)}