Start outsourcing KeePass handling into kpwriter.py
This commit is contained in:
parent
5847073699
commit
ad69b83aa6
17
convert.py
17
convert.py
@ -4,9 +4,9 @@ import argparse
|
|||||||
import datetime
|
import datetime
|
||||||
import json
|
import json
|
||||||
import onepif
|
import onepif
|
||||||
|
import kpwriter
|
||||||
|
|
||||||
from os.path import splitext
|
from os.path import splitext
|
||||||
from pykeepass import create_database
|
|
||||||
from urllib.parse import urlparse, quote_plus
|
from urllib.parse import urlparse, quote_plus
|
||||||
|
|
||||||
parser = argparse.ArgumentParser(description="Convert 1Password 1PIF exports into a KeePass KDBX file.")
|
parser = argparse.ArgumentParser(description="Convert 1Password 1PIF exports into a KeePass KDBX file.")
|
||||||
@ -15,15 +15,23 @@ parser.add_argument("outfile", metavar="output.kdbx", nargs="?", help="Desired f
|
|||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
# If no outfile given, use infile name
|
||||||
if not args.outfile:
|
if not args.outfile:
|
||||||
fileparts = splitext(args.inpath)
|
fileparts = splitext(args.inpath)
|
||||||
args.outfile = "{}.kdbx".format(fileparts[0])
|
args.outfile = "{}.kdbx".format(fileparts[0])
|
||||||
|
|
||||||
|
# If given outfile doesn't have .kdbx extension, add it
|
||||||
outparts = splitext(args.outfile)
|
outparts = splitext(args.outfile)
|
||||||
if outparts[1] != ".kdbx":
|
if outparts[1] != ".kdbx":
|
||||||
args.outfile += ".kdbx"
|
args.outfile += ".kdbx"
|
||||||
|
|
||||||
kp = create_database(args.outfile, password="test")
|
# Open input file
|
||||||
|
print("Input file: {}".format(args.inpath))
|
||||||
|
opif = onepif.OnepifReader("{}/data.1pif".format(args.inpath))
|
||||||
|
|
||||||
|
# Open output file
|
||||||
|
print("Output file: {}".format(args.outfile))
|
||||||
|
kp = kpwriter.KpWriter(args.outfile, "test")
|
||||||
|
|
||||||
|
|
||||||
def getField(item, designation):
|
def getField(item, designation):
|
||||||
@ -49,7 +57,8 @@ def getTotp(item):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
opif = onepif.OnepifReader("{}/data.1pif".format(args.inpath))
|
# FIXME: Convert everything to use KpWriter class
|
||||||
|
kp = kp.kp
|
||||||
|
|
||||||
for item in opif:
|
for item in opif:
|
||||||
if item.get("trashed"):
|
if item.get("trashed"):
|
||||||
@ -166,7 +175,7 @@ for item in opif:
|
|||||||
entry.set_custom_property(ft, str(d))
|
entry.set_custom_property(ft, str(d))
|
||||||
elif k == "address":
|
elif k == "address":
|
||||||
# needs special handling!
|
# needs special handling!
|
||||||
pass # for now
|
pass # for now
|
||||||
else:
|
else:
|
||||||
raise Exception("Unknown k: {}".format(k))
|
raise Exception("Unknown k: {}".format(k))
|
||||||
|
|
||||||
|
6
kpwriter.py
Normal file
6
kpwriter.py
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
from pykeepass import create_database
|
||||||
|
|
||||||
|
|
||||||
|
class KpWriter:
|
||||||
|
def __init__(self, filename, password="test"):
|
||||||
|
self.kp = create_database(filename, password)
|
@ -26,10 +26,13 @@ class OnepifEntry():
|
|||||||
|
|
||||||
def __init__(self, data):
|
def __init__(self, data):
|
||||||
self.raw = data
|
self.raw = data
|
||||||
if data["typeName"] not in TYPES:
|
self.set_type(data["typeName"])
|
||||||
raise Exception("Unknown record type: {}".format(data["typeName"]))
|
|
||||||
self.type = data["typeName"]
|
def set_type(self, new_type):
|
||||||
self.type_name = TYPES[data["typeName"]]
|
if new_type not in TYPES:
|
||||||
|
raise Exception("Unknown record type: {}".format(new_type))
|
||||||
|
self.type = new_type
|
||||||
|
self.type_name = TYPES[new_type]
|
||||||
|
|
||||||
def __getattr__(self, name):
|
def __getattr__(self, name):
|
||||||
if name not in self.raw:
|
if name not in self.raw:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user