From 4f6e81c28ffa034677583417a7a982e4aadd5fb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juhamatti=20Niemel=C3=A4?= Date: Sat, 15 Sep 2012 01:07:42 +0200 Subject: Script for importing password data XML from KeepassX to password-store. --- contrib/keepassx2pass.py | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100755 contrib/keepassx2pass.py diff --git a/contrib/keepassx2pass.py b/contrib/keepassx2pass.py new file mode 100755 index 0000000..86e2f11 --- /dev/null +++ b/contrib/keepassx2pass.py @@ -0,0 +1,37 @@ +#! /usr/bin/env python + +import sys + +from subprocess import Popen, PIPE +from xml.etree import ElementTree + +def path_for(element, path=''): + """ Generate path name from elements title and current path """ + title = element.find('title').text + return '/'.join([path, title]) + +def import_entry(element, path=''): + """ Import new password entry to password-store using pass insert + command """ + proc = Popen(['pass', 'insert', path_for(element, path)], + stdin=PIPE, stdout=PIPE) + proc.communicate(element.find('password').text + "\n") + proc.wait() + +def import_group(element, path=''): + """ Import all entries and sub-groups from given group """ + npath = path_for(element, path) + for group in element.findall('group'): + import_group(group, npath) + for entry in element.findall('entry'): + import_entry(entry, npath) + + +def main(xml_file): + """ Parse given KeepassX XML file and import password groups from it """ + with open(xml_file) as xml: + for group in ElementTree.XML(xml.read()).findall('group'): + import_group(group) + +if __name__ == '__main__': + main(sys.argv[1]) -- cgit v1.2.3