Mercurial > prosody-hg
comparison plugins/mod_auth_internal_hashed.lua @ 3197:f1db45e89317
Merge trunk/MattJ->trunk
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Mon, 07 Jun 2010 12:21:57 +0100 |
| parents | d686abb6b069 |
| children | 7a15cbf23c5b 2dcd826bbbc6 |
comparison
equal
deleted
inserted
replaced
| 3196:d35b181a895a | 3197:f1db45e89317 |
|---|---|
| 16 local jid_bare = require "util.jid".bare; | 16 local jid_bare = require "util.jid".bare; |
| 17 local saltedPasswordSHA1 = require "util.sasl.scram".saltedPasswordSHA1; | 17 local saltedPasswordSHA1 = require "util.sasl.scram".saltedPasswordSHA1; |
| 18 local config = require "core.configmanager"; | 18 local config = require "core.configmanager"; |
| 19 local usermanager = require "core.usermanager"; | 19 local usermanager = require "core.usermanager"; |
| 20 local generate_uuid = require "util.uuid".generate; | 20 local generate_uuid = require "util.uuid".generate; |
| 21 local new_sasl = require "util.sasl".new; | |
| 22 local nodeprep = require "util.encodings".stringprep.nodeprep; | |
| 21 local hosts = hosts; | 23 local hosts = hosts; |
| 22 | 24 |
| 23 local prosody = _G.prosody; | 25 local prosody = _G.prosody; |
| 24 | 26 |
| 25 local is_cyrus = usermanager.is_cyrus; | 27 local is_cyrus = usermanager.is_cyrus; |
| 103 local valid, binpass = saltedPasswordSHA1(password, salt, iteration_count); | 105 local valid, binpass = saltedPasswordSHA1(password, salt, iteration_count); |
| 104 local hexpass = binpass:gsub(".", function (c) return ("%02x"):format(c:byte()); end); | 106 local hexpass = binpass:gsub(".", function (c) return ("%02x"):format(c:byte()); end); |
| 105 return datamanager.store(username, host, "accounts", {hashpass = hexpass, salt = salt, iteration_count = iteration_count}); | 107 return datamanager.store(username, host, "accounts", {hashpass = hexpass, salt = salt, iteration_count = iteration_count}); |
| 106 end | 108 end |
| 107 | 109 |
| 108 function provider.get_supported_methods() | 110 function provider.get_sasl_handler() |
| 109 return {["PLAIN"] = true}; -- TODO this should be taken from the config | 111 local realm = module:get_option("sasl_realm") or module.host; |
| 112 local testpass_authentication_profile = { | |
| 113 plain_test = function(username, password, realm) | |
| 114 local prepped_username = nodeprep(username); | |
| 115 if not prepped_username then | |
| 116 log("debug", "NODEprep failed on username: %s", username); | |
| 117 return "", nil; | |
| 118 end | |
| 119 return usermanager.test_password(prepped_username, password, realm), true; | |
| 120 end, | |
| 121 scram_sha_1 = function(username, realm) | |
| 122 local credentials = datamanager.load(username, host, "accounts") or {}; | |
| 123 if credentials.password then | |
| 124 usermanager.set_password(username, credentials.password); | |
| 125 credentials = datamanager.load(username, host, "accounts") or {}; | |
| 126 end | |
| 127 local salted_password, iteration_count, salt = credentials.hashpass, credentials.iteration_count, credentials.salt; | |
| 128 salted_password = salted_password and salted_password:gsub("..", function(x) return string.char(tonumber(x, 16)); end); | |
| 129 return salted_password, iteration_count, salt, true; | |
| 130 end | |
| 131 }; | |
| 132 return new_sasl(realm, testpass_authentication_profile); | |
| 110 end | 133 end |
| 111 | 134 |
| 112 function provider.is_admin(jid) | 135 function provider.is_admin(jid) |
| 113 local admins = config.get(host, "core", "admins"); | 136 local admins = config.get(host, "core", "admins"); |
| 114 if admins ~= config.get("*", "core", "admins") and type(admins) == "table" then | 137 if admins ~= config.get("*", "core", "admins") and type(admins) == "table" then |
