aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2021-10-05 18:13:51 +0200
committerKim Alvefur <zash@zash.se>2021-10-05 18:13:51 +0200
commit2798f91821c0e98ce8ed7f33b4c776289ad1d7f8 (patch)
tree738e263c3fe3810cf53375577796582476c98999
parent1c904b2ed3d83b56ec7650e981c156a9df63de4e (diff)
downloadprosody-2798f91821c0e98ce8ed7f33b4c776289ad1d7f8.tar.gz
prosody-2798f91821c0e98ce8ed7f33b4c776289ad1d7f8.zip
MUC: Add method for getting the occupant id salt to allow reuse
-rw-r--r--plugins/muc/mod_muc.lua1
-rw-r--r--plugins/muc/occupant_id.lib.lua16
2 files changed, 12 insertions, 5 deletions
diff --git a/plugins/muc/mod_muc.lua b/plugins/muc/mod_muc.lua
index 3b0d62ab..5873b1a2 100644
--- a/plugins/muc/mod_muc.lua
+++ b/plugins/muc/mod_muc.lua
@@ -92,6 +92,7 @@ room_mt.set_presence_broadcast = presence_broadcast.set;
room_mt.get_valid_broadcast_roles = presence_broadcast.get_valid_broadcast_roles;
local occupant_id = module:require "muc/occupant_id";
+room_mt.get_salt = occupant_id.get_room_salt;
room_mt.get_occupant_id = occupant_id.get_occupant_id;
local jid_split = require "util.jid".split;
diff --git a/plugins/muc/occupant_id.lib.lua b/plugins/muc/occupant_id.lib.lua
index 1a44462c..1d310b3d 100644
--- a/plugins/muc/occupant_id.lib.lua
+++ b/plugins/muc/occupant_id.lib.lua
@@ -10,16 +10,21 @@ local b64encode = require "util.encodings".base64.encode;
local xmlns_occupant_id = "urn:xmpp:occupant-id:0";
-local function get_occupant_id(room, occupant)
- if occupant.stable_id then
- return occupant.stable_id;
- end
-
+local function get_room_salt(room)
local salt = room._data.occupant_id_salt;
if not salt then
salt = uuid.generate();
room._data.occupant_id_salt = salt;
end
+ return salt;
+end
+
+local function get_occupant_id(room, occupant)
+ if occupant.stable_id then
+ return occupant.stable_id;
+ end
+
+ local salt = get_room_salt(room)
occupant.stable_id = b64encode(hmac_sha256(occupant.bare_jid, salt));
@@ -66,5 +71,6 @@ if module:get_option_boolean("muc_occupant_id", true) then
end
return {
+ get_room_salt = get_room_salt;
get_occupant_id = get_occupant_id;
};