Software /
code /
prosody-modules
Comparison
mod_sasl2/mod_sasl2.lua @ 6036:1ef53e0264f4
mod_sasl2: hook for modules to implement tasks
author | Stephen Paul Weber <singpolyma@singpolyma.net> |
---|---|
date | Fri, 01 Nov 2024 11:09:49 -0500 |
parent | 5913:2597e2113561 |
child | 6055:23c4c61a1068 |
comparison
equal
deleted
inserted
replaced
6035:9b50ee822638 | 6036:1ef53e0264f4 |
---|---|
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 event.success = st.stanza("success", { xmlns = xmlns_sasl2 }); | 158 local tasks = module:fire_event("sasl2/c2s/tasks", { session = session }) |
159 if event.message then | 159 if tasks then |
160 event.success:text_tag("additional-data", base64.encode(event.message)); | 160 local continue = st.stanza("continue", { xmlns = xmlns_sasl2 }); |
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 | |
161 end | 179 end |
162 end, 1000); | 180 end, 1000); |
163 | 181 |
164 module:hook("sasl2/c2s/success", function (event) | 182 module:hook("sasl2/c2s/success", function (event) |
165 local session = event.session | 183 local session = event.session |
224 if not sasl_handler or not sasl_handler.selected then | 242 if not sasl_handler or not sasl_handler.selected then |
225 return handle_status(session, "failure", "invalid-mechanism"); | 243 return handle_status(session, "failure", "invalid-mechanism"); |
226 end | 244 end |
227 return process_cdata(session, response:get_text()); | 245 return process_cdata(session, response:get_text()); |
228 end); | 246 end); |
247 | |
248 module:hook_tag(xmlns_sasl2, "next", function (session, next) | |
249 if not session.tasks or not next.attr.task or not session.tasks[next.attr.task] then | |
250 return handle_status(session, "failure", "invalid-mechanism"); | |
251 end | |
252 | |
253 session.task = session.tasks[next.attr.task]; | |
254 session.tasks = nil; | |
255 session.task(session, next); | |
256 return true; | |
257 end); | |
258 | |
259 module:hook_tag(xmlns_sasl2, "task-data", function (session, data) | |
260 if not session.task then | |
261 return handle_status(session, "failure", "invalid-mechanism"); | |
262 end | |
263 | |
264 session.task(session, data); | |
265 return true; | |
266 end); |