Mercurial > prosody-hg
comparison util/pubsub.lua @ 11200:bf8f2da84007
Merge 0.11->trunk
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Thu, 05 Nov 2020 22:31:25 +0100 |
| parents | c5558138ce33 |
| children | c471e19a238e |
comparison
equal
deleted
inserted
replaced
| 11199:6c7c50a4de32 | 11200:bf8f2da84007 |
|---|---|
| 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; |
| 278 jid = self.config.normalize_jid(jid); | 279 jid = self.config.normalize_jid(jid); |
| 279 local old_affiliation = node_obj.affiliations[jid]; | 280 local old_affiliation = node_obj.affiliations[jid]; |
| 280 node_obj.affiliations[jid] = affiliation; | 281 node_obj.affiliations[jid] = affiliation; |
| 281 | 282 |
| 282 if self.config.nodestore then | 283 if self.config.nodestore then |
| 283 local ok, err = save_node_to_store(self, node_obj); | 284 -- TODO pass the error from storage to caller eg wrapped in an util.error |
| 285 local ok, err = save_node_to_store(self, node_obj); -- luacheck: ignore 211/err | |
| 284 if not ok then | 286 if not ok then |
| 285 node_obj.affiliations[jid] = old_affiliation; | 287 node_obj.affiliations[jid] = old_affiliation; |
| 286 return ok, "internal-server-error"; | 288 return ok, "internal-server-error"; |
| 287 end | 289 end |
| 288 end | 290 end |
| 342 else | 344 else |
| 343 self.subscriptions[normal_jid] = { [jid] = { [node] = true } }; | 345 self.subscriptions[normal_jid] = { [jid] = { [node] = true } }; |
| 344 end | 346 end |
| 345 | 347 |
| 346 if self.config.nodestore then | 348 if self.config.nodestore then |
| 347 local ok, err = save_node_to_store(self, node_obj); | 349 -- TODO pass the error from storage to caller eg wrapped in an util.error |
| 350 local ok, err = save_node_to_store(self, node_obj); -- luacheck: ignore 211/err | |
| 348 if not ok then | 351 if not ok then |
| 349 node_obj.subscribers[jid] = old_subscription; | 352 node_obj.subscribers[jid] = old_subscription; |
| 350 self.subscriptions[normal_jid][jid][node] = old_subscription and true or nil; | 353 self.subscriptions[normal_jid][jid][node] = old_subscription and true or nil; |
| 351 return ok, "internal-server-error"; | 354 return ok, "internal-server-error"; |
| 352 end | 355 end |
| 394 self.subscriptions[normal_jid] = nil; | 397 self.subscriptions[normal_jid] = nil; |
| 395 end | 398 end |
| 396 end | 399 end |
| 397 | 400 |
| 398 if self.config.nodestore then | 401 if self.config.nodestore then |
| 399 local ok, err = save_node_to_store(self, node_obj); | 402 -- TODO pass the error from storage to caller eg wrapped in an util.error |
| 403 local ok, err = save_node_to_store(self, node_obj); -- luacheck: ignore 211/err | |
| 400 if not ok then | 404 if not ok then |
| 401 node_obj.subscribers[jid] = old_subscription; | 405 node_obj.subscribers[jid] = old_subscription; |
| 402 self.subscriptions[normal_jid][jid][node] = old_subscription and true or nil; | 406 self.subscriptions[normal_jid][jid][node] = old_subscription and true or nil; |
| 403 return ok, "internal-server-error"; | 407 return ok, "internal-server-error"; |
| 404 end | 408 end |
| 452 config = config; | 456 config = config; |
| 453 affiliations = {}; | 457 affiliations = {}; |
| 454 }; | 458 }; |
| 455 | 459 |
| 456 if self.config.nodestore then | 460 if self.config.nodestore then |
| 457 local ok, err = save_node_to_store(self, self.nodes[node]); | 461 -- TODO pass the error from storage to caller eg wrapped in an util.error |
| 462 local ok, err = save_node_to_store(self, self.nodes[node]); -- luacheck: ignore 211/err | |
| 458 if not ok then | 463 if not ok then |
| 459 self.nodes[node] = nil; | 464 self.nodes[node] = nil; |
| 460 return ok, "internal-server-error"; | 465 return ok, "internal-server-error"; |
| 461 end | 466 end |
| 462 end | 467 end |
| 509 if not (node_config and required_config) then | 514 if not (node_config and required_config) then |
| 510 return false; | 515 return false; |
| 511 end | 516 end |
| 512 for config_field, value in pairs(required_config) do | 517 for config_field, value in pairs(required_config) do |
| 513 if node_config[config_field] ~= value then | 518 if node_config[config_field] ~= value then |
| 514 return false; | 519 return false, config_field; |
| 515 end | 520 end |
| 516 end | 521 end |
| 517 return true; | 522 return true; |
| 518 end | 523 end |
| 519 | 524 |
| 545 return ok, err; | 550 return ok, err; |
| 546 end | 551 end |
| 547 node_obj = self.nodes[node]; | 552 node_obj = self.nodes[node]; |
| 548 elseif requested_config and not requested_config._defaults_only then | 553 elseif requested_config and not requested_config._defaults_only then |
| 549 -- Check that node has the requested config before we publish | 554 -- Check that node has the requested config before we publish |
| 550 if not check_preconditions(node_obj.config, requested_config) then | 555 local ok, field = check_preconditions(node_obj.config, requested_config); |
| 551 return false, "precondition-not-met"; | 556 if not ok then |
| 557 local err = errors.new({ | |
| 558 type = "cancel", condition = "conflict", text = "Field does not match: "..field; | |
| 559 }); | |
| 560 err.pubsub_condition = "precondition-not-met"; | |
| 561 return false, err; | |
| 552 end | 562 end |
| 553 end | 563 end |
| 554 if not self.config.itemcheck(item) then | 564 if not self.config.itemcheck(item) then |
| 555 return nil, "invalid-item"; | 565 return nil, "invalid-item"; |
| 556 end | 566 end |
| 766 | 776 |
| 767 local old_config = node_obj.config; | 777 local old_config = node_obj.config; |
| 768 node_obj.config = new_config; | 778 node_obj.config = new_config; |
| 769 | 779 |
| 770 if self.config.nodestore then | 780 if self.config.nodestore then |
| 771 local ok, err = save_node_to_store(self, node_obj); | 781 -- TODO pass the error from storage to caller eg wrapped in an util.error |
| 782 local ok, err = save_node_to_store(self, node_obj); -- luacheck: ignore 211/err | |
| 772 if not ok then | 783 if not ok then |
| 773 node_obj.config = old_config; | 784 node_obj.config = old_config; |
| 774 return ok, "internal-server-error"; | 785 return ok, "internal-server-error"; |
| 775 end | 786 end |
| 776 end | 787 end |
