comparison mod_csi_battery_saver/mod_csi_battery_saver.lua @ 2735:b5fae17e4403

mod_csi_battery_saver: correctly handle encrypted message stanzas Thanks to michel
author tmolitor <thilo@eightysoft.de>
date Sat, 12 Aug 2017 20:45:11 +0200
parents 538c54d2dab3
children f43c77c69a8a
comparison
equal deleted inserted replaced
2734:f5005d256877 2735:b5fae17e4403
18 -- Patched version of util.stanza:find() that supports giving stanza names 18 -- Patched version of util.stanza:find() that supports giving stanza names
19 -- without their namespace, allowing for every namespace. 19 -- without their namespace, allowing for every namespace.
20 local function find(self, path) 20 local function find(self, path)
21 local pos = 1; 21 local pos = 1;
22 local len = #path + 1; 22 local len = #path + 1;
23 23
24 repeat 24 repeat
25 local xmlns, name, text; 25 local xmlns, name, text;
26 local char = s_sub(path, pos, pos); 26 local char = s_sub(path, pos, pos);
27 if char == "@" then 27 if char == "@" then
28 return self.attr[s_sub(path, pos + 1)]; 28 return self.attr[s_sub(path, pos + 1)];
108 stanza_direction = carbon and stanza:child_with_name("sent") and "out" or "in"; 108 stanza_direction = carbon and stanza:child_with_name("sent") and "out" or "in";
109 --session.log("debug", "mod_csi_battery_saver(%s): stanza_direction = %s, carbon = %s, stanza = %s", id, stanza_direction, carbon and "true" or "false", tostring(stanza)); 109 --session.log("debug", "mod_csi_battery_saver(%s): stanza_direction = %s, carbon = %s, stanza = %s", id, stanza_direction, carbon and "true" or "false", tostring(stanza));
110 if carbon then stanza = carbon; end 110 if carbon then stanza = carbon; end
111 -- carbon copied outgoing messages aren't important (but incoming carbon copies are!) 111 -- carbon copied outgoing messages aren't important (but incoming carbon copies are!)
112 if carbon and stanza_direction == "out" then return false; end 112 if carbon and stanza_direction == "out" then return false; end
113 113
114 local st_type = stanza.attr.type; 114 local st_type = stanza.attr.type;
115 if st_type == "headline" then 115 if st_type == "headline" then
116 return false; 116 return false;
117 end 117 end
118
119 -- We can't check for nick in encrypted groupchat messages, so let's treat them as important
120 -- Some clients don't set a body or an empty body for encrypted messages
121
122 -- check omemo https://xmpp.org/extensions/inbox/omemo.html
123 if stanza:get_child("encrypted", "eu.siacs.conversations.axolotl") or stanza:get_child("encrypted", "urn:xmpp:omemo:0") then return true; end
124
125 -- check xep27 pgp https://xmpp.org/extensions/xep-0027.html
126 if stanza:get_child("x", "jabber:x:encrypted") then return true; end
127
128 -- check xep373 pgp (OX) https://xmpp.org/extensions/xep-0373.html
129 if stanza:get_child("openpgp", "urn:xmpp:openpgp:0") then return true; end
130
118 local body = stanza:get_child_text("body"); 131 local body = stanza:get_child_text("body");
119 if st_type == "groupchat" then 132 if st_type == "groupchat" then
120 if stanza:get_child_text("subject") then return true; end 133 if stanza:get_child_text("subject") then return true; end
121 if not body then return false; end 134 if not body then return false; end
122 if body:find(session.username, 1, true) then return true; end 135 if body:find(session.username, 1, true) then return true; end
142 session.pump = pump; 155 session.pump = pump;
143 session._pump_orig_send = session.send; 156 session._pump_orig_send = session.send;
144 function session.send(stanza) 157 function session.send(stanza)
145 session.log("debug", "mod_csi_battery_saver(%s): Got stanza: <%s>", id, tostring(stanza.name)); 158 session.log("debug", "mod_csi_battery_saver(%s): Got stanza: <%s>", id, tostring(stanza.name));
146 local important = is_important(stanza, session); 159 local important = is_important(stanza, session);
147 -- add delay stamp to unimported (buffered) stanzas that can/need be stamped 160 -- add delay stamp to unimportant (buffered) stanzas that can/need be stamped
148 if not important and is_stamp_needed(stanza, session) then stanza = add_stamp(stanza, session); end 161 if not important and is_stamp_needed(stanza, session) then stanza = add_stamp(stanza, session); end
149 pump:push(stanza); 162 pump:push(stanza);
150 if important then 163 if important then
151 session.log("debug", "mod_csi_battery_saver(%s): Encountered important stanza, flushing buffer: <%s>", id, tostring(stanza.name)); 164 session.log("debug", "mod_csi_battery_saver(%s): Encountered important stanza, flushing buffer: <%s>", id, tostring(stanza.name));
152 pump:flush(); 165 pump:flush();