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 {};