def write(self): with tempfile.NamedTemporaryFile(mode='w+b') as tmp: tmp.write(self.password) tmp.flush() cmd = self.get_cmd("encrypt", tmp.name) job = sp.Popen(cmd, stdin=sp.PIPE) job.communicate(json.dumps(self.data)) log.debug("write rc %d", job.returncode)
def env_is_ok(self): cmd = 'gpg --version'.split() try: text = sp.check_output(cmd) # the output is "gpg (GnuPG) 2.0.28", so we need # last token of a first line text = text.splitlines()[0].split()[-1] log.debug("gpg version %s", text) return text.startswith('2.') except: pass return False
def read(self): try: with tempfile.NamedTemporaryFile(mode='w+b') as tmp: tmp.write(self.password) tmp.flush() cmd = self.get_cmd("decrypt", tmp.name) st_out = sp.check_output(cmd) self.data = json.loads(st_out) log.debug("json %s", json.dumps(self.data, indent=4)) except: print print "Did you ran '%s --init' ?" % prog_name exit(100)
def get_cmd(self, action, name): if action == 'encrypt': cmd = 'gpg -q --symmetric --armor --batch --yes ' cmd += '--passphrase-file %s --output' cmd = cmd % name elif action == 'decrypt': cmd = 'gpg -q --decrypt --no-mdc-warning --batch --armor ' cmd += '--passphrase-file %s' cmd = cmd % name else: raise Exception("bad action") cmd = cmd.split() + [self.path] log.debug("cmd '%s'", ' '.join(cmd)) return cmd
def __init__(self, password='', path=''): if not self.env_is_ok(): print "Please install gpg 2.x version" exit(100) if not password: password = getpass.getpass('Enter master password: '******'%s'", self.password) if not path: path = os.path.expanduser(self.def_dir) mkdir_p(path) path += '/safe.gpg' self.path = path log.debug("path: '%s'", self.path) self.data = {} self.null = open('/dev/null', 'w')
help='Print alias password', dest='info_password', action='store_true') p.add_argument('alias', help='Alias name or "all"', nargs='?') args = p.parse_args() if args.verbose: log.setLevel(logging.INFO) if args.debug: log.setLevel(logging.DEBUG) log.debug("Args: %s", json.dumps(vars(args), indent=4, sort_keys=True)) ############################################ # Misc ############################################ def mkdir_p(path): path = os.path.expanduser(path) try: os.makedirs(path) except OSError as exc: # Python >2.5 if exc.errno == os.errno.EEXIST and os.path.isdir(path): pass else: raise