def __init__(self, cli_args, config_dir): """ TODO: break this stupidly huge method down """ super().__init__(cli_args, config_dir) if self._args.config_action == 'key': try: with open(self._args.privkey, 'rb') as key: key_blob = key.read() except IOError: print('Failed: the specified private key does not exist', file=sys.stderr) sys.exit(64) gpg = GPG(gnupghome=os.path.join(config_dir, 'gpg')) result = gpg.import_keys(key_blob) try: if not self._config.has_section('client'): self._config.add_section('client') self._config['client']['privkey'] = result.fingerprints[0] except IndexError: print('Failed: the specified private key is invalid') with open(os.path.join(config_dir, 'client.ini'), 'w') as c: self._config.write(c) elif self._args.config_action == 'node': if self._args.config_node_action == 'add': try: with open(self._args.pubkey, 'rb') as key: key_blob = key.read() except IOError: print('Failed: the specified public key does not exist', file=sys.stderr) sys.exit(64) gpg = GPG(gnupghome=os.path.join(config_dir, 'gpg')) result = gpg.import_keys(key_blob) try: key_fingerprint = result.fingerprints[0] gpg.sign_key(result.fingerprints[0]) gpg.trust_key(result.fingerprints[0]) except IndexError: print('Failed: the specified public key is invalid', file=sys.stderr) sys.exit(64) try: (addr, port) = self._args.addr.rsplit(':') except ValueError: (addr, port) = (self._args.addr, "3030") try: self._servers.add_section(self._args.name) self._servers.set(self._args.name, 'addr', "%s:%s" %(addr, port)) self._servers.set(self._args.name, 'pubkey', key_fingerprint) except configparser.DuplicateSectionError: print('Failed: a node with the specified name already exists', file=sys.stderr) sys.exit(64) elif self._args.config_node_action == 'list': for (name, node) in self._servers.items(): if name == 'DEFAULT': continue print(name) print(' Address:', node.get('addr')) print('Fingerprint:', node.get('pubkey')) print(' ') elif self._args.config_node_action == 'rm': if not self._servers.remove_section(self._args.name): print('Failed: no server exists with the specified name') sys.exit(64) elif self._args.config_node_action == 'show': try: node = self._servers[self._args.name] print(self._args.name) print(' Address:', node['addr']) print('Fingerprint:', node['pubkey']) except IndexError: print('Failed: no server exists with the specified name') sys.exit(64) with open(os.path.join(self._config_dir, 'servers.ini'), 'w') as f: self._servers.write(f)