Mercurial > prosody-modules
comparison mod_blocking/mod_blocking.lua @ 262:4986ffe35704
mod_blocking: Updated to use the new events API.
| author | Waqas Hussain <waqas20@gmail.com> |
|---|---|
| date | Sat, 16 Oct 2010 06:23:16 +0500 |
| parents | bcd7dc51a5e3 |
| children | 000f1d1c6ca5 |
comparison
equal
deleted
inserted
replaced
| 261:0f46fb2dbc79 | 262:4986ffe35704 |
|---|---|
| 98 end | 98 end |
| 99 end | 99 end |
| 100 return jid_list; | 100 return jid_list; |
| 101 end | 101 end |
| 102 | 102 |
| 103 function handle_blocking_command(session, stanza) | 103 function handle_blocking_command(event) |
| 104 local session, stanza = event.origin, event.stanza; | |
| 105 | |
| 104 local username, host = jid_split(stanza.attr.from); | 106 local username, host = jid_split(stanza.attr.from); |
| 105 if stanza.attr.type == "set" then | 107 if stanza.attr.type == "set" then |
| 106 if stanza.tags[1].name == "block" then | 108 if stanza.tags[1].name == "block" then |
| 107 local block = stanza.tags[1]; | 109 local block = stanza.tags[1]; |
| 108 local block_jid_list = {}; | 110 local block_jid_list = {}; |
| 109 for item in block:childtags() do | 111 for item in block:childtags() do |
| 110 block_jid_list[#block_jid_list+1] = item.attr.jid; | 112 block_jid_list[#block_jid_list+1] = item.attr.jid; |
| 111 end | 113 end |
| 112 if #block_jid_list == 0 then | 114 if #block_jid_list == 0 then |
| 113 --FIXME: Reply bad-request | 115 session.send(st.error_reply(stanza, "modify", "bad-request")); |
| 114 else | 116 else |
| 115 for _, jid in ipairs(block_jid_list) do | 117 for _, jid in ipairs(block_jid_list) do |
| 116 add_blocked_jid(username, host, jid); | 118 add_blocked_jid(username, host, jid); |
| 117 end | 119 end |
| 118 session.send(st.reply(stanza)); | 120 session.send(st.reply(stanza)); |
| 119 end | 121 end |
| 122 return true; | |
| 120 elseif stanza.tags[1].name == "unblock" then | 123 elseif stanza.tags[1].name == "unblock" then |
| 121 remove_all_blocked_jids(username, host); | 124 remove_all_blocked_jids(username, host); |
| 122 session.send(st.reply(stanza)); | 125 session.send(st.reply(stanza)); |
| 126 return true; | |
| 123 end | 127 end |
| 124 elseif stanza.attr.type == "get" and stanza.tags[1].name == "blocklist" then | 128 elseif stanza.attr.type == "get" and stanza.tags[1].name == "blocklist" then |
| 125 local reply = st.reply(stanza):tag("blocklist", { xmlns = xmlns_blocking }); | 129 local reply = st.reply(stanza):tag("blocklist", { xmlns = xmlns_blocking }); |
| 126 local blocked_jids = get_blocked_jids(username, host); | 130 local blocked_jids = get_blocked_jids(username, host); |
| 127 for _, jid in ipairs(blocked_jids) do | 131 for _, jid in ipairs(blocked_jids) do |
| 128 reply:tag("item", { jid = jid }):up(); | 132 reply:tag("item", { jid = jid }):up(); |
| 129 end | 133 end |
| 130 session.send(reply); | 134 session.send(reply); |
| 131 else | 135 return true; |
| 132 --FIXME: Need to respond with service-unavailable | |
| 133 end | 136 end |
| 134 end | 137 end |
| 135 | 138 |
| 136 module:add_iq_handler("c2s", xmlns_blocking, handle_blocking_command); | 139 module:hook("iq/self/urn:xmpp:blocking:blocklist", handle_blocking_command); |
| 140 module:hook("iq/self/urn:xmpp:blocking:block", handle_blocking_command); | |
| 141 module:hook("iq/self/urn:xmpp:blocking:unblock", handle_blocking_command); |
