Kaynağa Gözat

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.
master
paweldomas 5 yıl önce
ebeveyn
işleme
4dc10e82f1
1 değiştirilmiş dosya ile 15 ekleme ve 2 silme
  1. 15
    2
      resources/prosody-plugins/mod_auth_token.lua

+ 15
- 2
resources/prosody-plugins/mod_auth_token.lua Dosyayı Görüntüle

6
 local new_sasl = require "util.sasl".new;
6
 local new_sasl = require "util.sasl".new;
7
 local sasl = require "util.sasl";
7
 local sasl = require "util.sasl";
8
 local token_util = module:require "token/util".new(module);
8
 local token_util = module:require "token/util".new(module);
9
+local sessions = prosody.full_sessions;
9
 
10
 
10
 -- no token configuration
11
 -- no token configuration
11
 if token_util == nil then
12
 if token_util == nil then
25
 	if query ~= nil then
26
 	if query ~= nil then
26
         local params = formdecode(query);
27
         local params = formdecode(query);
27
         session.auth_token = query and params.token or nil;
28
         session.auth_token = query and params.token or nil;
29
+        -- previd is used together with https://modules.prosody.im/mod_smacks.html
30
+        -- the param is used to find resumed session and re-use anonymous(random) user id
31
+        -- (see get_username_from_token)
32
+        session.previd = query and params.previd or nil;
28
 
33
 
29
         -- The room name and optional prefix from the bosh query
34
         -- The room name and optional prefix from the bosh query
30
         session.jitsi_bosh_query_room = params.room;
35
         session.jitsi_bosh_query_room = params.room;
75
 
80
 
76
         if (customUsername) then
81
         if (customUsername) then
77
             self.username = customUsername;
82
             self.username = customUsername;
83
+        elseif (session.previd ~= nil) then
84
+            for _, session1 in pairs(sessions) do
85
+                if (session1.resumption_token == session.previd) then
86
+                    self.username = session1.username;
87
+                    break;
88
+                end
89
+        	end
78
         else
90
         else
79
             self.username = message;
91
             self.username = message;
80
         end
92
         end
95
 	local result, err, msg = self.profile.anonymous(self, username, self.realm);
107
 	local result, err, msg = self.profile.anonymous(self, username, self.realm);
96
 
108
 
97
 	if result == true then
109
 	if result == true then
98
-		self.username = username;
110
+		if (self.username == nil) then
111
+			self.username = username;
112
+		end
99
 		return "success";
113
 		return "success";
100
 	else
114
 	else
101
-
102
 		return "failure", err, msg;
115
 		return "failure", err, msg;
103
 	end
116
 	end
104
 end
117
 end

Loading…
İptal
Kaydet