def execute(self, args):
        # Prompt the user for any require server credential arguments which
        # were not specified on the command line.
        _prompt_server_args(args)

        pk_filename = _private_key_filename(args.file_prefix)
        csr_as_string = self._process_csr_and_private_key(
            os.path.join(args.config_dir, pk_filename), args)

        svc = ManagementService(args.host, args.port, args.user, args.password,
                                verify=args.truststore)
        data_responses = svc.invoke_command(
            self._PROVISION_COMMAND,
            {"csrString": csr_as_string}).split(",")

        if len(data_responses) < 3:
            raise Exception("{} Expected {}, Received {}. Value: {}".format(
                "Did not receive expected number of response elements.",
                3, len(data_responses), data_responses))

        brokers = self._brokers_for_config(data_responses[2].splitlines())
        config_file = os.path.join(args.config_dir, _DXL_CONFIG_FILE_NAME)
        logger.info("Saving DXL config file to %s", config_file)
        dxlconfig = DxlClientConfig(_CA_BUNDLE_FILE_NAME,
                                    _cert_filename(args.file_prefix),
                                    pk_filename,
                                    brokers)
        dxlconfig.write(config_file)

        self._save_pem(data_responses[0], "ca bundle",
                       os.path.join(args.config_dir,
                                    dxlconfig.broker_ca_bundle))
        self._save_pem(data_responses[1], "client certificate",
                       os.path.join(args.config_dir, dxlconfig.cert_file))
Ejemplo n.º 2
0
 def test_write_in_memory_config(self):
     expected_data = os.linesep.join([
         "[Certs]", "BrokerCertChain = mycabundle.pem",
         "CertFile = mycertfile.pem", "PrivateKey = myprivatekey.pem",
         "{}[Brokers]".format(os.linesep),
         "myid1 = myid1;8001;myhost1;10.10.100.1",
         "myid2 = myid2;8002;myhost2;10.10.100.2{}".format(os.linesep)
     ])
     byte_stream = self.CapturedBytesIO()
     with patch.object(builtins, 'open',
                       return_value=byte_stream) as mock_open:
         config = DxlClientConfig(
             "mycabundle.pem", "mycertfile.pem", "myprivatekey.pem", [
                 Broker("myhost1", "myid1", "10.10.100.1", 8001),
                 Broker("myhost2", "myid2", "10.10.100.2", 8002)
             ])
         config.write("myfile.txt")
     self.assertEqual(expected_data.encode(), byte_stream.bytes_captured)
     mock_open.assert_called_with("myfile.txt", "wb")