commit 4f6e81c28ffa034677583417a7a982e4aadd5fb0
parent 02d0b9a8007fb8532e3b2af3557fdefbeb8bb9b2
Author: Juhamatti Niemelä <iiska@iki.fi>
Date: Sat, 15 Sep 2012 01:07:42 +0200
Script for importing password data XML from KeepassX to password-store.
Diffstat:
1 file changed, 37 insertions(+), 0 deletions(-)
diff --git a/contrib/keepassx2pass.py 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])