diff --git a/bitwardenBackup.py b/bitwardenBackup.py index c05a6be..1bcd9af 100644 --- a/bitwardenBackup.py +++ b/bitwardenBackup.py @@ -422,5 +422,48 @@ if __name__ == "__main__": # Catch all for non-valid characters else: print("This value must be one of the following characters: e, n, d, q.") + + #json.loads((subprocess.check_output(['bw.exe','status'])).decode())['status'] + accounts = read_config_file(secrets_config_file) + emails = list(accounts) + for email in emails: + vault_password = accounts[email]['account_vault_password'] + os.environ["BW_CLIENTID"] = accounts[email]['account_api_client_id'] + os.environ["BW_CLIENTSECRET"] = accounts[email]['account_api_secret'] + + # login to Bitwarden + logger.info("Trying to login to Bitwarden as {}".format(email)) + bitwarden_login = subprocess.run([bitwarden_cli_executable, 'login', '--apikey', '--raw', '--quiet'], capture_output=True) + logger.debug("Bitwarden login output: {}".format(bitwarden_login)) + bitwarden_status = json.loads(((subprocess.run([bitwarden_cli_executable, 'status'], capture_output=True)).stdout).decode()) + logger.debug("Bitwarden Status: {}".format(bitwarden_status)) + if bitwarden_status['status'] == "locked": + logger.info("Logged in successfully") + bitwarden_session_key = (subprocess.run([bitwarden_cli_executable, 'unlock', vault_password, '--raw', '--nointeraction'], capture_output=True).stdout).decode() + if bitwarden_session_key: + #logger.debug("Session key: {}".format(bitwarden_session_key)) + logger.info("Successfully unlocked vault") + os.environ["BW_SESSION"] = bitwarden_session_key + else: + logger.error("Unable to unlock vault, please check vault password") + else: + logger.error("Unable to login to account, please check API credentials") + + # export to csv and json + logging.info("Exporting vault to both CSV and JSON files.") + logging.debug("Exporting vault to CSV.") + bitwarden_export = (subprocess.run([bitwarden_cli_executable, 'export', '--output', os.path.join(script_directory, 'export.csv') , '--format', 'csv'], capture_output=True).stdout).decode() + logging.debug("Bitwarden export to CSV output: {}".format(bitwarden_export)) + logging.debug("Exporting vault to JSON.") + bitwarden_export = (subprocess.run([bitwarden_cli_executable, 'export', '--output', os.path.join(script_directory, 'export.json'), '--format', 'json'], capture_output=True).stdout).decode() + logging.debug("Bitwarden export to JSON output: {}".format(bitwarden_export)) + + + del os.environ['BW_CLIENTID'] + del os.environ['BW_CLIENTSECRET'] + del os.environ["BW_SESSION"] + logger.info("Logging out of your Bitwarden account") + subprocess.run([bitwarden_cli_executable, 'logout', '--quiet']) + client.close() sys.exit(0)