comparison python/gpg_add.py @ 847:6c918c07d0e3

[gpg] make a front-end to add a line to a gpg symmetrically encrypted file
author Jeff Hammel <k0scist@gmail.com>
date Tue, 17 Oct 2017 11:59:09 -0700
parents
children a3ee050ae568
comparison
equal deleted inserted replaced
846:1259f9d79961 847:6c918c07d0e3
1 #!/usr/bin/env python
2
3 """
4 add a line to a gpg file; requires `gpg` on your path
5 """
6
7 import argparse
8 import os
9 import shutil
10 import subprocess
11 import sys
12 import tempfile
13
14
15 def main(args=sys.argv[1:]):
16 """CLI"""
17
18 parser = argparse.ArgumentParser(description=__doc__)
19 parser.add_argument('file', help="path to GPG file")
20 parser.add_argument('line', help='line to add + encrypt')
21 options = parser.parse_args(args)
22
23 if not os.path.isfile(options.file):
24 parser.error("Not a file: '{}'".format(options.file))
25
26 tmpdir = tempfile.mkdtemp()
27 try:
28 # decrypt the file
29 outfile = os.path.join(tmpdir, options.file + '.decrypted')
30 subprocess.check_call(['gpg', '--output', outfile, '--decrypt', options.file])
31 assert os.path.exists(outfile)
32
33 # read lines
34 with open(outfile) as f:
35 lines = f.read().strip().splitlines()
36
37 # write the file
38 lines.append(options.line)
39 with open(outfile, 'w') as f:
40 f.write('\n'.join(lines))
41
42 # encrypt
43 subprocess.check_call(['gpg', '--output', options.file, '--symmetric', outfile])
44 finally:
45 shutil.rmtree(tmpdir, ignore_errors=True)
46
47 if __name__ == '__main__':
48 main()