Ver código fonte

feat: jitsi_session: extracts URL parameters from BOSH or WS into session

Co-authored-by: Saúl Ibarra Corretgé <saghul@jitsi.org>
j8
damencho 4 anos atrás
pai
commit
7396db71fd

+ 70
- 0
resources/prosody-plugins/mod_auth_jitsi-annonymous.lua Ver arquivo

@@ -0,0 +1,70 @@
1
+-- Anonymous authentication with extras:
2
+-- * session resumption
3
+-- Copyright (C) 2021-present 8x8, Inc.
4
+
5
+local new_sasl = require "util.sasl".new;
6
+local sasl = require "util.sasl";
7
+local sessions = prosody.full_sessions;
8
+
9
+-- define auth provider
10
+local provider = {};
11
+
12
+function provider.test_password(username, password)
13
+    return nil, "Password based auth not supported";
14
+end
15
+
16
+function provider.get_password(username)
17
+    return nil;
18
+end
19
+
20
+function provider.set_password(username, password)
21
+    return nil, "Set password not supported";
22
+end
23
+
24
+function provider.user_exists(username)
25
+    return nil;
26
+end
27
+
28
+function provider.create_user(username, password)
29
+    return nil;
30
+end
31
+
32
+function provider.delete_user(username)
33
+    return nil;
34
+end
35
+
36
+function provider.get_sasl_handler(session)
37
+    -- Custom session matching so we can resume sesssion even with randomly
38
+    -- generrated user IDs.
39
+    local function get_username(self, message)
40
+        if (session.previd ~= nil) then
41
+            for _, session1 in pairs(sessions) do
42
+                if (session1.resumption_token == session.previd) then
43
+                    self.username = session1.username;
44
+                    break;
45
+                end
46
+            end
47
+        else
48
+            self.username = message;
49
+        end
50
+
51
+        return true;
52
+    end
53
+
54
+    return new_sasl(module.host, { anonymous = get_username });
55
+end
56
+
57
+module:provides("auth", provider);
58
+
59
+local function anonymous(self, message)
60
+    -- This calls the handler created in 'provider.get_sasl_handler(session)'
61
+    local result, err, msg = self.profile.anonymous(self, username, self.realm);
62
+
63
+    if result == true then
64
+        return "success";
65
+    else
66
+        return "failure", err, msg;
67
+    end
68
+end
69
+
70
+sasl.registerMechanism("ANONYMOUS", {"anonymous"}, anonymous);

+ 3
- 12
resources/prosody-plugins/mod_auth_token.lua Ver arquivo

@@ -1,5 +1,5 @@
1 1
 -- Token authentication
2
+-- Copyright (C) 2021-present 8x8, Inc.
2 3
 
3 4
 local formdecode = require "util.http".formdecode;
4 5
 local generate_uuid = require "util.uuid".generate;
@@ -13,6 +13,8 @@ if token_util == nil then
13 13
     return;
14 14
 end
15 15
 
16
+module:depends("jitsi_session");
17
+
16 18
 -- define auth provider
17 19
 local provider = {};
18 20
 
@@ -32,18 +34,6 @@ function init_session(event)
32 34
         -- other fields will be extracted from the token and set in the session
33 35
 
34 36
         session.auth_token = query and params.token or nil;
35
-        -- previd is used together with https://modules.prosody.im/mod_smacks.html
36
-        -- the param is used to find resumed session and re-use anonymous(random) user id
37
-        -- (see get_username_from_token)
38
-        session.previd = query and params.previd or nil;
39
-
40
-        -- The room name and optional prefix from the web query
41
-        session.jitsi_web_query_room = params.room;
42
-        session.jitsi_web_query_prefix = params.prefix or "";
43
-
44
-        -- Deprecated, you should use jitsi_web_query_room and jitsi_web_query_prefix
45
-        session.jitsi_bosh_query_room = session.jitsi_web_query_room;
46
-        session.jitsi_bosh_query_prefix = session.jitsi_web_query_prefix;
47 37
     end
48 38
 end
49 39
 

+ 1
- 20
resources/prosody-plugins/mod_av_moderation.lua Ver arquivo

@@ -1,26 +1,6 @@
1
-local formdecode = require 'util.http'.formdecode;
2
-
3 1
 local avmoderation_component = module:get_option_string('av_moderation_component', 'avmoderation'..module.host);
