diff options
-rwxr-xr-x | contrib/keepassx2pass.py | 37 |
1 files changed, 37 insertions, 0 deletions
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]) |