def _get_barbican_client(self, ctxt): """Creates a client to connect to the Barbican service. :param ctxt: the user context for authentication :return: a Barbican Client object :raises Forbidden: if the ctxt is None """ # Confirm context is provided, if not raise forbidden if not ctxt: msg = _("User is not authorized to use key manager.") LOG.error(msg) raise exception.Forbidden(msg) if not hasattr(ctxt, 'project_id') or ctxt.project_id is None: msg = _("Unable to create Barbican Client without project_id.") LOG.error(msg) raise exception.KeyManagerError(msg) # If same context, return cached barbican client if self._barbican_client and self._current_context == ctxt: return self._barbican_client try: _SESSION = ks_loading.load_session_from_conf_options( CONF, BARBICAN_OPT_GROUP) auth = ctxt.get_auth_plugin() service_type, service_name, interface = (CONF. barbican. catalog_info. split(':')) region_name = CONF.barbican.os_region_name service_parameters = {'service_type': service_type, 'service_name': service_name, 'interface': interface, 'region_name': region_name} if CONF.barbican.endpoint_template: self._base_url = (CONF.barbican.endpoint_template % ctxt.to_dict()) else: self._base_url = _SESSION.get_endpoint( auth, **service_parameters) # the barbican endpoint can't have the '/v1' on the end self._barbican_endpoint = self._base_url.rpartition('/')[0] sess = session.Session(auth=auth) self._barbican_client = barbican_client.Client( session=sess, endpoint=self._barbican_endpoint) self._current_context = ctxt except Exception as e: with excutils.save_and_reraise_exception(): LOG.error(_LE("Error creating Barbican client: %s"), e) return self._barbican_client
def delete_key(self, ctxt, key_id, **kwargs): if ctxt is None: raise exception.NotAuthorized() if key_id != self.key_id: raise exception.KeyManagerError( reason="cannot delete non-existent key") LOG.warn(_("Not deleting key %s"), key_id)
def delete_key(self, ctxt, key_id, **kwargs): if ctxt is None: raise exception.Forbidden() if key_id != self.key_id: raise exception.KeyManagerError( reason=_("cannot delete non-existent key")) LOG.warning(_LW("Not deleting key %s"), key_id)
def store(self, context, managed_object, **kwargs): """Stores (i.e., registers) a key with the key manager.""" if context is None: raise exception.Forbidden() if managed_object != self._get_key(): raise exception.KeyManagerError( reason="cannot store arbitrary keys") return self.key_id
def _create_secret_ref(self, key_id): """Creates the URL required for accessing a secret. :param key_id: the UUID of the key to copy :return: the URL of the requested secret """ if not key_id: msg = "Key ID is None" raise exception.KeyManagerError(msg) return self._base_url + "/secrets/" + key_id
def delete(self, context, managed_object_id): """Represents deleting the key. Simply delete the key from our list of keys. """ if context is None: raise exception.Forbidden() if managed_object_id not in self._passphrases: raise exception.KeyManagerError( reason="cannot delete non-existent secret") del self._passphrases[managed_object_id]
def store(self, context, managed_object, **kwargs): """Stores (i.e., registers) a passphrase with the key manager.""" if context is None: raise exception.Forbidden() if not isinstance(managed_object, passphrase.Passphrase): raise exception.KeyManagerError( reason='cannot store anything except passphrases') uuid = uuidutils.generate_uuid() managed_object._id = uuid # set the id to simulate persistence self._passphrases[uuid] = managed_object return uuid
def delete(self, context, managed_object_id): """Represents deleting the key. Because the ConfKeyManager has only one key, which is read from the configuration file, the key is not actually deleted when this is called. """ if context is None: raise exception.Forbidden() if managed_object_id != self.key_id: raise exception.KeyManagerError( reason="cannot delete non-existent key") LOG.warning(_LW("Not deleting key %s"), managed_object_id)
def store_key(self, ctxt, key, **kwargs): if key != self.key: raise exception.KeyManagerError( reason="cannot store arbitrary keys") return super(SingleKeyManager, self).store_key(ctxt, key, **kwargs)