diff options
author | Matthew Wild <mwild1@gmail.com> | 2008-10-02 01:08:58 +0100 |
---|---|---|
committer | Matthew Wild <mwild1@gmail.com> | 2008-10-02 01:08:58 +0100 |
commit | 6db3d039b3d8d55c9e03ebdc776cf1a23dd826c2 (patch) | |
tree | 2d39390e5a9289101ba6910992084f09647ccfeb /core/sessionmanager.lua | |
parent | f1cc4eb60fc94093602025044af230f10634efe4 (diff) | |
download | prosody-6db3d039b3d8d55c9e03ebdc776cf1a23dd826c2.tar.gz prosody-6db3d039b3d8d55c9e03ebdc776cf1a23dd826c2.zip |
SASL!
(but before you get too excited, no resource binding yet. And yes, there are still plenty of rough edges to the code...)
((eg. must move <stream:features> out of xmlhandlers.lua o_O ))
Diffstat (limited to 'core/sessionmanager.lua')
-rw-r--r-- | core/sessionmanager.lua | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/core/sessionmanager.lua b/core/sessionmanager.lua index 47f47ba9..e89de262 100644 --- a/core/sessionmanager.lua +++ b/core/sessionmanager.lua @@ -1,6 +1,10 @@ local tostring = tostring; +local print = print; + +local hosts = hosts; + local log = require "util.logger".init("sessionmanager"); module "sessionmanager" @@ -12,9 +16,42 @@ function new_session(conn) return session; end +function destroy_session(session) +end + function send_to_session(session, data) - log("debug", "Sending...", tostring(data)); + log("debug", "Sending: %s", tostring(data)); session.conn.write(tostring(data)); end +function make_authenticated(session, username) + session.username = username; + session.resource = resource; + if session.type == "c2s_unauthed" then + session.type = "c2s"; + end +end + +function bind_resource(session, resource) + if not session.username then return false, "auth"; end + if session.resource then return false, "constraint"; end -- We don't support binding multiple resources + resource = resource or math.random(100000, 99999999); -- FIXME: Clearly we have issues :) + --FIXME: Randomly-generated resources must be unique per-user, and never conflict with existing + + if not hosts[session.host].sessions[session.username] then + hosts[session.host].sessions[session.username] = { sessions = {} }; + else + if hosts[session.host].sessions[session.username].sessions[resource] then + -- Resource conflict + return false, "conflict"; + end + end + + session.resource = resource; + session.full_jid = session.username .. '@' .. session.host .. '/' .. resource; + hosts[session.host].sessions[session.username].sessions[resource] = session; + + return true; +end + return _M;
\ No newline at end of file |