Mercurial > prosody-hg
comparison util/pubsub.lua @ 9232:65c83bfcf2ee
util.pubsub: Comments describing the return values of methods
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Wed, 22 Aug 2018 13:27:36 +0200 |
| parents | 711fea229e48 |
| children | 885dd6845e62 |
comparison
equal
deleted
inserted
replaced
| 9231:3d12b4f41b23 | 9232:65c83bfcf2ee |
|---|---|
| 170 --- Service methods | 170 --- Service methods |
| 171 | 171 |
| 172 local service = {}; | 172 local service = {}; |
| 173 service_mt.__index = service; | 173 service_mt.__index = service; |
| 174 | 174 |
| 175 function service:jids_equal(jid1, jid2) | 175 function service:jids_equal(jid1, jid2) --> boolean |
| 176 local normalize = self.config.normalize_jid; | 176 local normalize = self.config.normalize_jid; |
| 177 return normalize(jid1) == normalize(jid2); | 177 return normalize(jid1) == normalize(jid2); |
| 178 end | 178 end |
| 179 | 179 |
| 180 function service:may(node, actor, action) | 180 function service:may(node, actor, action) --> boolean |
| 181 if actor == true then return true; end | 181 if actor == true then return true; end |
| 182 | 182 |
| 183 local node_obj = self.nodes[node]; | 183 local node_obj = self.nodes[node]; |
| 184 local node_aff = node_obj and (node_obj.affiliations[actor] | 184 local node_aff = node_obj and (node_obj.affiliations[actor] |
| 185 or node_obj.affiliations[self.config.normalize_jid(actor)]); | 185 or node_obj.affiliations[self.config.normalize_jid(actor)]); |
| 210 end | 210 end |
| 211 | 211 |
| 212 return false; | 212 return false; |
| 213 end | 213 end |
| 214 | 214 |
| 215 function service:get_default_affiliation(node, actor) | 215 function service:get_default_affiliation(node, actor) --> affiliation |
| 216 local node_obj = self.nodes[node]; | 216 local node_obj = self.nodes[node]; |
| 217 local access_model = node_obj and node_obj.config.access_model | 217 local access_model = node_obj and node_obj.config.access_model |
| 218 or self.node_defaults.access_model; | 218 or self.node_defaults.access_model; |
| 219 | 219 |
| 220 if access_model == "open" then | 220 if access_model == "open" then |
| 232 end | 232 end |
| 233 end | 233 end |
| 234 end | 234 end |
| 235 end | 235 end |
| 236 | 236 |
| 237 function service:set_affiliation(node, actor, jid, affiliation) | 237 function service:set_affiliation(node, actor, jid, affiliation) --> ok, err |
| 238 -- Access checking | 238 -- Access checking |
| 239 if not self:may(node, actor, "set_affiliation") then | 239 if not self:may(node, actor, "set_affiliation") then |
| 240 return false, "forbidden"; | 240 return false, "forbidden"; |
| 241 end | 241 end |
| 242 -- | 242 -- |
| 269 end | 269 end |
| 270 end | 270 end |
| 271 return true; | 271 return true; |
| 272 end | 272 end |
| 273 | 273 |
| 274 function service:add_subscription(node, actor, jid, options) | 274 function service:add_subscription(node, actor, jid, options) --> ok, err |
| 275 -- Access checking | 275 -- Access checking |
| 276 local cap; | 276 local cap; |
| 277 if actor == true or jid == actor or self:jids_equal(actor, jid) then | 277 if actor == true or jid == actor or self:jids_equal(actor, jid) then |
| 278 cap = "subscribe"; | 278 cap = "subscribe"; |
| 279 else | 279 else |
| 323 | 323 |
| 324 self.events.fire_event("subscription-added", { service = self, node = node, jid = jid, normalized_jid = normal_jid, options = options }); | 324 self.events.fire_event("subscription-added", { service = self, node = node, jid = jid, normalized_jid = normal_jid, options = options }); |
| 325 return true; | 325 return true; |
| 326 end | 326 end |
| 327 | 327 |
| 328 function service:remove_subscription(node, actor, jid) | 328 function service:remove_subscription(node, actor, jid) --> ok, err |
| 329 -- Access checking | 329 -- Access checking |
| 330 local cap; | 330 local cap; |
| 331 if actor == true or jid == actor or self:jids_equal(actor, jid) then | 331 if actor == true or jid == actor or self:jids_equal(actor, jid) then |
| 332 cap = "unsubscribe"; | 332 cap = "unsubscribe"; |
| 333 else | 333 else |
| 375 | 375 |
| 376 self.events.fire_event("subscription-removed", { service = self, node = node, jid = jid, normalized_jid = normal_jid }); | 376 self.events.fire_event("subscription-removed", { service = self, node = node, jid = jid, normalized_jid = normal_jid }); |
| 377 return true; | 377 return true; |
| 378 end | 378 end |
| 379 | 379 |
| 380 function service:get_subscription(node, actor, jid) | 380 function service:get_subscription(node, actor, jid) --> (true, subscription) or (false, err) |
| 381 -- Access checking | 381 -- Access checking |
| 382 local cap; | 382 local cap; |
| 383 if actor == true or jid == actor or self:jids_equal(actor, jid) then | 383 if actor == true or jid == actor or self:jids_equal(actor, jid) then |
| 384 cap = "get_subscription"; | 384 cap = "get_subscription"; |
| 385 else | 385 else |
| 394 return false, "item-not-found"; | 394 return false, "item-not-found"; |
| 395 end | 395 end |
| 396 return true, node_obj.subscribers[jid]; | 396 return true, node_obj.subscribers[jid]; |
| 397 end | 397 end |
| 398 | 398 |
| 399 function service:create(node, actor, options) | 399 function service:create(node, actor, options) --> ok, err |
| 400 -- Access checking | 400 -- Access checking |
| 401 if not self:may(node, actor, "create") then | 401 if not self:may(node, actor, "create") then |
| 402 return false, "forbidden"; | 402 return false, "forbidden"; |
| 403 end | 403 end |
| 404 -- | 404 -- |
| 433 end | 433 end |
| 434 | 434 |
| 435 return true; | 435 return true; |
| 436 end | 436 end |
| 437 | 437 |
| 438 function service:delete(node, actor) | 438 function service:delete(node, actor) --> ok, err |
| 439 -- Access checking | 439 -- Access checking |
| 440 if not self:may(node, actor, "delete") then | 440 if not self:may(node, actor, "delete") then |
| 441 return false, "forbidden"; | 441 return false, "forbidden"; |
| 442 end | 442 end |
| 443 -- | 443 -- |
| 475 end | 475 end |
| 476 end | 476 end |
| 477 return true; | 477 return true; |
| 478 end | 478 end |
| 479 | 479 |
| 480 function service:publish(node, actor, id, item, required_config) | 480 function service:publish(node, actor, id, item, required_config) --> ok, err |
| 481 -- Access checking | 481 -- Access checking |
| 482 local may_publish = false; | 482 local may_publish = false; |
| 483 | 483 |
| 484 if self:may(node, actor, "publish") then | 484 if self:may(node, actor, "publish") then |
| 485 may_publish = true; | 485 may_publish = true; |
| 522 self.events.fire_event("item-published", event_data); | 522 self.events.fire_event("item-published", event_data); |
| 523 self.config.broadcaster("items", node, node_obj.subscribers, item, actor, node_obj, self); | 523 self.config.broadcaster("items", node, node_obj.subscribers, item, actor, node_obj, self); |
| 524 return true; | 524 return true; |
| 525 end | 525 end |
| 526 | 526 |
| 527 function service:retract(node, actor, id, retract) | 527 function service:retract(node, actor, id, retract) --> ok, err |
| 528 -- Access checking | 528 -- Access checking |
| 529 if not self:may(node, actor, "retract") then | 529 if not self:may(node, actor, "retract") then |
| 530 return false, "forbidden"; | 530 return false, "forbidden"; |
| 531 end | 531 end |
| 532 -- | 532 -- |
| 543 self.config.broadcaster("retract", node, node_obj.subscribers, retract, actor, node_obj, self); | 543 self.config.broadcaster("retract", node, node_obj.subscribers, retract, actor, node_obj, self); |
| 544 end | 544 end |
| 545 return true | 545 return true |
| 546 end | 546 end |
| 547 | 547 |
| 548 function service:purge(node, actor, notify) | 548 function service:purge(node, actor, notify) --> ok, err |
| 549 -- Access checking | 549 -- Access checking |
| 550 if not self:may(node, actor, "retract") then | 550 if not self:may(node, actor, "retract") then |
| 551 return false, "forbidden"; | 551 return false, "forbidden"; |
| 552 end | 552 end |
| 553 -- | 553 -- |
| 565 self.config.broadcaster("purge", node, node_obj.subscribers, nil, actor, node_obj, self); | 565 self.config.broadcaster("purge", node, node_obj.subscribers, nil, actor, node_obj, self); |
| 566 end | 566 end |
| 567 return true | 567 return true |
| 568 end | 568 end |
| 569 | 569 |
| 570 function service:get_items(node, actor, id) | 570 function service:get_items(node, actor, id) --> ok, err |
| 571 -- Access checking | 571 -- Access checking |
| 572 if not self:may(node, actor, "get_items") then | 572 if not self:may(node, actor, "get_items") then |
| 573 return false, "forbidden"; | 573 return false, "forbidden"; |
| 574 end | 574 end |
| 575 -- | 575 -- |
| 591 end | 591 end |
| 592 return true, data; | 592 return true, data; |
| 593 end | 593 end |
| 594 end | 594 end |
| 595 | 595 |
| 596 function service:get_last_item(node, actor) | 596 function service:get_last_item(node, actor) --> (true, id, node) or (false, err) |
| 597 -- Access checking | 597 -- Access checking |
| 598 if not self:may(node, actor, "get_items") then | 598 if not self:may(node, actor, "get_items") then |
| 599 return false, "forbidden"; | 599 return false, "forbidden"; |
| 600 end | 600 end |
| 601 -- | 601 -- |
| 607 | 607 |
| 608 -- Returns success, id, item | 608 -- Returns success, id, item |
| 609 return true, self.data[node]:head(); | 609 return true, self.data[node]:head(); |
| 610 end | 610 end |
| 611 | 611 |
| 612 function service:get_nodes(actor) | 612 function service:get_nodes(actor) --> (true, map) or (false, err) |
| 613 -- Access checking | 613 -- Access checking |
| 614 if not self:may(nil, actor, "get_nodes") then | 614 if not self:may(nil, actor, "get_nodes") then |
| 615 return false, "forbidden"; | 615 return false, "forbidden"; |
| 616 end | 616 end |
| 617 -- | 617 -- |
| 639 end | 639 end |
| 640 end | 640 end |
| 641 end | 641 end |
| 642 end | 642 end |
| 643 | 643 |
| 644 function service:get_subscriptions(node, actor, jid) | 644 function service:get_subscriptions(node, actor, jid) --> (true, array) or (false, err) |
| 645 -- Access checking | 645 -- Access checking |
| 646 local cap; | 646 local cap; |
| 647 if actor == true or jid == actor or self:jids_equal(actor, jid) then | 647 if actor == true or jid == actor or self:jids_equal(actor, jid) then |
| 648 cap = "get_subscriptions"; | 648 cap = "get_subscriptions"; |
| 649 else | 649 else |
| 676 end | 676 end |
| 677 return true, ret; | 677 return true, ret; |
| 678 end | 678 end |
| 679 | 679 |
| 680 -- Access models only affect 'none' affiliation caps, service/default access level... | 680 -- Access models only affect 'none' affiliation caps, service/default access level... |
| 681 function service:set_node_capabilities(node, actor, capabilities) | 681 function service:set_node_capabilities(node, actor, capabilities) --> ok, err |
| 682 -- Access checking | 682 -- Access checking |
| 683 if not self:may(node, actor, "configure") then | 683 if not self:may(node, actor, "configure") then |
| 684 return false, "forbidden"; | 684 return false, "forbidden"; |
| 685 end | 685 end |
| 686 -- | 686 -- |
| 690 end | 690 end |
| 691 node_obj.capabilities = capabilities; | 691 node_obj.capabilities = capabilities; |
| 692 return true; | 692 return true; |
| 693 end | 693 end |
| 694 | 694 |
| 695 function service:set_node_config(node, actor, new_config) | 695 function service:set_node_config(node, actor, new_config) --> ok, err |
| 696 if not self:may(node, actor, "configure") then | 696 if not self:may(node, actor, "configure") then |
| 697 return false, "forbidden"; | 697 return false, "forbidden"; |
| 698 end | 698 end |
| 699 | 699 |
| 700 local node_obj = self.nodes[node]; | 700 local node_obj = self.nodes[node]; |
| 741 end | 741 end |
| 742 | 742 |
| 743 return true; | 743 return true; |
| 744 end | 744 end |
| 745 | 745 |
| 746 function service:get_node_config(node, actor) | 746 function service:get_node_config(node, actor) --> ok, err |
| 747 if not self:may(node, actor, "get_configuration") then | 747 if not self:may(node, actor, "get_configuration") then |
| 748 return false, "forbidden"; | 748 return false, "forbidden"; |
| 749 end | 749 end |
| 750 | 750 |
| 751 local node_obj = self.nodes[node]; | 751 local node_obj = self.nodes[node]; |
