diff options
author | Matthew Wild <mwild1@gmail.com> | 2019-10-27 14:45:57 +0000 |
---|---|---|
committer | Matthew Wild <mwild1@gmail.com> | 2019-10-27 14:45:57 +0000 |
commit | b5b9b70c88a1287f034bceccdd953fe805bc78c6 (patch) | |
tree | 756544f4eab48d78f47b52589e3f2fedc88404b8 /util/pubsub.lua | |
parent | 7207a107fd582334d32af3d847ef8e939d136e97 (diff) | |
download | prosody-b5b9b70c88a1287f034bceccdd953fe805bc78c6.tar.gz prosody-b5b9b70c88a1287f034bceccdd953fe805bc78c6.zip |
util.pubsub, pubsub.lib and tests: Add text to precondition-not-met error (fixes #1455)
Diffstat (limited to 'util/pubsub.lua')
-rw-r--r-- | util/pubsub.lua | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/util/pubsub.lua b/util/pubsub.lua index e5e0cb7c..8a07c669 100644 --- a/util/pubsub.lua +++ b/util/pubsub.lua @@ -1,5 +1,6 @@ local events = require "util.events"; local cache = require "util.cache"; +local errors = require "util.error"; local service_mt = {}; @@ -510,7 +511,7 @@ local function check_preconditions(node_config, required_config) end for config_field, value in pairs(required_config) do if node_config[config_field] ~= value then - return false; + return false, config_field; end end return true; @@ -546,8 +547,13 @@ function service:publish(node, actor, id, item, requested_config) --> ok, err node_obj = self.nodes[node]; elseif requested_config and not requested_config._defaults_only then -- Check that node has the requested config before we publish - if not check_preconditions(node_obj.config, requested_config) then - return false, "precondition-not-met"; + local ok, field = check_preconditions(node_obj.config, requested_config); + if not ok then + local err = errors.new({ + type = "cancel", condition = "conflict", text = "Field does not match: "..field; + }); + err.pubsub_condition = "precondition-not-met"; + return false, err; end end if not self.config.itemcheck(item) then |