changeset 398:fdd4f5ab029a

mod_auth_sql: Cleanup.
author Waqas Hussain <waqas20@gmail.com>
date Wed, 10 Aug 2011 04:42:50 +0500
parents 7331e2669f24
children 4e0d36941ba1
files mod_auth_sql/mod_auth_sql.lua
diffstat 1 files changed, 49 insertions(+), 89 deletions(-) [+]
line wrap: on
line diff
--- a/mod_auth_sql/mod_auth_sql.lua	Fri Jul 29 22:39:58 2011 +0200
+++ b/mod_auth_sql/mod_auth_sql.lua	Wed Aug 10 04:42:50 2011 +0500
@@ -5,8 +5,8 @@
 local log = require "util.logger".init("auth_sql");
 local new_sasl = require "util.sasl".new;
 local nodeprep = require "util.encodings".stringprep.nodeprep;
+local DBI = require "DBI"
 
-local DBI;
 local connection;
 local params = module:get_option("sql");
 
@@ -42,8 +42,6 @@
 end
 
 do -- process options to get a db connection
-	DBI = require "DBI";
-
 	params = params or { driver = "SQLite3" };
 	
 	if params.driver == "SQLite3" then
@@ -72,102 +70,64 @@
 	return stmt;
 end
 
-function new_default_provider(host)
-	local provider = { name = "sql" };
-	module:log("debug", "initializing default authentication provider for host '%s'", host);
 
-	function provider.test_password(username, password)
-		module:log("debug", "test_password '%s' for user %s at host %s", password, username, host);
-
-		local stmt, err = getsql("SELECT `username` FROM `authreg` WHERE `username`=? AND `password`=? AND `realm`=?",
-			username, password, host);
-
-		if stmt ~= nil then
-			local count = 0;
-			for row in stmt:rows(true) do
-				count = count + 1;
-			end
-			if count > 0 then
-				return true;
-			end
-		else
-			module:log("error", "QUERY ERROR: %s %s", err, debug.traceback());
-			return nil, err;
-		end
+provider = { name = "sql" };
 
-		return false;
-	end
-
-	function provider.get_password(username)
-		module:log("debug", "get_password for username '%s' at host '%s'", username, host);
-
-		local stmt, err = getsql("SELECT `password` FROM `authreg` WHERE `username`=? AND `realm`=?",
-			username, host);
+function provider.test_password(username, password)
+	local stmt, err = getsql("SELECT `username` FROM `authreg` WHERE `username`=? AND `password`=? AND `realm`=?",
+		username, password, module.host);
 
-		local password = nil;
-		if stmt ~= nil then
-			for row in stmt:rows(true) do
-				password = row.password;
-			end
-		else
-			module:log("error", "QUERY ERROR: %s %s", err, debug.traceback());
-			return nil;
-		end
+	if not stmt then return nil, err; end
 
-		return password;
-	end
-
-	function provider.set_password(username, password)
-		return nil, "Setting password is not supported.";
+	for row in stmt:rows(true) do
+		return true;
 	end
-
-	function provider.user_exists(username)
-		module:log("debug", "test user %s existence at host %s", username, host);
-
-		local stmt, err = getsql("SELECT `username` FROM `authreg` WHERE `username`=? AND `realm`=?",
-			username, host);
+end
 
-		if stmt ~= nil then
-			local count = 0;
-			for row in stmt:rows(true) do
-				count = count + 1;
-			end
-			if count > 0 then
-				return true;
-			end
-		else
-			module:log("error", "QUERY ERROR: %s %s", err, debug.traceback());
-			return nil, err;
-		end
+function provider.get_password(username)
+	local stmt, err = getsql("SELECT `password` FROM `authreg` WHERE `username`=? AND `realm`=?",
+		username, module.host);
 
-		return false;
-	end
+	if not stmt then return nil, err; end
 
-	function provider.create_user(username, password)
-		return nil, "Account creation/modification not supported.";
+	for row in stmt:rows(true) do
+		return row.password;
 	end
+end
 
-	function provider.get_sasl_handler()
-		local realm = module:get_option("sasl_realm") or host;
-		local getpass_authentication_profile = {
-			plain = function(sasl, username, realm)
-				local prepped_username = nodeprep(username);
-				if not prepped_username then
-					module:log("debug", "NODEprep failed on username: %s", username);
-					return "", nil;
-				end
-				local password = usermanager.get_password(prepped_username, realm);
-				if not password then
-					return "", nil;
-				end
-				return password, true;
-			end
-		};
-		return new_sasl(realm, getpass_authentication_profile);
-	end
-
-	return provider;
+function provider.set_password(username, password)
+	return nil, "Setting password is not supported.";
 end
 
-module:add_item("auth-provider", new_default_provider(module.host));
+function provider.user_exists(username)
+	local stmt, err = getsql("SELECT `username` FROM `authreg` WHERE `username`=? AND `realm`=?",
+		username, module.host);
+
+	if not stmt then return nil, err; end
+
+	for row in stmt:rows(true) do
+		return true;
+	end
+end
+
+function provider.create_user(username, password)
+	return nil, "Account creation/modification not supported.";
+end
 
+function provider.get_sasl_handler()
+	local profile = {
+		plain = function(sasl, username, realm)
+			local prepped_username = nodeprep(username);
+			if not prepped_username then
+				module:log("debug", "NODEprep failed on username: %s", username);
+				return "", nil;
+			end
+			local password = provider.get_password(prepped_username);
+			if not password then return "", nil; end
+			return password, true;
+		end
+	};
+	return new_sasl(module.host, profile);
+end
+
+module:add_item("auth-provider", provider);