Mercurial > prosody-hg
comparison plugins/mod_pubsub.lua @ 5305:391b72fede9f
mod_pubsub, util.pubsub: Implement the purge action
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Thu, 24 Jan 2013 00:58:03 +0100 |
| parents | 67a49d47ef39 |
| children | fd3219d64414 |
comparison
equal
deleted
inserted
replaced
| 5304:67a49d47ef39 | 5305:391b72fede9f |
|---|---|
| 176 function handlers.set_retract(origin, stanza, retract) | 176 function handlers.set_retract(origin, stanza, retract) |
| 177 local node, notify = retract.attr.node, retract.attr.notify; | 177 local node, notify = retract.attr.node, retract.attr.notify; |
| 178 notify = (notify == "1") or (notify == "true"); | 178 notify = (notify == "1") or (notify == "true"); |
| 179 local item = retract:get_child("item"); | 179 local item = retract:get_child("item"); |
| 180 local id = item and item.attr.id | 180 local id = item and item.attr.id |
| 181 if not (node and id) then | |
| 182 origin.send(st.error_reply(stanza, "modify", "bad-request")); | |
| 183 return true; | |
| 184 end | |
| 181 local reply, notifier; | 185 local reply, notifier; |
| 182 if notify then | 186 if notify then |
| 183 notifier = st.stanza("retract", { id = id }); | 187 notifier = st.stanza("retract", { id = id }); |
| 184 end | 188 end |
| 185 local ok, ret = service:retract(node, stanza.attr.from, id, notifier); | 189 local ok, ret = service:retract(node, stanza.attr.from, id, notifier); |
| 190 if ok then | |
| 191 reply = st.reply(stanza); | |
| 192 else | |
| 193 reply = pubsub_error_reply(stanza, ret); | |
| 194 end | |
| 195 return origin.send(reply); | |
| 196 end | |
| 197 | |
| 198 function handlers.set_purge(origin, stanza, purge) | |
| 199 local node, notify = purge.attr.node, purge.attr.notify; | |
| 200 notify = (notify == "1") or (notify == "true"); | |
| 201 local reply, notifier; | |
| 202 if not node then | |
| 203 origin.send(st.error_reply(stanza, "modify", "bad-request")); | |
| 204 return true; | |
| 205 end | |
| 206 if notify then | |
| 207 notifier = st.stanza("purge"); | |
| 208 end | |
| 209 local ok, ret = service:purge(node, stanza.attr.from, notifier); | |
| 186 if ok then | 210 if ok then |
| 187 reply = st.reply(stanza); | 211 reply = st.reply(stanza); |
| 188 else | 212 else |
| 189 reply = pubsub_error_reply(stanza, ret); | 213 reply = pubsub_error_reply(stanza, ret); |
| 190 end | 214 end |
| 210 local disco_info; | 234 local disco_info; |
| 211 | 235 |
| 212 local feature_map = { | 236 local feature_map = { |
| 213 create = { "create-nodes", "instant-nodes", "item-ids" }; | 237 create = { "create-nodes", "instant-nodes", "item-ids" }; |
| 214 retract = { "delete-items", "retract-items" }; | 238 retract = { "delete-items", "retract-items" }; |
| 239 purge = { "purge-nodes" }; | |
| 215 publish = { "publish", autocreate_on_publish and "auto-create" }; | 240 publish = { "publish", autocreate_on_publish and "auto-create" }; |
| 216 get_items = { "retrieve-items" }; | 241 get_items = { "retrieve-items" }; |
| 217 add_subscription = { "subscribe" }; | 242 add_subscription = { "subscribe" }; |
| 218 get_subscriptions = { "retrieve-subscriptions" }; | 243 get_subscriptions = { "retrieve-subscriptions" }; |
| 219 }; | 244 }; |
