Software / code / prosody-modules
Comparison
mod_bind2/mod_bind2.lua @ 4793:aaa6f412dce3
mod_bind2: Experimental implementation of XEP-0386: Bind 2.0
Needless to say, completely untested
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Sun, 28 Nov 2021 19:45:25 +0100 |
| child | 4794:d17a1581ea30 |
comparison
equal
deleted
inserted
replaced
| 4792:9d57aa79c5d9 | 4793:aaa6f412dce3 |
|---|---|
| 1 local mm = require "core.modulemanager"; | |
| 2 local sm = require "core.sessionmanager"; | |
| 3 | |
| 4 local xmlns_bind2 --[[<const>]] = "urn:xmpp:bind2:0"; | |
| 5 local xmlns_carbons --[[<const>]] = "urn:xmpp:carbons:2"; | |
| 6 | |
| 7 module:depends("sasl2"); | |
| 8 module:depends("carbons"); | |
| 9 | |
| 10 module:hook_tag(xmlns_sasl2, "authenticate", function (session, auth) | |
| 11 session.bind2 = auth:get_child("bind", xmlns_bind2); | |
| 12 end, 1); | |
| 13 | |
| 14 module:hook("sasl2/c2s/success", function (event) | |
| 15 local session = event.session; | |
| 16 if not session.bind2 then return end | |
| 17 | |
| 18 -- When it receives a bind 2.0 on an authenticated not-yet-bound session, the | |
| 19 -- server MUST: | |
| 20 | |
| 21 -- Clear the offline messages for this user, if any, without sending them (as | |
| 22 -- they will be provided by MAM). | |
| 23 if mm.is_loaded(module.host, "offline") then | |
| 24 -- TODO | |
| 25 end | |
| 26 | |
| 27 -- Perform resource binding to a random resource (see 6120) | |
| 28 if not sm.bind_resource(session, nil) then | |
| 29 -- FIXME How should this be handled even? | |
| 30 session:close("reset"); | |
| 31 return true; | |
| 32 end | |
| 33 | |
| 34 -- Work out which contacts have unread messages in the user's MAM archive, | |
| 35 -- how many, and what the id of the last read message is | |
| 36 -- XXX How do we know what the last read message was? | |
| 37 -- TODO archive:summary(session.username, { after = ??? }); | |
| 38 | |
| 39 -- Get the id of the newest stanza in the user's MAM archive | |
| 40 -- TODO archive:find(session.username, { reverse = true, limit = 1 }); | |
| 41 | |
| 42 -- Silently enable carbons for this session | |
| 43 session.carbons = xmlns_carbons; | |
| 44 | |
| 45 -- After processing the bind stanza, as above, the server MUST respond with | |
| 46 -- an element of type 'bound' in the namespace 'urn:xmpp:bind2:0', as in the | |
| 47 -- below example | |
| 48 event.success:tag("bound", xmlns_bind2):text_tag("jid", session.full_jid):up(); | |
| 49 | |
| 50 session.bind2 = nil; | |
| 51 end); |