-
Notifications
You must be signed in to change notification settings - Fork 0
/
gravelfile.py
28 lines (24 loc) · 866 Bytes
/
gravelfile.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import yaml
import gnupg
import os
import io
import tarfile
import subprocess
class GPG:
def __init__(self, path=os.path.expanduser('~/.gravel/gpg')):
self.path = path
self.cmd = ['gpg', '--homedir', self.path]
def verify_and_get(self, input):
result = subprocess.call(self.cmd + ['--verify'],
stdin=open(input),
stderr=open('/dev/null', 'w'))
if result != 0:
raise VerificationError()
return subprocess.check_output(self.cmd + ['--decrypt'],
stdin=open(input), stderr=open('/dev/null', 'w'))
class VerificationError(Exception):
pass
def unpack(input, dest, gpg):
pkg_data = gpg.verify_and_get(input)
tar = tarfile.open(fileobj=io.BytesIO(pkg_data), mode='r')
tar.extractall(dest)