Mercurial > prosody-hg
comparison plugins/mod_pep.lua @ 9542:b8bfcfbe5126
mod_pep: Add automatic subscriptions on node creation (fixes #1222)
Replaces automatic node creation on subscription, since this casues
problems when trying to keep nodes private or other specific settings.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Sat, 20 Oct 2018 20:22:55 +0200 |
| parents | 742977123168 |
| children | 17d43543f9b6 |
comparison
equal
deleted
inserted
replaced
| 9541:742977123168 | 9542:b8bfcfbe5126 |
|---|---|
| 156 end | 156 end |
| 157 end | 157 end |
| 158 return simple_broadcast; | 158 return simple_broadcast; |
| 159 end | 159 end |
| 160 | 160 |
| 161 local function on_node_creation(event) | |
| 162 local service = event.service; | |
| 163 local node = event.node; | |
| 164 local username = service.config.pep_username; | |
| 165 | |
| 166 local service_recipients = recipients[username]; | |
| 167 if not service_recipients then return; end | |
| 168 | |
| 169 for recipient, nodes in pairs(service_recipients) do | |
| 170 if nodes:contains(node) then | |
| 171 service:add_subscription(node, recipient, recipient, { presence = true }); | |
| 172 end | |
| 173 end | |
| 174 end | |
| 175 | |
| 161 function get_pep_service(username) | 176 function get_pep_service(username) |
| 162 module:log("debug", "get_pep_service(%q)", username); | 177 module:log("debug", "get_pep_service(%q)", username); |
| 163 local user_bare = jid_join(username, host); | 178 local user_bare = jid_join(username, host); |
| 164 local service = services[username]; | 179 local service = services[username]; |
| 165 if service then | 180 if service then |
| 172 ["persist_items"] = true; | 187 ["persist_items"] = true; |
| 173 ["access_model"] = "presence"; | 188 ["access_model"] = "presence"; |
| 174 }; | 189 }; |
| 175 | 190 |
| 176 autocreate_on_publish = true; | 191 autocreate_on_publish = true; |
| 177 autocreate_on_subscribe = true; | 192 autocreate_on_subscribe = false; |
| 178 | 193 |
| 179 nodestore = nodestore(username); | 194 nodestore = nodestore(username); |
| 180 itemstore = simple_itemstore(username); | 195 itemstore = simple_itemstore(username); |
| 181 broadcaster = get_broadcaster(username); | 196 broadcaster = get_broadcaster(username); |
| 182 itemcheck = is_item_stanza; | 197 itemcheck = is_item_stanza; |
| 213 end | 228 end |
| 214 services[username] = service; | 229 services[username] = service; |
| 215 module:add_item("pep-service", { service = service, jid = user_bare }); | 230 module:add_item("pep-service", { service = service, jid = user_bare }); |
| 216 return service; | 231 return service; |
| 217 end | 232 end |
| 233 | |
| 234 module:hook("item-added/pep-service", function (event) | |
| 235 local service = event.item.service; | |
| 236 module:hook_object_event(service.events, "node-created", on_node_creation); | |
| 237 end); | |
| 218 | 238 |
| 219 function handle_pubsub_iq(event) | 239 function handle_pubsub_iq(event) |
| 220 local origin, stanza = event.origin, event.stanza; | 240 local origin, stanza = event.origin, event.stanza; |
| 221 local service_name = origin.username; | 241 local service_name = origin.username; |
| 222 if stanza.attr.to ~= nil then | 242 if stanza.attr.to ~= nil then |
