Mercurial > prosody-hg
comparison plugins/mod_pubsub/pubsub.lib.lua @ 9041:b3bc742ee188
mod_pubsub: Add support for changing subscription options
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Sat, 14 Jul 2018 20:18:49 +0200 |
| parents | e993fad0cc62 |
| children | 9603a6a1ec85 |
comparison
equal
deleted
inserted
replaced
| 9040:e993fad0cc62 | 9041:b3bc742ee188 |
|---|---|
| 22 ["invalid-jid"] = { "modify", "bad-request", nil, "invalid-jid" }; | 22 ["invalid-jid"] = { "modify", "bad-request", nil, "invalid-jid" }; |
| 23 ["jid-required"] = { "modify", "bad-request", nil, "jid-required" }; | 23 ["jid-required"] = { "modify", "bad-request", nil, "jid-required" }; |
| 24 ["nodeid-required"] = { "modify", "bad-request", nil, "nodeid-required" }; | 24 ["nodeid-required"] = { "modify", "bad-request", nil, "nodeid-required" }; |
| 25 ["item-not-found"] = { "cancel", "item-not-found" }; | 25 ["item-not-found"] = { "cancel", "item-not-found" }; |
| 26 ["not-subscribed"] = { "modify", "unexpected-request", nil, "not-subscribed" }; | 26 ["not-subscribed"] = { "modify", "unexpected-request", nil, "not-subscribed" }; |
| 27 ["invalid-options"] = { "modify", "bad-request", nil, "invalid-options" }; | |
| 27 ["forbidden"] = { "auth", "forbidden" }; | 28 ["forbidden"] = { "auth", "forbidden" }; |
| 28 ["not-allowed"] = { "cancel", "not-allowed" }; | 29 ["not-allowed"] = { "cancel", "not-allowed" }; |
| 29 ["internal-server-error"] = { "wait", "internal-server-error" }; | 30 ["internal-server-error"] = { "wait", "internal-server-error" }; |
| 30 }; | 31 }; |
| 31 local function pubsub_error_reply(stanza, error) | 32 local function pubsub_error_reply(stanza, error) |
| 451 :tag("options", { node = node, jid = jid }) | 452 :tag("options", { node = node, jid = jid }) |
| 452 :add_child(options_form:form(ret))); | 453 :add_child(options_form:form(ret))); |
| 453 return true; | 454 return true; |
| 454 end | 455 end |
| 455 | 456 |
| 457 function handlers.set_options(origin, stanza, options, service) | |
| 458 local node, jid = options.attr.node, options.attr.jid; | |
| 459 jid = jid_prep(jid); | |
| 460 if not (node and jid) then | |
| 461 origin.send(pubsub_error_reply(stanza, jid and "nodeid-required" or "invalid-jid")); | |
| 462 return true; | |
| 463 end | |
| 464 local ok, ret = service:get_subscription(node, stanza.attr.from, jid); | |
| 465 if not ok then | |
| 466 origin.send(pubsub_error_reply(stanza, ret)); | |
| 467 return true; | |
| 468 elseif not ret then | |
| 469 origin.send(pubsub_error_reply(stanza, "not-subscribed")); | |
| 470 return true; | |
| 471 end | |
| 472 local new_subopts, err = options_form:data(options.tags[1]); | |
| 473 if not new_subopts then | |
| 474 origin.send(pubsub_error_reply(stanza, ret)); | |
| 475 return true; | |
| 476 end | |
| 477 local ok, err = service:add_subscription(node, stanza.attr.from, jid, new_subopts); | |
| 478 if not ok then | |
| 479 origin.send(pubsub_error_reply(stanza, err)); | |
| 480 return true; | |
| 481 end | |
| 482 origin.send(st.reply(stanza)); | |
| 483 return true; | |
| 484 end | |
| 485 | |
| 456 function handlers.set_publish(origin, stanza, publish, service) | 486 function handlers.set_publish(origin, stanza, publish, service) |
| 457 local node = publish.attr.node; | 487 local node = publish.attr.node; |
| 458 if not node then | 488 if not node then |
| 459 origin.send(pubsub_error_reply(stanza, "nodeid-required")); | 489 origin.send(pubsub_error_reply(stanza, "nodeid-required")); |
| 460 return true; | 490 return true; |
