aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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;
};