Add support for KeePass icons.
This commit is contained in:
parent
ad69b83aa6
commit
15770bd7a8
49
convert.py
49
convert.py
@ -5,6 +5,7 @@ import datetime
|
|||||||
import json
|
import json
|
||||||
import onepif
|
import onepif
|
||||||
import kpwriter
|
import kpwriter
|
||||||
|
import pykeepass.icons
|
||||||
|
|
||||||
from os.path import splitext
|
from os.path import splitext
|
||||||
from urllib.parse import urlparse, quote_plus
|
from urllib.parse import urlparse, quote_plus
|
||||||
@ -57,28 +58,54 @@ def getTotp(item):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
# FIXME: Convert everything to use KpWriter class
|
ICON_MAP = {
|
||||||
kp = kp.kp
|
"112": "GEAR", # API Credential
|
||||||
|
"wallet.financial.BankAccountUS": "DOLLAR_SIGN", # Bank Account
|
||||||
|
"wallet.financial.CreditCard": "DOLLAR_SIGN", # Credit Card
|
||||||
|
"wallet.computer.Database": "SERVER", # Database
|
||||||
|
# Not exported: Document
|
||||||
|
"wallet.government.DriversLicense": "BUSINESS_CARD", # Driver License
|
||||||
|
"wallet.onlineservices.Email.v2": "ENVELOPE", # Email Account
|
||||||
|
"identities.Identity": "BUSINESS_CARD", # Identity
|
||||||
|
"webforms.WebForm": "MANAGER", # Login
|
||||||
|
"113": "WARNING_SIGN", # Medical Record
|
||||||
|
"wallet.membership.Membership": "BUSINESS_CARD", # Membership
|
||||||
|
"wallet.government.HuntingLicense": "BUSINESS_CARD", # Outdoor License
|
||||||
|
"wallet.government.Passport": "BUSINESS_CARD", # Passport
|
||||||
|
"passwords.Password": "KEY", # Password
|
||||||
|
"wallet.membership.RewardProgram": "PERCENT_SIGN", # Reward Program
|
||||||
|
"securenotes.SecureNote": "POST_IT", # Secure Note
|
||||||
|
"wallet.computer.UnixServer": "SERVER_2", # Server
|
||||||
|
"wallet.government.SsnUS": "BUSINESS_CARD", # Social Security Number
|
||||||
|
"wallet.computer.License": "CARDBOARD", # Software License
|
||||||
|
"wallet.computer.Router": "12", # Wireless Router
|
||||||
|
}
|
||||||
|
|
||||||
for item in opif:
|
for item in opif:
|
||||||
if item.get("trashed"):
|
|
||||||
continue
|
|
||||||
|
|
||||||
|
|
||||||
# Make sure target group exists
|
# Make sure target group exists
|
||||||
item_type_name = item.type_name
|
item_type_name = item.type_name
|
||||||
target_group_name = "{}s".format(item_type_name) # plural for group
|
target_group_name = "{}s".format(item_type_name) # plural for group
|
||||||
group = kp.find_groups(name=target_group_name, group=kp.root_group, first=True)
|
|
||||||
if not group:
|
if item.is_trash():
|
||||||
group = kp.add_group(kp.root_group, target_group_name)
|
target_group_name = "Recycle Bin"
|
||||||
|
|
||||||
# Add entry to KeePass
|
# Add entry to KeePass
|
||||||
entry = kp.add_entry(group, item["title"], "", "")
|
entry = kp.add_entry(target_group_name, item["title"])
|
||||||
|
|
||||||
|
# Set icon
|
||||||
|
kp_icon = ICON_MAP[item.type]
|
||||||
|
if kp_icon in dir(pykeepass.icons):
|
||||||
|
kp_icon_id = getattr(pykeepass.icons, kp_icon)
|
||||||
|
else:
|
||||||
|
# FIXME: Assume kp_icon is already ID, needed b/c icon 12 is missing from pykeepass.icons
|
||||||
|
kp_icon_id = kp_icon
|
||||||
|
entry.icon = kp_icon_id
|
||||||
|
|
||||||
secure = item["secureContents"]
|
secure = item["secureContents"]
|
||||||
|
|
||||||
# Tags
|
# Tags
|
||||||
if "openContents" in item and "tags" in item["openContents"]:
|
entry.tags = item.get_tags()
|
||||||
entry.tags = item["openContents"]["tags"]
|
|
||||||
|
|
||||||
# Username
|
# Username
|
||||||
if "username" in secure:
|
if "username" in secure:
|
||||||
|
14
kpwriter.py
14
kpwriter.py
@ -4,3 +4,17 @@ from pykeepass import create_database
|
|||||||
class KpWriter:
|
class KpWriter:
|
||||||
def __init__(self, filename, password="test"):
|
def __init__(self, filename, password="test"):
|
||||||
self.kp = create_database(filename, password)
|
self.kp = create_database(filename, password)
|
||||||
|
self.last_entry = None
|
||||||
|
|
||||||
|
def add_entry(self, dest_group_name, title):
|
||||||
|
# Find group and create if not yet there
|
||||||
|
group = self.kp.find_groups(name=dest_group_name, first=True)
|
||||||
|
if not group:
|
||||||
|
# TODO: Handle nested groups?
|
||||||
|
group = self.kp.add_group(self.kp.root_group, dest_group_name)
|
||||||
|
|
||||||
|
self.last_entry = self.kp.add_entry(group, title, "", "")
|
||||||
|
return self.last_entry
|
||||||
|
|
||||||
|
def save(self):
|
||||||
|
return self.kp.save()
|
||||||
|
@ -34,6 +34,18 @@ class OnepifEntry():
|
|||||||
self.type = new_type
|
self.type = new_type
|
||||||
self.type_name = TYPES[new_type]
|
self.type_name = TYPES[new_type]
|
||||||
|
|
||||||
|
def get_tags(self):
|
||||||
|
if "openContents" not in self.raw:
|
||||||
|
return []
|
||||||
|
if "tags" not in self.raw["openContents"]:
|
||||||
|
return []
|
||||||
|
return self.raw["openContents"]["tags"]
|
||||||
|
|
||||||
|
def is_trash(self):
|
||||||
|
if "trashed" in self.raw:
|
||||||
|
return self.raw["trashed"]
|
||||||
|
return False
|
||||||
|
|
||||||
def __getattr__(self, name):
|
def __getattr__(self, name):
|
||||||
if name not in self.raw:
|
if name not in self.raw:
|
||||||
raise AttributeError
|
raise AttributeError
|
||||||
|
Loading…
x
Reference in New Issue
Block a user