4 2
 
5 3
 -- Advertise AV Moderation so client can pick up the address and use it
6 4
 module:add_identity('component', 'av_moderation', avmoderation_component);
7 5
 
8
-function update_session(event)
9
-    local session = event.session;
10
-
11
-    if session.jitsi_web_query_room then
12
-        -- no need for an update
13
-        return;
14
-    end
15
-
16
-    local query = event.request.url.query;
17
-    if query ~= nil then
18
-        local params = formdecode(query);
19
-        -- The room name and optional prefix from the web query
20
-        session.jitsi_web_query_room = params.room;
21
-        session.jitsi_web_query_prefix = params.prefix or '';
22
-    end
23
-end
24
-module:hook_global('bosh-session', update_session);
25
-module:hook_global('websocket-session', update_session);
6
+module:depends("jitsi_session");

+ 27
- 0
resources/prosody-plugins/mod_jitsi_session.lua Ver arquivo

@@ -0,0 +1,27 @@
1
+-- Jitsi session information
2
+-- Copyright (C) 2021-present 8x8, Inc.
3
+module:set_global();
4
+
5
+local formdecode = require "util.http".formdecode;
6
+
7
+-- Extract the following parameters from the URL and set them in the session:
8
+-- * previd: for session resumption
9
+function init_session(event)
10
+    local session, request = event.session, event.request;
11
+    local query = request.url.query;
12
+
13
+    if query ~= nil then
14
+        local params = formdecode(query);
15
+
16
+        -- previd is used together with https://modules.prosody.im/mod_smacks.html
17
+        -- the param is used to find resumed session and re-use anonymous(random) user id
18
+        session.previd = query and params.previd or nil;
19
+
20
+        -- The room name and optional prefix from the web query
21
+        session.jitsi_web_query_room = params.room;
22
+        session.jitsi_web_query_prefix = params.prefix or "";
23
+    end
24
+end
25
+
26
+module:hook_global("bosh-session", init_session);
27
+module:hook_global("websocket-session", init_session);

+ 2
- 20
resources/prosody-plugins/mod_muc_lobby_rooms.lua Ver arquivo

@@ -23,7 +23,8 @@ if not have_async then
23 23
     return;
24 24
 end
25 25
 
26
-local formdecode = require "util.http".formdecode;
26
+module:depends("jitsi_session");
27
+
27 28
 local jid_split = require 'util.jid'.split;
28 29
 local jid_bare = require 'util.jid'.bare;
29 30
 local json = require 'util.json';
@@ -378,24 +379,6 @@ process_host_module(main_muc_component_config, function(host_module, host)
378 379
     end);
379 380
 end);
380 381
 
381
-function update_session(event)
382
-    local session = event.session;
383
-
384
-    if session.jitsi_web_query_room then
385
-        -- no need for an update
386
-        return;
387
-    end
388
-
389
-    local query = event.request.url.query;
390
-    if query ~= nil then
391
-        local params = formdecode(query);
392
-        -- The room name and optional prefix from the web query
393
-        session.jitsi_web_query_room = params.room;
394
-        session.jitsi_web_query_prefix = params.prefix or '';
395
-    end
396
-end
397
-
398 382
 function handle_create_lobby(event)
399 383
     local room = event.room;
400 384
     room:set_members_only(true);
@@ -407,8 +390,6 @@ function handle_destroy_lobby(event)
407 390
     destroy_lobby_room(event.room, event.newjid, event.message);
408 391
 end
409 392
 
410
-module:hook_global('bosh-session', update_session);
411
-module:hook_global('websocket-session', update_session);
412 393
 module:hook_global('config-reloaded', load_config);
413 394
 module:hook_global('create-lobby-room', handle_create_lobby);
414 395
 module:hook_global('destroy-lobby-room', handle_destroy_lobby);

+ 2
- 0
resources/prosody-plugins/mod_muc_poltergeist.lua Ver arquivo

@@ -11,6 +11,8 @@ if not have_async then
11 11
     return;
12 12
 end
13 13
 
14
+module:depends("jitsi_session");
15
+
14 16
 local async_handler_wrapper = module:require "util".async_handler_wrapper;
15 17
 
16 18
 -- Options

Carregando…
Cancelar
Salvar