Software /
code /
prosody-modules
Comparison
mod_sasl2/mod_sasl2.lua @ 6056:56fa3bad16cc
mod_sasl2/mod_sasl2.lua: rollback until fixed
author | Menel <menel@snikket.de> |
---|---|
date | Tue, 19 Nov 2024 10:44:00 +0100 |
parent | 6055:23c4c61a1068 |
child | 6136:8da64ecdbcaa |
comparison
equal
deleted
inserted
replaced
6055:23c4c61a1068 | 6056:56fa3bad16cc |
---|---|
153 local ok, err = sm_make_authenticated(session, session.sasl_handler.username); | 153 local ok, err = sm_make_authenticated(session, session.sasl_handler.username); |
154 if not ok then | 154 if not ok then |
155 handle_status(session, "failure", err); | 155 handle_status(session, "failure", err); |
156 return true; | 156 return true; |
157 end | 157 end |
158 local tasks = module:fire_event("sasl2/c2s/tasks", { session = session }) | 158 event.success = st.stanza("success", { xmlns = xmlns_sasl2 }); |
159 if tasks then | 159 if event.message then |
160 local continue = st.stanza("continue", { xmlns = xmlns_sasl2 }); | 160 event.success:text_tag("additional-data", base64.encode(event.message)); |
161 if event.message then | |
162 continue:text_tag("additional-data", base64.encode(event.message)); | |
163 end | |
164 if tasks.text then | |
165 continue:text_tag("text", tasks.text) | |
166 end | |
167 continue:tag("tasks"); | |
168 for task in pairs(tasks.tasks) do | |
169 continue:text_tag("task", task) | |
170 end | |
171 session.tasks = tasks.tasks; | |
172 session.send(continue); | |
173 return true; | |
174 else | |
175 event.success = st.stanza("success", { xmlns = xmlns_sasl2 }); | |
176 if event.message then | |
177 event.success:text_tag("additional-data", base64.encode(event.message)); | |
178 end | |
179 end | 161 end |
180 end, 1000); | 162 end, 1000); |
181 | |
182 module:hook("sasl2/c2s/tasks", function(event) | |
183 if event.session.tested then | |
184 return; | |
185 end | |
186 | |
187 return { tasks = { TEST = function(session, el) | |
188 local data = st.stanza("task-data", { xmlns = xmlns_sasl2 }); | |
189 local count = tonumber(el:get_child_text("test", "test") or "0"); | |
190 if count >= 10000 then | |
191 session.tested = true | |
192 module:fire_event("sasl2/"..session.base_type.."/success", { | |
193 session = session, | |
194 }); | |
195 else | |
196 data:text_tag("test", tostring(count + 1), { xmlns = "test" }) | |
197 session.send(data); | |
198 end | |
199 end }, text = "Need to test this" }; | |
200 end); | |
201 | 163 |
202 module:hook("sasl2/c2s/success", function (event) | 164 module:hook("sasl2/c2s/success", function (event) |
203 local session = event.session | 165 local session = event.session |
204 event.success:text_tag("authorization-identifier", jid_join(session.username, session.host, session.resource)); | 166 event.success:text_tag("authorization-identifier", jid_join(session.username, session.host, session.resource)); |
205 session.send(event.success); | 167 session.send(event.success); |
262 if not sasl_handler or not sasl_handler.selected then | 224 if not sasl_handler or not sasl_handler.selected then |
263 return handle_status(session, "failure", "invalid-mechanism"); | 225 return handle_status(session, "failure", "invalid-mechanism"); |
264 end | 226 end |
265 return process_cdata(session, response:get_text()); | 227 return process_cdata(session, response:get_text()); |
266 end); | 228 end); |
267 | |
268 module:hook_tag(xmlns_sasl2, "next", function (session, next) | |
269 if not session.tasks or not next.attr.task or not session.tasks[next.attr.task] then | |
270 return handle_status(session, "failure", "invalid-mechanism"); | |
271 end | |
272 | |
273 session.task = session.tasks[next.attr.task]; | |
274 session.tasks = nil; | |
275 session.task(session, next); | |
276 return true; | |
277 end); | |
278 | |
279 module:hook_tag(xmlns_sasl2, "task-data", function (session, data) | |
280 if not session.task then | |
281 return handle_status(session, "failure", "invalid-mechanism"); | |
282 end | |
283 | |
284 session.task(session, data); | |
285 return true; | |
286 end); |