Diff

core/sessionmanager.lua @ 38:3fdfd6e0cb4e

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 ))
author Matthew Wild <mwild1@gmail.com>
date Thu, 02 Oct 2008 01:08:58 +0100
parent 30:bcf539295f2d
child 40:2c0147bbd81a
line wrap: on
line diff
--- a/core/sessionmanager.lua	Thu Oct 02 00:00:35 2008 +0100
+++ b/core/sessionmanager.lua	Thu Oct 02 01:08:58 2008 +0100
@@ -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 @@
 	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