diff options
author | Sam Mason <sam@samason.uk> | 2017-02-25 11:22:05 +0000 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2017-02-25 14:09:01 +0100 |
commit | 03424643466ccb3abafc6e9b4a609625e41c8b2e (patch) | |
tree | 3c09a9dcf434369cc61bed7f59991d6a8f3b6638 /contrib/importers | |
parent | 2266c8e6cde59207f7b6ecf0985829b8823f1b63 (diff) |
pwsafe2pass: add importer
Diffstat (limited to 'contrib/importers')
-rwxr-xr-x | contrib/importers/pwsafe2pass.py | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/contrib/importers/pwsafe2pass.py b/contrib/importers/pwsafe2pass.py new file mode 100755 index 0000000..db6e027 --- /dev/null +++ b/contrib/importers/pwsafe2pass.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python3 + +# Copyright (C) 2017 Sam Mason <sam@samason.uk>. All Rights Reserved. +# This file is licensed under the GPLv2+. Please see COPYING for more information. + +import sys +import subprocess + +import pandas as pd + +# assumes STDIN is generated via File=>Export from the Mac version of +# pwsafe, available from https://pwsafe.info/ +df = pd.read_table(sys.stdin) +df.sort_values(['Group/Title','Username'], inplace=True) + +tr = { + ord('.'): '/', + ord('ยป'): '.' +} + +for i,row in df.iterrows(): + na = row.notnull() + + path = 'pwsafe/{}'.format(row['Group/Title'].strip().translate(tr)) + value = '{}\n'.format(row['Password']) + + if na['Username']: + path = '{}/{}'.format(path,row['Username'].strip()) + + if na['e-mail']: + value = 'email: {}\n'.format(value,row['e-mail'].strip()) + + if na['Notes']: + value = '\n{}\n'.format(value, row['Notes'].strip()) + + with subprocess.Popen(['pass','add','-m',path],stdin=subprocess.PIPE) as proc: + proc.communicate(value.encode('utf8')) + if proc.returncode: + print('failure with {}, returned {}'.format( + path, proc.returncode)) |