Mercurial > prosody-modules
changeset 816:960007b0901e
mod_auth_external, mod_auth_internal_yubikey: Get rid of useless wrapper function around the auth provider.
author | Waqas Hussain <waqas20@gmail.com> |
---|---|
date | Thu, 13 Sep 2012 00:17:42 +0500 |
parents | b16b291d68c3 |
children | f826b5935175 |
files | mod_auth_external/mod_auth_external.lua mod_auth_internal_yubikey/mod_auth_internal_yubikey.lua |
diffstat | 2 files changed, 109 insertions(+), 115 deletions(-) [+] |
line wrap: on
line diff
--- a/mod_auth_external/mod_auth_external.lua Wed Sep 12 19:15:45 2012 +0000 +++ b/mod_auth_external/mod_auth_external.lua Thu Sep 13 00:17:42 2012 +0500 @@ -93,53 +93,50 @@ end end -function new_external_provider(host) - local provider = {}; - - function provider.test_password(username, password) - return do_query("auth", username, password); - end +local host = module.host; +local provider = {}; - function provider.set_password(username, password) - return do_query("setpass", username, password); - end - - function provider.user_exists(username) - return do_query("isuser", username); - end +function provider.test_password(username, password) + return do_query("auth", username, password); +end - function provider.create_user(username, password) return nil, "Account creation/modification not available."; end - - function provider.get_sasl_handler() - local testpass_authentication_profile = { - plain_test = function(sasl, username, password, realm) - local prepped_username = nodeprep(username); - if not prepped_username then - log("debug", "NODEprep failed on username: %s", username); - return "", nil; - end - return usermanager.test_password(prepped_username, realm, password), true; - end, - }; - return new_sasl(module.host, testpass_authentication_profile); - end +function provider.set_password(username, password) + return do_query("setpass", username, password); +end - function provider.is_admin(jid) - local admins = config.get(host, "core", "admins"); - if admins ~= config.get("*", "core", "admins") then - if type(admins) == "table" then - jid = jid_bare(jid); - for _,admin in ipairs(admins) do - if admin == jid then return true; end - end - elseif admins then - log("error", "Option 'admins' for host '%s' is not a table", host); - end - end - return usermanager.is_admin(jid); -- Test whether it's a global admin instead - end - - return provider; +function provider.user_exists(username) + return do_query("isuser", username); end -module:provides("auth", new_external_provider(module.host)); +function provider.create_user(username, password) return nil, "Account creation/modification not available."; end + +function provider.get_sasl_handler() + local testpass_authentication_profile = { + plain_test = function(sasl, username, password, realm) + local prepped_username = nodeprep(username); + if not prepped_username then + log("debug", "NODEprep failed on username: %s", username); + return "", nil; + end + return usermanager.test_password(prepped_username, realm, password), true; + end, + }; + return new_sasl(host, testpass_authentication_profile); +end + +function provider.is_admin(jid) + local admins = config.get(host, "core", "admins"); + if admins ~= config.get("*", "core", "admins") then + if type(admins) == "table" then + jid = jid_bare(jid); + for _,admin in ipairs(admins) do + if admin == jid then return true; end + end + elseif admins then + log("error", "Option 'admins' for host '%s' is not a table", host); + end + end + return usermanager.is_admin(jid); -- Test whether it's a global admin instead +end + +module:provides("auth", provider);
--- a/mod_auth_internal_yubikey/mod_auth_internal_yubikey.lua Wed Sep 12 19:15:45 2012 +0000 +++ b/mod_auth_internal_yubikey/mod_auth_internal_yubikey.lua Thu Sep 13 00:17:42 2012 +0500 @@ -45,83 +45,80 @@ local global_yubikey_key = module:get_option_string("yubikey_key"); -function new_default_provider(host) - local provider = {}; - log("debug", "initializing default authentication provider for host '%s'", host); +local host = module.host; +local provider = {}; +log("debug", "initializing default 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); - function provider.test_password(username, password) - log("debug", "test password '%s' for user %s at host %s", password, username, module.host); - - local account_info = datamanager.load(username, host, "accounts") or {}; - local yubikey_key = account_info.yubikey_key or global_yubikey_key; - if account_info.yubikey_key then - log("debug", "Authenticating Yubikey OTP for %s", username); - local authed, err = yubikey:authenticate(password, account_info.yubikey_key, account_info.yubikey_state or {}, { account = account_info, username = username, host = host }); - if not authed then - log("debug", "Failed to authenticate %s via OTP: %s", username, err); - return authed, err; - end - return authed; - elseif account_info.password and password == account_info.password then - -- No yubikey configured for this user, treat as normal password - log("debug", "No yubikey configured for %s, successful login using password auth", username); - 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); + local account_info = datamanager.load(username, host, "accounts") or {}; + local yubikey_key = account_info.yubikey_key or global_yubikey_key; + if account_info.yubikey_key then + log("debug", "Authenticating Yubikey OTP for %s", username); + local authed, err = yubikey:authenticate(password, account_info.yubikey_key, account_info.yubikey_state or {}, { account = account_info, username = username, host = host }); + if not authed then + log("debug", "Failed to authenticate %s via OTP: %s", username, err); + return authed, err; 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 authed; + elseif account_info.password and password == account_info.password then + -- No yubikey configured for this user, treat as normal password + log("debug", "No yubikey configured for %s, successful login using password auth", username); 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); + else + return nil, "Auth failed. Invalid username or password."; end +end - function provider.get_sasl_handler() - local realm = module:get_option("sasl_realm") or module.host; - local getpass_authentication_profile = { - plain_test = function(sasl, username, password, realm) - local prepped_username = nodeprep(username); - if not prepped_username then - log("debug", "NODEprep failed on username: %s", username); - return false, nil; - end - - return usermanager.test_password(username, realm, password), true; - end - }; - return new_sasl(realm, getpass_authentication_profile); - end - - return provider; +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 -module:provides("auth", new_default_provider(module.host)); +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 realm = module:get_option("sasl_realm") or module.host; + local getpass_authentication_profile = { + plain_test = function(sasl, username, password, realm) + local prepped_username = nodeprep(username); + if not prepped_username then + log("debug", "NODEprep failed on username: %s", username); + return false, nil; + end + + return usermanager.test_password(username, realm, password), true; + end + }; + return new_sasl(realm, getpass_authentication_profile); +end + +module:provides("auth", provider); function module.command(arg) local command = arg[1];