added no encryption option. Also added for loops for csv and json exports as some are failing

This commit is contained in:
2022-10-07 21:00:05 -04:00
parent 1e4ed58fe6
commit 04ad1dbba6

View File

@@ -324,6 +324,12 @@ if __name__ == "__main__":
dest="debug",
help="Output debug/verbose info to the console for troubleshooting."
)
parser.add_option (
"--no-encryption",
action="store_true",
dest="no_encrypt",
help="Will only zip up export and will NOT encrypt anything."
)
opts, args = parser.parse_args(sys.argv[1:])
os_detected = platform.system()
@@ -454,22 +460,50 @@ if __name__ == "__main__":
# export to csv and json
logger.info("Exporting vault to both CSV and JSON files")
logger.debug("Exporting vault to CSV")
logger.debug((subprocess.run([bitwarden_cli_executable, 'export', '--output', os.path.join(working_directory, 'Bitwarden {} Export {}.csv'.format(email, datetime_string)) , '--format', 'csv'], capture_output=True).stdout).decode())
file_name = 'Bitwarden {} Export {}'.format(email, datetime_string)
while True:
logger.debug((subprocess.run([bitwarden_cli_executable, 'export', '--output', os.path.join(working_directory, '{}.csv'.format(file_name)) , '--format', 'csv'], capture_output=True).stdout).decode())
file_size = os.path.getsize('{}.csv'.format(file_name))
if (file_size > 0):
break
else:
logger.info("CSV export did not run correctly, running export again")
logger.debug("Exporting vault to JSON")
logger.debug((subprocess.run([bitwarden_cli_executable, 'export', '--output', os.path.join(working_directory, 'Bitwarden {} Export {}.json'.format(email, datetime_string)), '--format', 'json'], capture_output=True).stdout).decode())
file_name = 'Bitwarden {} Export {}'.format(email, datetime_string)
while True:
logger.debug((subprocess.run([bitwarden_cli_executable, 'export', '--output', os.path.join(working_directory, '{}.json'.format(file_name)), '--format', 'json'], capture_output=True).stdout).decode())
file_size = os.path.getsize('{}.json'.format(file_name))
if (file_size > 56):
break
else:
logger.info("JSON export did not run correctly, running export again")
# looking for Organizations
# look for organizations
logger.info("Looking for Organizations")
bitwarden_organizations = json.loads(((subprocess.run([bitwarden_cli_executable, 'list', 'organizations'], capture_output=True)).stdout).decode())
logger.info("Found {} Organiztaions.".format(len(bitwarden_organizations)))
for organization in bitwarden_organizations:
logger.info("Exporting organization {} vault to both CSV and JSON files".format(organization['name']))
logger.debug("Exporting organization vault to CSV")
logger.debug((subprocess.run([bitwarden_cli_executable, 'export', '--organizationid', '{}'.format(organization['id']), '--output', os.path.join(working_directory, 'Bitwarden Organization {} Export {}.csv'.format(organization['name'], datetime_string)) , '--format', 'csv'], capture_output=True).stdout).decode())
file_name = 'Bitwarden Organization {} Export {}'.format(organization['name'], datetime_string)
while True:
logger.debug((subprocess.run([bitwarden_cli_executable, 'export', '--organizationid', '{}'.format(organization['id']), '--output', os.path.join(working_directory, '{}.csv'.format(file_name)) , '--format', 'csv'], capture_output=True).stdout).decode())
file_size = os.path.getsize('{}.csv'.format(file_name))
if (file_size > 0):
break
else:
logger.info("CSV export did not run correctly, running export again")
logger.debug("Exporting organization vault to JSON")
logger.debug((subprocess.run([bitwarden_cli_executable, 'export', '--organizationid', '{}'.format(organization['id']), '--output', os.path.join(working_directory, 'Bitwarden Organziation {} Export {}.json'.format(organization['name'], datetime_string)), '--format', 'json'], capture_output=True).stdout).decode())
while True:
logger.debug((subprocess.run([bitwarden_cli_executable, 'export', '--organizationid', '{}'.format(organization['id']), '--output', os.path.join(working_directory, '{}.json'.format(file_name)), '--format', 'json'], capture_output=True).stdout).decode())
file_size = os.path.getsize('{}.json'.format(file_name))
if (file_size > 56):
break
else:
logger.info("JSON export did not run correctly, running export again")
logger.info("Downlading attachments...")
bitwarden_items = json.loads(((subprocess.run([bitwarden_cli_executable, 'list', 'items'], capture_output=True)).stdout).decode())
@@ -490,17 +524,20 @@ if __name__ == "__main__":
zip_filename = os.path.join(exports_directory, "Bitwarden Backup {} {}".format(email, datetime_string))
shutil.make_archive(zip_filename, format="zip", root_dir=working_directory)
logger.debug((subprocess.run([gpg_executable, '--no-options', '--batch', '--passphrase', vault_password, '--symmetric', '--cipher-algo', 'AES256', '--digest-algo', 'SHA512', '--compression-algo', 'Uncompressed', '--output', zip_filename + '.zip.gpg', zip_filename + '.zip'], capture_output=True).stdout).decode())
if not opts.no_encrypt:
logger.debug((subprocess.run([gpg_executable, '--no-options', '--batch', '--passphrase', vault_password, '--symmetric', '--cipher-algo', 'AES256', '--digest-algo', 'SHA512', '--compression-algo', 'Uncompressed', '--output', zip_filename + '.zip.gpg', zip_filename + '.zip'], capture_output=True).stdout).decode())
logger.info("Securely deleting files")
if os_detected == "Windows":
# sdelete.exe .\working\ -p 5 -s
logger.debug((subprocess.run([sdelete_executable, '-p', '5', '-s', working_directory], capture_output=True).stdout).decode())
logger.debug((subprocess.run([sdelete_executable, '-p', '5', zip_filename + ".zip"], capture_output=True).stdout).decode())
if not opts.no_encrypt:
logger.debug((subprocess.run([sdelete_executable, '-p', '5', zip_filename + ".zip"], capture_output=True).stdout).decode())
elif os_detected == "Linux":
# find <directory> -depth -type f -exec shred -v -n 1 -z -u {} \;
logger.debug((subprocess.run(['find', working_directory, '-depth', '-type', 'f', '-exec', 'shred', '-v', '-n', '5', '-u', '/{/}', '\/', ';'], capture_output=True).stdout).decode())
logger.debug((subprocess.run(['shred', '-v', '-u', '-n', '5', zip_filename + '.zip'], capture_output=True).stdout).decode())
if not opts.no_encrypt:
logger.debug((subprocess.run(['shred', '-v', '-u', '-n', '5', zip_filename + '.zip'], capture_output=True).stdout).decode())
else:
logger.error((bitwarden_unlock_output.stderr).decode())