Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

85 lines (70 sloc) 2.636 kb
-- Prosody IM
-- Copyright (C) 2008-2010 Matthew Wild
-- Copyright (C) 2008-2010 Waqas Hussain
--
-- This project is MIT/X11 licensed. Please see the
-- COPYING file in the source package for more information.
--
local datamanager = require "util.datamanager";
local usermanager = require "core.usermanager";
local new_sasl = require "util.sasl".new;
local nodeprep = require "util.encodings".stringprep.nodeprep;
local log = module._log;
function new_default_provider(host)
local provider = { name = "internal_plain" };
log("debug", "initializing internal_plain authentication provider for host '%s'", host);
function provider.test_password(username, password)
log("debug", "test password '%s' for user %s at host %s", password, username, module.host);
local credentials = datamanager.load(username, host, "accounts") or {};
if password == credentials.password then
return true;
else
return nil, "Auth failed. Invalid username or password.";
end
end
function provider.get_password(username)
log("debug", "get_password for username '%s' at host '%s'", username, module.host);
return (datamanager.load(username, host, "accounts") or {}).password;
end
function provider.set_password(username, password)
local account = datamanager.load(username, host, "accounts");
if account then
account.password = password;
return datamanager.store(username, host, "accounts", account);
end
return nil, "Account not available.";
end
function provider.user_exists(username)
local account = datamanager.load(username, host, "accounts");
if not account then
log("debug", "account not found for username '%s' at host '%s'", username, module.host);
return nil, "Auth failed. Invalid username";
end
return true;
end
function provider.create_user(username, password)
return datamanager.store(username, host, "accounts", {password = password});
end
function provider.delete_user(username)
return datamanager.store(username, host, "accounts", nil);
end
function provider.get_sasl_handler()
local getpass_authentication_profile = {
plain = function(sasl, username, realm)
local prepped_username = nodeprep(username);
if not prepped_username then
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(module.host, getpass_authentication_profile);
end
return provider;
end
module:add_item("auth-provider", new_default_provider(module.host));
Jump to Line
Something went wrong with that request. Please try again.