feat(mod_auth_token): add support for 'previd' query param
The 'previd' query parameter will be use to match user id of the session being resumed when the smacks module and token authentication are enabled in Prosody. Otherwise user gets new random id every time and this doesn't work with the smacks module.
This commit is contained in:
parent
582d4aff1c
commit
4dc10e82f1
|
@ -6,6 +6,7 @@ local generate_uuid = require "util.uuid".generate;
|
||||||
local new_sasl = require "util.sasl".new;
|
local new_sasl = require "util.sasl".new;
|
||||||
local sasl = require "util.sasl";
|
local sasl = require "util.sasl";
|
||||||
local token_util = module:require "token/util".new(module);
|
local token_util = module:require "token/util".new(module);
|
||||||
|
local sessions = prosody.full_sessions;
|
||||||
|
|
||||||
-- no token configuration
|
-- no token configuration
|
||||||
if token_util == nil then
|
if token_util == nil then
|
||||||
|
@ -25,6 +26,10 @@ function init_session(event)
|
||||||
if query ~= nil then
|
if query ~= nil then
|
||||||
local params = formdecode(query);
|
local params = formdecode(query);
|
||||||
session.auth_token = query and params.token or nil;
|
session.auth_token = query and params.token or nil;
|
||||||
|
-- previd is used together with https://modules.prosody.im/mod_smacks.html
|
||||||
|
-- the param is used to find resumed session and re-use anonymous(random) user id
|
||||||
|
-- (see get_username_from_token)
|
||||||
|
session.previd = query and params.previd or nil;
|
||||||
|
|
||||||
-- The room name and optional prefix from the bosh query
|
-- The room name and optional prefix from the bosh query
|
||||||
session.jitsi_bosh_query_room = params.room;
|
session.jitsi_bosh_query_room = params.room;
|
||||||
|
@ -75,6 +80,13 @@ function provider.get_sasl_handler(session)
|
||||||
|
|
||||||
if (customUsername) then
|
if (customUsername) then
|
||||||
self.username = customUsername;
|
self.username = customUsername;
|
||||||
|
elseif (session.previd ~= nil) then
|
||||||
|
for _, session1 in pairs(sessions) do
|
||||||
|
if (session1.resumption_token == session.previd) then
|
||||||
|
self.username = session1.username;
|
||||||
|
break;
|
||||||
|
end
|
||||||
|
end
|
||||||
else
|
else
|
||||||
self.username = message;
|
self.username = message;
|
||||||
end
|
end
|
||||||
|
@ -95,10 +107,11 @@ local function anonymous(self, message)
|
||||||
local result, err, msg = self.profile.anonymous(self, username, self.realm);
|
local result, err, msg = self.profile.anonymous(self, username, self.realm);
|
||||||
|
|
||||||
if result == true then
|
if result == true then
|
||||||
|
if (self.username == nil) then
|
||||||
self.username = username;
|
self.username = username;
|
||||||
|
end
|
||||||
return "success";
|
return "success";
|
||||||
else
|
else
|
||||||
|
|
||||||
return "failure", err, msg;
|
return "failure", err, msg;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue