Mercurial > prosody-hg
comparison plugins/mod_pep_plus.lua @ 8341:910d3c3f60a6
mod_pep_plus: Use feature detection from pubsub.lib
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Wed, 18 Oct 2017 09:43:43 +0200 |
| parents | 4fce6bc0719f |
| children | 0c0990a575de |
comparison
equal
deleted
inserted
replaced
| 8340:7c1fb8c042dc | 8341:910d3c3f60a6 |
|---|---|
| 5 local set_new = require "util.set".new; | 5 local set_new = require "util.set".new; |
| 6 local st = require "util.stanza"; | 6 local st = require "util.stanza"; |
| 7 local calculate_hash = require "util.caps".calculate_hash; | 7 local calculate_hash = require "util.caps".calculate_hash; |
| 8 local is_contact_subscribed = require "core.rostermanager".is_contact_subscribed; | 8 local is_contact_subscribed = require "core.rostermanager".is_contact_subscribed; |
| 9 local cache = require "util.cache"; | 9 local cache = require "util.cache"; |
| 10 local set = require "util.set"; | |
| 10 | 11 |
| 11 local xmlns_pubsub = "http://jabber.org/protocol/pubsub"; | 12 local xmlns_pubsub = "http://jabber.org/protocol/pubsub"; |
| 12 local xmlns_pubsub_event = "http://jabber.org/protocol/pubsub#event"; | 13 local xmlns_pubsub_event = "http://jabber.org/protocol/pubsub#event"; |
| 13 local xmlns_pubsub_owner = "http://jabber.org/protocol/pubsub#owner"; | 14 local xmlns_pubsub_owner = "http://jabber.org/protocol/pubsub#owner"; |
| 14 | 15 |
| 409 | 410 |
| 410 module:hook("account-disco-info", function(event) | 411 module:hook("account-disco-info", function(event) |
| 411 local origin, reply = event.origin, event.reply; | 412 local origin, reply = event.origin, event.reply; |
| 412 | 413 |
| 413 reply:tag('identity', {category='pubsub', type='pep'}):up(); | 414 reply:tag('identity', {category='pubsub', type='pep'}):up(); |
| 414 reply:tag('feature', {var=xmlns_pubsub}):up(); | |
| 415 | 415 |
| 416 local username = jid_split(reply.attr.from) or origin.username; | 416 local username = jid_split(reply.attr.from) or origin.username; |
| 417 local service = get_pep_service(username); | 417 local service = get_pep_service(username); |
| 418 | 418 |
| 419 local feature_map = { | 419 local suppored_features = lib_pubsub.get_feature_set(service) + set.new{ |
| 420 create = { "create-nodes", "instant-nodes", "item-ids" }; | 420 -- Features not covered by the above |
| 421 retract = { "delete-items", "retract-items" }; | |
| 422 purge = { "purge-nodes" }; | |
| 423 publish = { "publish", service.config.autocreate_on_publish and "auto-create" }; | |
| 424 delete = { "delete-nodes" }; | |
| 425 get_items = { "retrieve-items" }; | |
| 426 add_subscription = { "subscribe" }; | |
| 427 get_subscriptions = { "retrieve-subscriptions" }; | |
| 428 set_node_config = { "config-node" }; | |
| 429 node_defaults = { "retrieve-default" }; | |
| 430 }; | |
| 431 | |
| 432 for method, features in pairs(feature_map) do | |
| 433 if service[method] then | |
| 434 for _, feature in ipairs(features) do | |
| 435 if feature then | |
| 436 reply:tag('feature', {var=xmlns_pubsub.."#"..feature}):up(); | |
| 437 end | |
| 438 end | |
| 439 end | |
| 440 end | |
| 441 for affiliation in pairs(service.config.capabilities) do | |
| 442 if affiliation ~= "none" and affiliation ~= "owner" then | |
| 443 reply:tag('feature', {var=xmlns_pubsub.."#"..affiliation.."-affiliation"}):up(); | |
| 444 end | |
| 445 end | |
| 446 | |
| 447 -- Features not covered by the above | |
| 448 local more_features = { | |
| 449 "access-presence", | 421 "access-presence", |
| 450 "auto-subscribe", | 422 "auto-subscribe", |
| 451 "filtered-notifications", | 423 "filtered-notifications", |
| 452 "last-published", | 424 "last-published", |
| 453 "persistent-items", | 425 "persistent-items", |
| 454 "presence-notifications", | 426 "presence-notifications", |
| 455 "presence-subscribe", | 427 "presence-subscribe", |
| 456 }; | 428 }; |
| 457 for _, feature in ipairs(more_features) do | 429 |
| 430 for feature in suppored_features do | |
| 458 reply:tag('feature', {var=xmlns_pubsub.."#"..feature}):up(); | 431 reply:tag('feature', {var=xmlns_pubsub.."#"..feature}):up(); |
| 459 end | 432 end |
| 460 end); | 433 end); |
| 461 | 434 |
| 462 module:hook("account-disco-items-node", function(event) | 435 module:hook("account-disco-items-node", function(event) |
