Mercurial > prosody-modules
comparison mod_sasl2/mod_sasl2.lua @ 6008: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 |
| parents | 2597e2113561 |
| children | 23c4c61a1068 |
comparison
equal
deleted
inserted
replaced
| 6007:9b50ee822638 | 6008: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); |
