comparison mod_watchuntrusted/mod_watchuntrusted.lua @ 1675:116488cced16

mod_watchuntrusted: Only notify once per host per day
author Kim Alvefur <zash@zash.se>
date Wed, 22 Apr 2015 13:20:47 +0200
parents 5eaecb7f680d
children 2328cbc41045
comparison
equal deleted inserted replaced
1674:7f4c64cfed09 1675:116488cced16
6 6
7 local untrusted_fail_watchers = module:get_option_set("untrusted_fail_watchers", module:get_option("admins", {})) / jid_prep; 7 local untrusted_fail_watchers = module:get_option_set("untrusted_fail_watchers", module:get_option("admins", {})) / jid_prep;
8 local untrusted_fail_notification = module:get_option("untrusted_fail_notification", "Establishing a secure connection from $from_host to $to_host failed. Certificate hash: $sha1. $errors"); 8 local untrusted_fail_notification = module:get_option("untrusted_fail_notification", "Establishing a secure connection from $from_host to $to_host failed. Certificate hash: $sha1. $errors");
9 9
10 local st = require "util.stanza"; 10 local st = require "util.stanza";
11
12 local notified_about_already = { };
11 13
12 module:hook_global("s2s-check-certificate", function (event) 14 module:hook_global("s2s-check-certificate", function (event)
13 local session, host = event.session, event.host; 15 local session, host = event.session, event.host;
14 local conn = session.conn:socket(); 16 local conn = session.conn:socket();
15 local local_host = session.direction == "outgoing" and session.from_host or session.to_host; 17 local local_host = session.direction == "outgoing" and session.from_host or session.to_host;
23 must_secure = true; 25 must_secure = true;
24 elseif must_secure and insecure_domains[host] then 26 elseif must_secure and insecure_domains[host] then
25 must_secure = false; 27 must_secure = false;
26 end 28 end
27 29
28 if must_secure and (session.cert_chain_status ~= "valid" or session.cert_identity_status ~= "valid") then 30 if must_secure and (session.cert_chain_status ~= "valid" or session.cert_identity_status ~= "valid") and not notified_about_already[host] then
31 notified_about_already[host] = os.time();
29 local _, errors = conn:getpeerverification(); 32 local _, errors = conn:getpeerverification();
30 local error_message = ""; 33 local error_message = "";
31 34
32 for depth, t in pairs(errors or {}) do 35 for depth, t in pairs(errors or {}) do
33 if #t > 0 then 36 if #t > 0 then
52 module:send(message); 55 module:send(message);
53 end 56 end
54 end 57 end
55 end, -0.5); 58 end, -0.5);
56 59
60 module:add_timer(14400, function (now)
61 for host, time in pairs(notified_about_already) do
62 if time + 86400 > now then
63 notified_about_already[host] = nil;
64 end
65 end
66 end)