Set hidden custom fields as protected

Closes #3
This commit is contained in:
David Němec 2023-07-18 09:43:00 +02:00
parent bcd0a217d5
commit 5104c5c0f3
No known key found for this signature in database
GPG Key ID: B1064EFFFD11AA75
2 changed files with 14 additions and 5 deletions

View File

@ -13,7 +13,7 @@ from pykeepass.group import Group as KPGroup
from pykeepass.entry import Entry as KPEntry from pykeepass.entry import Entry as KPEntry
import folder as FolderType import folder as FolderType
from item import Item, Types as ItemTypes from item import Item, ItemType, CustomFieldType
logging.basicConfig( logging.basicConfig(
level=logging.INFO, level=logging.INFO,
@ -43,7 +43,7 @@ def bitwarden_to_keepass(args):
items = json.loads(items) items = json.loads(items)
logging.info(f'Starting to process {len(items)} items.') logging.info(f'Starting to process {len(items)} items.')
for item in items: for item in items:
if item['type'] in [ItemTypes.CARD, ItemTypes.IDENTITY]: if item['type'] in [ItemType.CARD, ItemType.IDENTITY]:
logging.warning(f'Skipping credit card or identity item "{item["name"]}".') logging.warning(f'Skipping credit card or identity item "{item["name"]}".')
continue continue
@ -70,14 +70,18 @@ def bitwarden_to_keepass(args):
totp_secret, totp_settings = bw_item.get_totp() totp_secret, totp_settings = bw_item.get_totp()
if totp_secret and totp_settings: if totp_secret and totp_settings:
entry.set_custom_property('TOTP Seed', totp_secret) entry.set_custom_property('TOTP Seed', totp_secret, protect=True)
entry.set_custom_property('TOTP Settings', totp_settings) entry.set_custom_property('TOTP Settings', totp_settings)
uris = [uri['uri'] for uri in bw_item.get_uris()] uris = [uri['uri'] for uri in bw_item.get_uris()]
set_kp_entry_urls(entry, uris) set_kp_entry_urls(entry, uris)
for field in bw_item.get_custom_fields(): for field in bw_item.get_custom_fields():
entry.set_custom_property(field['name'], field['value']) entry.set_custom_property(
field['name'],
field['value'],
protect=field['type'] == CustomFieldType.HIDDEN,
)
for attachment in bw_item.get_attachments(): for attachment in bw_item.get_attachments():
attachment_raw = subprocess.check_output([ attachment_raw = subprocess.check_output([

View File

@ -2,12 +2,16 @@ from enum import IntEnum
from urllib.parse import urlsplit, parse_qsl from urllib.parse import urlsplit, parse_qsl
class Types(IntEnum): class ItemType(IntEnum):
LOGIN = 1 LOGIN = 1
SECURE_NOTE = 2 SECURE_NOTE = 2
CARD = 3 CARD = 3
IDENTITY = 4 IDENTITY = 4
class CustomFieldType(IntEnum):
TEXT = 0
HIDDEN = 1
BOOLEAN = 2
class Item: class Item:
def __init__(self, item): def __init__(self, item):
@ -53,6 +57,7 @@ class Item:
for field in self.item['fields']: for field in self.item['fields']:
field['name'] = field['name'] if field['name'] is not None else '' field['name'] = field['name'] if field['name'] is not None else ''
field['value'] = field['value'] if field['value'] is not None else '' field['value'] = field['value'] if field['value'] is not None else ''
field['type'] = CustomFieldType(field['type'])
return self.item['fields'] return self.item['fields']