13 local ipairs = ipairs; |
13 local ipairs = ipairs; |
14 local hashes = require "util.hashes"; |
14 local hashes = require "util.hashes"; |
15 local jid_bare = require "util.jid".bare; |
15 local jid_bare = require "util.jid".bare; |
16 local config = require "core.configmanager"; |
16 local config = require "core.configmanager"; |
17 local hosts = hosts; |
17 local hosts = hosts; |
|
18 |
|
19 local require_provisioning = config.get("*", "core", "cyrus_require_provisioning") or false; |
18 |
20 |
19 module "usermanager" |
21 module "usermanager" |
20 |
22 |
21 local function is_cyrus(host) return config.get(host, "core", "sasl_backend") == "cyrus"; end |
23 local function is_cyrus(host) return config.get(host, "core", "sasl_backend") == "cyrus"; end |
22 |
24 |
64 end |
66 end |
65 return nil, "Account not available."; |
67 return nil, "Account not available."; |
66 end |
68 end |
67 |
69 |
68 function user_exists(username, host) |
70 function user_exists(username, host) |
69 if is_cyrus(host) then return true; end |
71 if not(require_provisioning) and is_cyrus(host) then return true; end |
70 return datamanager.load(username, host, "accounts") ~= nil; -- FIXME also check for empty credentials |
72 return datamanager.load(username, host, "accounts") ~= nil; -- FIXME also check for empty credentials |
71 end |
73 end |
72 |
74 |
73 function create_user(username, password, host) |
75 function create_user(username, password, host) |
74 if is_cyrus(host) then return nil, "Account creation/modification not available with Cyrus SASL."; end |
76 if not(require_provisioning) and is_cyrus(host) then return nil, "Account creation/modification not available with Cyrus SASL."; end |
75 return datamanager.store(username, host, "accounts", {password = password}); |
77 return datamanager.store(username, host, "accounts", {password = password}); |
76 end |
78 end |
77 |
79 |
78 function get_supported_methods(host) |
80 function get_supported_methods(host) |
79 return {["PLAIN"] = true, ["DIGEST-MD5"] = true}; -- TODO this should be taken from the config |
81 return {["PLAIN"] = true, ["DIGEST-MD5"] = true}; -- TODO this should be taken from the config |