Mercurial > prosody-hg
comparison plugins/mod_pubsub.lua @ 3911:a99a2bb7a6ec
mod_pubsub: Update for latest util.pubsub and fix some bugs. New config options autocreate_on_publish, autocreate_on_subscribe and default_admin_affiliation.
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Tue, 21 Dec 2010 03:27:22 +0000 |
| parents | 4d8081c35f01 |
| children | dfc9789f9016 |
comparison
equal
deleted
inserted
replaced
| 3910:80fe910f912a | 3911:a99a2bb7a6ec |
|---|---|
| 42 | 42 |
| 43 function handlers.get_items(origin, stanza, items) | 43 function handlers.get_items(origin, stanza, items) |
| 44 local node = items.attr.node; | 44 local node = items.attr.node; |
| 45 local item = items:get_child("item"); | 45 local item = items:get_child("item"); |
| 46 local id = item and item.attr.id; | 46 local id = item and item.attr.id; |
| 47 | |
| 48 local ok, results = service:get_items(node, stanza.attr.from, id); | |
| 49 if not ok then | |
| 50 return origin.send(pubsub_error_reply(stanza, results)); | |
| 51 end | |
| 52 | |
| 47 local data = st.stanza("items", { node = node }); | 53 local data = st.stanza("items", { node = node }); |
| 48 for _, entry in pairs(service:get(node, stanza.attr.from, id)) do | 54 for _, entry in pairs(results) do |
| 49 data:add_child(entry); | 55 data:add_child(entry); |
| 50 end | 56 end |
| 51 if data then | 57 if data then |
| 52 reply = st.reply(stanza) | 58 reply = st.reply(stanza) |
| 53 :tag("pubsub", { xmlns = xmlns_pubsub }) | 59 :tag("pubsub", { xmlns = xmlns_pubsub }) |
| 70 end | 76 end |
| 71 else | 77 else |
| 72 repeat | 78 repeat |
| 73 node = uuid_generate(); | 79 node = uuid_generate(); |
| 74 ok, ret = service:create(node, stanza.attr.from); | 80 ok, ret = service:create(node, stanza.attr.from); |
| 75 until ok; | 81 until ok or ret ~= "conflict"; |
| 76 reply = st.reply(stanza) | 82 if ok then |
| 77 :tag("pubsub", { xmlns = xmlns_pubsub }) | 83 reply = st.reply(stanza) |
| 78 :tag("create", { node = node }); | 84 :tag("pubsub", { xmlns = xmlns_pubsub }) |
| 85 :tag("create", { node = node }); | |
| 86 else | |
| 87 reply = pubsub_error_reply(stanza, ret); | |
| 88 end | |
| 79 end | 89 end |
| 80 return origin.send(reply); | 90 return origin.send(reply); |
| 81 end | 91 end |
| 82 | 92 |
| 83 function handlers.set_subscribe(origin, stanza, subscribe) | 93 function handlers.set_subscribe(origin, stanza, subscribe) |
| 189 event.origin.send(reply); | 199 event.origin.send(reply); |
| 190 end | 200 end |
| 191 return true; | 201 return true; |
| 192 end); | 202 end); |
| 193 | 203 |
| 204 local admin_aff = module:get_option_string("default_admin_affiliation", "owner"); | |
| 205 local function get_affiliation(jid) | |
| 206 if usermanager.is_admin(jid, module.host) then | |
| 207 return admin_aff; | |
| 208 end | |
| 209 end | |
| 210 | |
| 194 service = pubsub.new({ | 211 service = pubsub.new({ |
| 195 broadcaster = simple_broadcast | 212 capabilities = { |
| 213 none = { | |
| 214 create = false; | |
| 215 publish = false; | |
| 216 retract = false; | |
| 217 get_nodes = true; | |
| 218 | |
| 219 subscribe = true; | |
| 220 unsubscribe = true; | |
| 221 get_subscription = true; | |
| 222 --get_items = true; | |
| 223 | |
| 224 subscribe_other = false; | |
| 225 unsubscribe_other = false; | |
| 226 get_subscription_other = false; | |
| 227 | |
| 228 be_subscribed = true; | |
| 229 be_unsubscribed = true; | |
| 230 | |
| 231 set_affiliation = false; | |
| 232 }; | |
| 233 owner = { | |
| 234 create = true; | |
| 235 publish = true; | |
| 236 retract = true; | |
| 237 get_nodes = true; | |
| 238 | |
| 239 subscribe = true; | |
| 240 unsubscribe = true; | |
| 241 get_subscription = true; | |
| 242 --get_items = true; | |
| 243 | |
| 244 | |
| 245 subscribe_other = true; | |
| 246 unsubscribe_other = true; | |
| 247 get_subscription_other = true; | |
| 248 | |
| 249 be_subscribed = true; | |
| 250 be_unsubscribed = true; | |
| 251 | |
| 252 set_affiliation = true; | |
| 253 }; | |
| 254 admin = { get_items = true }; | |
| 255 }; | |
| 256 | |
| 257 autocreate_on_publish = module:get_option_boolean("autocreate_on_publish"); | |
| 258 autocreate_on_subscribe = module:get_option_boolean("autocreate_on_subscribe"); | |
| 259 | |
| 260 broadcaster = simple_broadcast; | |
| 261 get_affiliation = get_affiliation; | |
| 262 jids_equal = function (jid1, jid2) | |
| 263 return jid_bare(jid1) == jid_bare(jid2); | |
| 264 end; | |
| 196 }); | 265 }); |
| 197 module.environment.service = service; | 266 module.environment.service = service; |
| 198 | 267 |
| 199 function module.save() | 268 function module.save() |
| 200 return { service = service }; | 269 return { service = service }; |
