def put(self, id, webhook): """Update webhook. Currently, only function_id and function_version are allowed to update. """ acl.enforce('webhook:update', context.get_ctx()) values = {} for key in UPDATE_ALLOWED: if webhook.to_dict().get(key) is not None: values.update({key: webhook.to_dict()[key]}) LOG.info('Update %s %s, params: %s', self.type, id, values) # Even admin user can not expose normal user's function webhook_db = db_api.get_webhook(id, insecure=False) pre_function_id = webhook_db.function_id pre_version = webhook_db.function_version new_function_id = values.get("function_id", pre_function_id) new_version = values.get("function_version", pre_version) db_api.get_function(new_function_id, insecure=False) if new_version > 0: db_api.get_function_version(new_function_id, new_version) webhook = db_api.update_webhook(id, values).to_dict() return resources.Webhook.from_dict(self._add_webhook_url(id, webhook))
def invoke(self, id, **kwargs): with db_api.transaction(): # The webhook url can be accessed without authentication, so # insecure is used here webhook_db = db_api.get_webhook(id, insecure=True) function_db = webhook_db.function trust_id = function_db.trust_id project_id = function_db.project_id version = webhook_db.function_version LOG.info('Invoking function %s(version %s) by webhook %s', webhook_db.function_id, version, id) # Setup user context ctx = keystone_utils.create_trust_context(trust_id, project_id) context.set_ctx(ctx) params = { 'function_id': webhook_db.function_id, 'function_version': version, 'sync': False, 'input': json.dumps(kwargs), 'description': constants.EXECUTION_BY_WEBHOOK % id } execution = executions.create_execution(self.engine_client, params) pecan.response.status = 202 return {'execution_id': execution.id}
def put(self, id, webhook): acl.enforce('webhook:update', context.get_ctx()) values = {} for key in UPDATE_ALLOWED: if webhook.to_dict().get(key) is not None: values.update({key: webhook.to_dict()[key]}) LOG.info('Update %s %s, params: %s', self.type, id, values) # Even admin user can not expose normal user's function webhook_db = db_api.get_webhook(id, insecure=False) pre_alias = webhook_db.function_alias pre_function_id = webhook_db.function_id pre_version = webhook_db.function_version new_alias = values.get("function_alias") new_function_id = values.get("function_id", pre_function_id) new_version = values.get("function_version", pre_version) function_id = pre_function_id version = pre_version if new_alias and new_alias != pre_alias: alias_db = db_api.get_function_alias(new_alias) function_id = alias_db.function_id version = alias_db.function_version # If function_alias is provided, we don't store either functin id # or function version. values.update({'function_id': None, 'function_version': None}) elif new_function_id != pre_function_id or new_version != pre_version: function_id = new_function_id version = new_version values.update({"function_alias": None}) db_api.get_function(function_id, insecure=False) if version and version > 0: db_api.get_function_version(function_id, version) webhook = db_api.update_webhook(id, values).to_dict() return resources.Webhook.from_dict(self._add_webhook_url(id, webhook))
def get(self, id): LOG.info("Get %s %s.", self.type, id) webhook = db_api.get_webhook(id).to_dict() return resources.Webhook.from_dict(self._add_webhook_url(id, webhook))