Software /
code /
prosody
Comparison
plugins/mod_blocklist.lua @ 6629:42aeb882b3e1
mod_blocklist: Some cleanup [luacheck]
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 25 Apr 2015 14:57:52 +0200 |
parent | 6531:18f4973849b1 |
child | 6833:aeb088bb1a20 |
comparison
equal
deleted
inserted
replaced
6628:8495734da243 | 6629:42aeb882b3e1 |
---|---|
11 | 11 |
12 local user_exists = require"core.usermanager".user_exists; | 12 local user_exists = require"core.usermanager".user_exists; |
13 local is_contact_subscribed = require"core.rostermanager".is_contact_subscribed; | 13 local is_contact_subscribed = require"core.rostermanager".is_contact_subscribed; |
14 local st = require"util.stanza"; | 14 local st = require"util.stanza"; |
15 local st_error_reply = st.error_reply; | 15 local st_error_reply = st.error_reply; |
16 local jid_prep, jid_split = import("util.jid", "prep", "split"); | 16 local jid_prep = require"util.jid".prep; |
17 | 17 local jid_split = require"util.jid".split; |
18 local host = module.host; | 18 |
19 local storage = module:open_store(); | 19 local storage = module:open_store(); |
20 local sessions = prosody.hosts[host].sessions; | 20 local sessions = prosody.hosts[module.host].sessions; |
21 | 21 |
22 -- Cache of blocklists used since module was loaded | 22 -- Cache of blocklists used since module was loaded |
23 local cache = {}; | 23 local cache = {}; |
24 if module:get_option_boolean("blocklist_weak_cache") then | 24 if module:get_option_boolean("blocklist_weak_cache") then |
25 -- Lower memory usage, more IO and latency | 25 -- Lower memory usage, more IO and latency |
70 end | 70 end |
71 | 71 |
72 local function get_blocklist(username) | 72 local function get_blocklist(username) |
73 local blocklist = cache[username]; | 73 local blocklist = cache[username]; |
74 if not blocklist then | 74 if not blocklist then |
75 if not user_exists(username, host) then | 75 if not user_exists(username, module.host) then |
76 return null_blocklist; | 76 return null_blocklist; |
77 end | 77 end |
78 blocklist = storage:get(username); | 78 blocklist = storage:get(username); |
79 if not blocklist then | 79 if not blocklist then |
80 blocklist = migrate_privacy_list(username); | 80 blocklist = migrate_privacy_list(username); |
104 local origin, stanza = event.origin, event.stanza; | 104 local origin, stanza = event.origin, event.stanza; |
105 local username = origin.username; | 105 local username = origin.username; |
106 local action = stanza.tags[1]; | 106 local action = stanza.tags[1]; |
107 local new = {}; | 107 local new = {}; |
108 | 108 |
109 local jid; | |
110 for item in action:childtags("item") do | 109 for item in action:childtags("item") do |
111 jid = jid_prep(item.attr.jid); | 110 local jid = jid_prep(item.attr.jid); |
112 if not jid then | 111 if not jid then |
113 return origin.send(st_error_reply(stanza, "modify", "jid-malformed")); | 112 return origin.send(st_error_reply(stanza, "modify", "jid-malformed")); |
114 end | 113 end |
115 item.attr.jid = jid; -- echo back prepped | 114 item.attr.jid = jid; -- echo back prepped |
116 new[jid] = is_contact_subscribed(username, host, jid) or false; | 115 new[jid] = is_contact_subscribed(username, module.host, jid) or false; |
117 end | 116 end |
118 | 117 |
119 local mode = action.name == "block" or nil; | 118 local mode = action.name == "block" or nil; |
120 | 119 |
121 if mode and not next(new) then | 120 if mode and not next(new) then |
174 module:hook("iq-set/self/urn:xmpp:blocking:block", edit_blocklist); | 173 module:hook("iq-set/self/urn:xmpp:blocking:block", edit_blocklist); |
175 module:hook("iq-set/self/urn:xmpp:blocking:unblock", edit_blocklist); | 174 module:hook("iq-set/self/urn:xmpp:blocking:unblock", edit_blocklist); |
176 | 175 |
177 -- Cache invalidation, solved! | 176 -- Cache invalidation, solved! |
178 module:hook_global("user-deleted", function (event) | 177 module:hook_global("user-deleted", function (event) |
179 if event.host == host then | 178 if event.host == module.host then |
180 cache[event.username] = nil; | 179 cache[event.username] = nil; |
181 end | 180 end |
182 end); | 181 end); |
183 | 182 |
184 -- Buggy clients | 183 -- Buggy clients |
185 module:hook("iq-error/self/blocklist-push", function (event) | 184 module:hook("iq-error/self/blocklist-push", function (event) |
186 local type, condition, text = event.stanza:get_error(); | 185 local _, condition, text = event.stanza:get_error(); |
187 (event.origin.log or module._log)("warn", "Client returned an error in response to notification from mod_%s: %s%s%s", module.name, condition, text and ": " or "", text or ""); | 186 (event.origin.log or module._log)("warn", "Client returned an error in response to notification from mod_%s: %s%s%s", module.name, condition, text and ": " or "", text or ""); |
188 return true; | 187 return true; |
189 end); | 188 end); |
190 | 189 |
191 local function is_blocked(user, jid) | 190 local function is_blocked(user, jid) |