Software / code / prosody
Comparison
util/pubsub.lua @ 10356:0a2d7efca039
util.pubsub, pubsub.lib and tests: Add text to precondition-not-met error (fixes #1455)
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Sun, 27 Oct 2019 14:45:57 +0000 |
| parent | 9840:ec353524b739 |
| child | 10521:cbb2c3f8bb1d |
comparison
equal
deleted
inserted
replaced
| 10355:cb9755d7a36e | 10356:0a2d7efca039 |
|---|---|
| 1 local events = require "util.events"; | 1 local events = require "util.events"; |
| 2 local cache = require "util.cache"; | 2 local cache = require "util.cache"; |
| 3 local errors = require "util.error"; | |
| 3 | 4 |
| 4 local service_mt = {}; | 5 local service_mt = {}; |
| 5 | 6 |
| 6 local default_config = { | 7 local default_config = { |
| 7 itemstore = function (config, _) return cache.new(config["max_items"]) end; | 8 itemstore = function (config, _) return cache.new(config["max_items"]) end; |
| 508 if not (node_config and required_config) then | 509 if not (node_config and required_config) then |
| 509 return false; | 510 return false; |
| 510 end | 511 end |
| 511 for config_field, value in pairs(required_config) do | 512 for config_field, value in pairs(required_config) do |
| 512 if node_config[config_field] ~= value then | 513 if node_config[config_field] ~= value then |
| 513 return false; | 514 return false, config_field; |
| 514 end | 515 end |
| 515 end | 516 end |
| 516 return true; | 517 return true; |
| 517 end | 518 end |
| 518 | 519 |
| 544 return ok, err; | 545 return ok, err; |
| 545 end | 546 end |
| 546 node_obj = self.nodes[node]; | 547 node_obj = self.nodes[node]; |
| 547 elseif requested_config and not requested_config._defaults_only then | 548 elseif requested_config and not requested_config._defaults_only then |
| 548 -- Check that node has the requested config before we publish | 549 -- Check that node has the requested config before we publish |
| 549 if not check_preconditions(node_obj.config, requested_config) then | 550 local ok, field = check_preconditions(node_obj.config, requested_config); |
| 550 return false, "precondition-not-met"; | 551 if not ok then |
| 552 local err = errors.new({ | |
| 553 type = "cancel", condition = "conflict", text = "Field does not match: "..field; | |
| 554 }); | |
| 555 err.pubsub_condition = "precondition-not-met"; | |
| 556 return false, err; | |
| 551 end | 557 end |
| 552 end | 558 end |
| 553 if not self.config.itemcheck(item) then | 559 if not self.config.itemcheck(item) then |
| 554 return nil, "invalid-item"; | 560 return nil, "invalid-item"; |
| 555 end | 561 end |