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);