annotate mod_admin_notify/mod_admin_notify.lua @ 4651:8231774f5bfd

mod_cloud_notify_encrypted: Ensure body substring remains valid UTF-8 The `body:sub()` call risks splitting the string in the middle of a multi-byte UTF-8 sequence. This should have been caught by util.stanza validation, but that would have caused some havoc, at the very least causing the notification to not be sent. There have been no reports of this happening. Likely because this module isn't widely deployed among users with languages that use many longer UTF-8 sequences. The util.encodings.utf8.valid() function is O(n) where only the last sequence really needs to be checked, but it's in C and expected to be fast.
author Kim Alvefur <zash@zash.se>
date Sun, 22 Aug 2021 13:22:59 +0200
parents 44e18454e1e0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4238
e97c509fdbe3 mod_admin_notify: New module providing an API to notify host admins
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1 local it = require "util.iterators";
e97c509fdbe3 mod_admin_notify: New module providing an API to notify host admins
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2 local jid = require "util.jid";
e97c509fdbe3 mod_admin_notify: New module providing an API to notify host admins
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3 local set = require "util.set";
e97c509fdbe3 mod_admin_notify: New module providing an API to notify host admins
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4 local st = require "util.stanza";
e97c509fdbe3 mod_admin_notify: New module providing an API to notify host admins
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5
e97c509fdbe3 mod_admin_notify: New module providing an API to notify host admins
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6 local roles_store = module:open_store("roles", "map");
4274
44e18454e1e0 mod_admin_notify: Fix traceback when no admins listed in config
Matthew Wild <mwild1@gmail.com>
parents: 4238
diff changeset
7 local config_admins = module:get_option_inherited_set("admins", {}) / jid.prep;
4238
e97c509fdbe3 mod_admin_notify: New module providing an API to notify host admins
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8
e97c509fdbe3 mod_admin_notify: New module providing an API to notify host admins
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9 local function append_host(username)
e97c509fdbe3 mod_admin_notify: New module providing an API to notify host admins
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10 return username.."@"..module.host;
e97c509fdbe3 mod_admin_notify: New module providing an API to notify host admins
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11 end
e97c509fdbe3 mod_admin_notify: New module providing an API to notify host admins
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
12
e97c509fdbe3 mod_admin_notify: New module providing an API to notify host admins
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
13 local function get_admins()
e97c509fdbe3 mod_admin_notify: New module providing an API to notify host admins
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
14 local role_admins = roles_store:get_all("prosody:admin") or {};
e97c509fdbe3 mod_admin_notify: New module providing an API to notify host admins
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
15 local admins = config_admins + (set.new(it.to_array(it.keys(role_admins))) / append_host);
e97c509fdbe3 mod_admin_notify: New module providing an API to notify host admins
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
16 return admins;
e97c509fdbe3 mod_admin_notify: New module providing an API to notify host admins
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
17 end
e97c509fdbe3 mod_admin_notify: New module providing an API to notify host admins
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
18
e97c509fdbe3 mod_admin_notify: New module providing an API to notify host admins
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
19 function notify(text) --luacheck: ignore 131/notify
e97c509fdbe3 mod_admin_notify: New module providing an API to notify host admins
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
20 local base_msg = st.message({ from = module.host })
e97c509fdbe3 mod_admin_notify: New module providing an API to notify host admins
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
21 :text_tag("body", text);
e97c509fdbe3 mod_admin_notify: New module providing an API to notify host admins
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
22 for admin_jid in get_admins() do
e97c509fdbe3 mod_admin_notify: New module providing an API to notify host admins
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
23 local msg = st.clone(base_msg);
e97c509fdbe3 mod_admin_notify: New module providing an API to notify host admins
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
24 msg.attr.to = admin_jid;
e97c509fdbe3 mod_admin_notify: New module providing an API to notify host admins
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
25 module:send(msg);
e97c509fdbe3 mod_admin_notify: New module providing an API to notify host admins
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
26 end
e97c509fdbe3 mod_admin_notify: New module providing an API to notify host admins
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
27 end