Software / code / prosody
Comparison
util/pubsub.lua @ 9200:249d90ff992e
pubsub.lib, util.pubsub: Move precondition checks to util.pubsub
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Sat, 18 Aug 2018 14:06:56 +0100 |
| parent | 9195:b6ffd4f951b9 |
| child | 9201:1555ea0d6f61 |
comparison
equal
deleted
inserted
replaced
| 9199:596d0d82a113 | 9200:249d90ff992e |
|---|---|
| 462 self.events.fire_event("node-deleted", { node = node, actor = actor }); | 462 self.events.fire_event("node-deleted", { node = node, actor = actor }); |
| 463 self.config.broadcaster("delete", node, node_obj.subscribers, nil, actor, node_obj, self); | 463 self.config.broadcaster("delete", node, node_obj.subscribers, nil, actor, node_obj, self); |
| 464 return true; | 464 return true; |
| 465 end | 465 end |
| 466 | 466 |
| 467 function service:publish(node, actor, id, item) | 467 -- Used to check that the config of a node is as expected (i.e. 'publish-options') |
| 468 local function check_preconditions(node_config, required_config) | |
| 469 if not (node_config and required_config) then | |
| 470 return false; | |
| 471 end | |
| 472 for config_field, value in pairs(required_config) do | |
| 473 if node_config[config_field] ~= value then | |
| 474 return false; | |
| 475 end | |
| 476 end | |
| 477 return true; | |
| 478 end | |
| 479 | |
| 480 function service:publish(node, actor, id, item, required_config) | |
| 468 -- Access checking | 481 -- Access checking |
| 469 local may_publish = false; | 482 local may_publish = false; |
| 470 | 483 |
| 471 if self:may(node, actor, "publish") then | 484 if self:may(node, actor, "publish") then |
| 472 may_publish = true; | 485 may_publish = true; |
| 485 local node_obj = self.nodes[node]; | 498 local node_obj = self.nodes[node]; |
| 486 if not node_obj then | 499 if not node_obj then |
| 487 if not self.config.autocreate_on_publish then | 500 if not self.config.autocreate_on_publish then |
| 488 return false, "item-not-found"; | 501 return false, "item-not-found"; |
| 489 end | 502 end |
| 490 local ok, err = self:create(node, true); | 503 local ok, err = self:create(node, true, required_config); |
| 491 if not ok then | 504 if not ok then |
| 492 return ok, err; | 505 return ok, err; |
| 493 end | 506 end |
| 494 node_obj = self.nodes[node]; | 507 node_obj = self.nodes[node]; |
| 508 elseif required_config and not check_preconditions(node_obj.config, required_config) then | |
| 509 return false, "precondition-not-met"; | |
| 495 end | 510 end |
| 496 if not self.config.itemcheck(item) then | 511 if not self.config.itemcheck(item) then |
| 497 return nil, "internal-server-error"; | 512 return nil, "internal-server-error"; |
| 498 end | 513 end |
| 499 local node_data = self.data[node]; | 514 local node_data = self.data[node]; |