Export in Bitwarden CSV format

This commit is contained in:
Maxence 2022-07-30 11:58:22 +02:00 committed by GitHub
parent 7e8add9327
commit 0a85041143
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -14,15 +14,17 @@ GPG_BIN = 'gpg'
TAR_BIN = 'tar' TAR_BIN = 'tar'
Record = namedtuple('Record', [ Record = namedtuple('Record', [
'Title', "folder",
'Url', "favorite",
'Username', "type",
'Password', "name",
'OTPAuth', "notes",
'Favorite', "fields",
'Archived', "reprompt",
'Tags', "login_uri",
'Notes', "login_username",
"login_password",
"login_totp"
]) ])
Vault = namedtuple('Vault', ['title', 'records']) Vault = namedtuple('Vault', ['title', 'records'])
@ -61,7 +63,7 @@ def process_vault(vault):
print(str_v(vault_name, 'fetch items'), end='') print(str_v(vault_name, 'fetch items'), end='')
items = retrieve_items(vault_uuid) items = retrieve_items(vault_uuid)
records = [] records = []
records.append(Record("Title","Url","Username","Password","OTPAuth","Favorite","Archived","Tags","Notes")) records.append(Record("folder","favorite","type","name","notes","fields","reprompt","login_uri","login_username","login_password","login_totp"))
print(str_vr(vault_name, 0, len(items)), end='') print(str_vr(vault_name, 0, len(items)), end='')
for index, item in enumerate(items): for index, item in enumerate(items):
item_data = retrieve_item(item['id']) item_data = retrieve_item(item['id'])
@ -78,15 +80,16 @@ def save_vault(base_dir, vault):
record_writer = csv.writer(csv_file) record_writer = csv.writer(csv_file)
for record in vault.records: for record in vault.records:
record_writer.writerow([ record_writer.writerow([
record.Title, record.folder,
record.Url, record.favorite,
record.Username, record.type,
record.Password, record.name,
record.OTPAuth, record.notes,
record.Favorite, record.fields,
record.Archived, record.login_uri,
record.Tags, record.login_username,
record.Notes record.login_password,
record.login_totp
]) ])
@ -123,15 +126,17 @@ def retrieve_item(item_uuid):
def extract_item_fields(item_data): def extract_item_fields(item_data):
fields = item_data.get('fields', []) fields = item_data.get('fields', [])
return Record( return Record(
Title=item_data.get('title', ''), folder=(item_data.get('vault', {})).get('name', ''),
Url=(item_data.get('urls', [])[0]["href"] if item_data.get('urls', [])[0] else ''), favorite="",
Username=value_from_fields(fields, 'username').strip(), type=item_data.get('category', '').lower(),
Password=value_from_fields(fields, 'password').strip(), name=item_data.get('title', ''),
OTPAuth="", notes=value_from_fields(fields, 'notesPlain'),
Favorite="false", fields="",
Archived="false", reprompt=0,
Tags="", login_uri=item_data.get('urls', [])[0].get("href", ""),
Notes=value_from_fields(fields, 'notesPlain') login_username=value_from_fields(fields, 'username').strip(),
login_password=value_from_fields(fields, 'password').strip(),
login_totp=""
) )