Mercurial > prosody-modules
comparison mod_blocking/mod_blocking.lua @ 174:d40982d130f0
mod_blocking: Various small changes to make it actually work, which I forgot to commit
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Sun, 13 Jun 2010 19:51:15 +0100 |
| parents | 4f58ddade1db |
| children | 92a72435721a |
comparison
equal
deleted
inserted
replaced
| 173:4f58ddade1db | 174:d40982d130f0 |
|---|---|
| 1 local jid_split = require "util.jid".split; | |
| 2 local st = require "util.stanza"; | |
| 3 | |
| 4 local xmlns_blocking = "urn:xmpp:blocking"; | |
| 5 | |
| 1 module:add_feature("urn:xmpp:blocking"); | 6 module:add_feature("urn:xmpp:blocking"); |
| 2 | 7 |
| 3 -- Add JID to default privacy list | 8 -- Add JID to default privacy list |
| 4 function add_blocked_jid(username, host, jid) | 9 function add_blocked_jid(username, host, jid) |
| 5 local privacy_lists = datamanager.load(username, host, "privacy") or {}; | 10 local privacy_lists = datamanager.load(username, host, "privacy") or {}; |
| 6 local default_list_name = privacy_lists.default; | 11 local default_list_name = privacy_lists.default; |
| 7 if not default_list_name then | 12 if not default_list_name then |
| 8 default_list_name = "blocklist"; | 13 default_list_name = "blocklist"; |
| 9 privacy_lists.default = default_list_name; | 14 privacy_lists.default = default_list_name; |
| 10 end | 15 end |
| 11 local default_list = privacy_lists.list[default_list_name]; | 16 local default_list = privacy_lists.lists[default_list_name]; |
| 12 if not default_list then | 17 if not default_list then |
| 13 default_list = { name = default_list_name, items = {} }; | 18 default_list = { name = default_list_name, items = {} }; |
| 14 privacy_lists.lists[default_list_name] = default_list; | 19 privacy_lists.lists[default_list_name] = default_list; |
| 15 end | 20 end |
| 16 local items = default_list.items; | 21 local items = default_list.items; |
| 17 local order = items[1].order; -- Must come first | 22 local order = items[1] and items[1].order or 0; -- Must come first |
| 18 for i=1,#items do -- order must be unique | 23 for i=1,#items do -- order must be unique |
| 19 items[i].order = items[i].order + 1; | 24 items[i].order = items[i].order + 1; |
| 20 end | 25 end |
| 21 table.insert(items, 1, { type = "jid" | 26 table.insert(items, 1, { type = "jid" |
| 22 , action = "deny" | 27 , action = "deny" |
| 33 -- Remove JID from default privacy list | 38 -- Remove JID from default privacy list |
| 34 function remove_blocked_jid(username, host, jid) | 39 function remove_blocked_jid(username, host, jid) |
| 35 local privacy_lists = datamanager.load(username, host, "privacy") or {}; | 40 local privacy_lists = datamanager.load(username, host, "privacy") or {}; |
| 36 local default_list_name = privacy_lists.default; | 41 local default_list_name = privacy_lists.default; |
| 37 if not default_list_name then return; end | 42 if not default_list_name then return; end |
| 38 local default_list = privacy_lists.list[default_list_name]; | 43 local default_list = privacy_lists.lists[default_list_name]; |
| 39 if not default_list then return; end | 44 if not default_list then return; end |
| 40 local items = default_list.items; | 45 local items = default_list.items; |
| 41 local item; | 46 local item; |
| 42 for i=1,#items do -- order must be unique | 47 for i=1,#items do -- order must be unique |
| 43 item = items[i]; | 48 item = items[i]; |
| 51 | 56 |
| 52 function remove_all_blocked_jids(username, host) | 57 function remove_all_blocked_jids(username, host) |
| 53 local privacy_lists = datamanager.load(username, host, "privacy") or {}; | 58 local privacy_lists = datamanager.load(username, host, "privacy") or {}; |
| 54 local default_list_name = privacy_lists.default; | 59 local default_list_name = privacy_lists.default; |
| 55 if not default_list_name then return; end | 60 if not default_list_name then return; end |
| 56 local default_list = privacy_lists.list[default_list_name]; | 61 local default_list = privacy_lists.lists[default_list_name]; |
| 57 if not default_list then return; end | 62 if not default_list then return; end |
| 58 local items = default_list.items; | 63 local items = default_list.items; |
| 59 local item; | 64 local item; |
| 60 for i=#items,1 do -- order must be unique | 65 for i=#items,1 do -- order must be unique |
| 61 item = items[i]; | 66 item = items[i]; |
| 69 function get_blocked_jids(username, host) | 74 function get_blocked_jids(username, host) |
| 70 -- Return array of blocked JIDs in default privacy list | 75 -- Return array of blocked JIDs in default privacy list |
| 71 local privacy_lists = datamanager.load(username, host, "privacy") or {}; | 76 local privacy_lists = datamanager.load(username, host, "privacy") or {}; |
| 72 local default_list_name = privacy_lists.default; | 77 local default_list_name = privacy_lists.default; |
| 73 if not default_list_name then return {}; end | 78 if not default_list_name then return {}; end |
| 74 local default_list = privacy_lists.list[default_list_name]; | 79 local default_list = privacy_lists.lists[default_list_name]; |
| 75 if not default_list then return {}; end | 80 if not default_list then return {}; end |
| 76 local items = default_list.items; | 81 local items = default_list.items; |
| 77 local item; | 82 local item; |
| 78 local jid_list = {}; | 83 local jid_list = {}; |
| 79 for i=1,#items do -- order must be unique | 84 for i=1,#items do -- order must be unique |
| 87 | 92 |
| 88 function handle_blocking_command(session, stanza) | 93 function handle_blocking_command(session, stanza) |
| 89 local username, host = jid_split(stanza.attr.from); | 94 local username, host = jid_split(stanza.attr.from); |
| 90 if stanza.attr.type == "set" then | 95 if stanza.attr.type == "set" then |
| 91 if stanza.tags[1].name == "block" then | 96 if stanza.tags[1].name == "block" then |
| 92 local block = stanza.tags[1]:get_child("block"); | 97 local block = stanza.tags[1]; |
| 93 local block_jid_list = {}; | 98 local block_jid_list = {}; |
| 94 for item in block:childtags() do | 99 for item in block:childtags() do |
| 95 block_jid_list[#block_jid_list+1] = item.attr.jid; | 100 block_jid_list[#block_jid_list+1] = item.attr.jid; |
| 96 end | 101 end |
| 97 if #block_jid_list == 0 then | 102 if #block_jid_list == 0 then |
