Пример #1
0
    def _init_gpg(self):
        """
        Initialise GPG encryption and signing mechanisms.

        See __init__() for more information.
        """

        self._gpg = GPG.get_gpg(gnupghome=self._config['gpg']['key_store'],
                                          instancename='hn-agent')
        gpg_secrets = self._gpg.list_keys(True)

        for key in gpg_secrets:
            if key['fingerprint'] == self._config['gpg']['fingerprint']:
                self._gpg._secret_key = key
                break

        if not hasattr(self._gpg, '_secret_key'):
            self._main_log.error('no GPG private key configured; aborting')
            sys.exit(78)
Пример #2
0
    def __init__(self, request, client_address, server):
        """
        Initialise the request.

        Initialises the logger and GPG interface in preparation for handling the
        request. This enables us to write any debugging information to the log
        and retain key metadata to save resources with larger GPG keyrings.
        """

        # Overridden from BaseHTTPRequestHandler
        #
        # This override enables logging to our dedicated request log.

        self._log = logging.getLogger('hn-request')
        self._err = logging.getLogger('hn-error')

        self._gpg = GPG.get_gpg(instancename='hn-agent')

        super().__init__(request, client_address, server)
Пример #3
0
    def _init_gpg(self):

        self._gpg = GPG.get_gpg(gnupghome=self.gpg_dir)
Пример #4
0
    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)