Mercurial > prosody-modules
comparison mod_blocking/mod_blocking.lua @ 176:26bb69a57749
mod_blocking: Ensure that a JID can be in the blocklist at most once, and have helper functions return true/false on success/error
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Mon, 14 Jun 2010 12:25:53 +0100 |
parents | 92a72435721a |
children | bcd7dc51a5e3 |
comparison
equal
deleted
inserted
replaced
175:92a72435721a | 176:26bb69a57749 |
---|---|
19 privacy_lists.lists[default_list_name] = default_list; | 19 privacy_lists.lists[default_list_name] = default_list; |
20 end | 20 end |
21 local items = default_list.items; | 21 local items = default_list.items; |
22 local order = items[1] and items[1].order or 0; -- Must come first | 22 local order = items[1] and items[1].order or 0; -- Must come first |
23 for i=1,#items do -- order must be unique | 23 for i=1,#items do -- order must be unique |
24 items[i].order = items[i].order + 1; | 24 local item = items[i]; |
25 item.order = item.order + 1; | |
26 if item.type == "jid" and item.action == "deny" and item.value == jid then | |
27 return false; | |
28 end | |
25 end | 29 end |
26 table.insert(items, 1, { type = "jid" | 30 table.insert(items, 1, { type = "jid" |
27 , action = "deny" | 31 , action = "deny" |
28 , value = jid | 32 , value = jid |
29 , message = false | 33 , message = false |
31 , ["presence-in"] = false | 35 , ["presence-in"] = false |
32 , iq = false | 36 , iq = false |
33 , order = order | 37 , order = order |
34 }); | 38 }); |
35 datamanager.store(username, host, "privacy", privacy_lists); | 39 datamanager.store(username, host, "privacy", privacy_lists); |
40 return true; | |
36 end | 41 end |
37 | 42 |
38 -- Remove JID from default privacy list | 43 -- Remove JID from default privacy list |
39 function remove_blocked_jid(username, host, jid) | 44 function remove_blocked_jid(username, host, jid) |
40 local privacy_lists = datamanager.load(username, host, "privacy") or {}; | 45 local privacy_lists = datamanager.load(username, host, "privacy") or {}; |
41 local default_list_name = privacy_lists.default; | 46 local default_list_name = privacy_lists.default; |
42 if not default_list_name then return; end | 47 if not default_list_name then return; end |
43 local default_list = privacy_lists.lists[default_list_name]; | 48 local default_list = privacy_lists.lists[default_list_name]; |
44 if not default_list then return; end | 49 if not default_list then return; end |
45 local items = default_list.items; | 50 local items = default_list.items; |
46 local item; | 51 local item, removed = nil, false; |
47 for i=1,#items do -- order must be unique | 52 for i=1,#items do -- order must be unique |
48 item = items[i]; | 53 item = items[i]; |
49 if item.type == "jid" and item.action == "deny" and item.value == jid then | 54 if item.type == "jid" and item.action == "deny" and item.value == jid then |
50 table.remove(items, i); | 55 table.remove(items, i); |
51 return true; | 56 removed = true; |
57 break; | |
52 end | 58 end |
53 end | 59 end |
54 datamanager.store(username, host, "privacy", privacy_lists); | 60 if removed then |
61 datamanager.store(username, host, "privacy", privacy_lists); | |
62 end | |
63 return removed; | |
55 end | 64 end |
56 | 65 |
57 function remove_all_blocked_jids(username, host) | 66 function remove_all_blocked_jids(username, host) |
58 local privacy_lists = datamanager.load(username, host, "privacy") or {}; | 67 local privacy_lists = datamanager.load(username, host, "privacy") or {}; |
59 local default_list_name = privacy_lists.default; | 68 local default_list_name = privacy_lists.default; |
67 if item.type == "jid" and item.action == "deny" then | 76 if item.type == "jid" and item.action == "deny" then |
68 table.remove(items, i); | 77 table.remove(items, i); |
69 end | 78 end |
70 end | 79 end |
71 datamanager.store(username, host, "privacy", privacy_lists); | 80 datamanager.store(username, host, "privacy", privacy_lists); |
81 return true; | |
72 end | 82 end |
73 | 83 |
74 function get_blocked_jids(username, host) | 84 function get_blocked_jids(username, host) |
75 -- Return array of blocked JIDs in default privacy list | 85 -- Return array of blocked JIDs in default privacy list |
76 local privacy_lists = datamanager.load(username, host, "privacy") or {}; | 86 local privacy_lists = datamanager.load(username, host, "privacy") or {}; |