Software /
code /
prosody
Diff
plugins/mod_pep.lua @ 1136:506012db54e8
mod_pep: Initial commit (extremely basic implementation)
author | Waqas Hussain <waqas20@gmail.com> |
---|---|
date | Fri, 08 May 2009 01:07:35 +0500 |
child | 1323:e1bfe7816761 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/plugins/mod_pep.lua Fri May 08 01:07:35 2009 +0500 @@ -0,0 +1,48 @@ + +local jid_bare = require "util.jid".bare; +local jid_split = require "util.jid".split; +local st = require "util.stanza"; +local hosts = hosts; +local user_exists = require "core.usermanager".user_exists; +local is_contact_subscribed = require "core.rostermanager".is_contact_subscribed; +local pairs, ipairs = pairs, ipairs; + +local function publish(session, node, item) + local stanza = st.message({from=session.full_jid, type='headline'}) + :tag('event', {xmlns='http://jabber.org/protocol/pubsub#event'}) + :tag('items', {node=node}) + :add_child(item) + :up() + :up(); + + -- broadcast to resources + stanza.attr.to = session.username..'@'..session.host; + core_route_stanza(session, stanza); + + -- broadcast to contacts + for jid, item in pairs(session.roster) do + if jid and jid ~= "pending" and (item.subscription == 'from' or item.subscription == 'both') then + stanza.attr.to = jid; + core_route_stanza(session, stanza); + end + end +end + +module:add_iq_handler("c2s", "http://jabber.org/protocol/pubsub", function (session, stanza) + if stanza.attr.type == 'set' and (not stanza.attr.to or jid_bare(stanza.attr.from) == stanza.attr.to) then + local payload = stanza.tags[1]; + if payload.name == 'pubsub' then + payload = payload.tags[1]; + if payload and payload.name == 'publish' and payload.attr.node then + local node = payload.attr.node; + payload = payload.tags[1]; + if payload then + publish(session, node, payload); + return true; + end -- TODO else error + end -- TODO else error + end + end + origin.send(st.error_reply(stanza, "cancel", "service-unavailable")); +end); +