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;