2 -- Copyright (C) 2008-2010 Matthew Wild
3 -- Copyright (C) 2008-2010 Waqas Hussain
5 -- This project is MIT/X11 licensed. Please see the
6 -- COPYING file in the source package for more information.
9 local usermanager
= require
"core.usermanager";
10 local new_sasl
= require
"util.sasl".new
;
12 local log = module
._log
;
13 local host
= module
.host
;
15 local accounts
= module
:open_store("accounts");
17 -- define auth provider
20 function provider
.test_password(username
, password
)
21 log("debug", "test password for user '%s'", username
);
22 local credentials
= accounts
:get(username
) or {};
24 if password
== credentials
.password
then
27 return nil, "Auth failed. Invalid username or password.";
31 function provider
.get_password(username
)
32 log("debug", "get_password for username '%s'", username
);
33 return (accounts
:get(username
) or {}).password
;
36 function provider
.set_password(username
, password
)
37 log("debug", "set_password for username '%s'", username
);
38 local account
= accounts
:get(username
);
40 account
.password
= password
;
41 return accounts
:set(username
, account
);
43 return nil, "Account not available.";
46 function provider
.user_exists(username
)
47 local account
= accounts
:get(username
);
49 log("debug", "account not found for username '%s'", username
);
50 return nil, "Auth failed. Invalid username";
55 function provider
.users()
56 return accounts
:users();
59 function provider
.create_user(username
, password
)
60 return accounts
:set(username
, {password
= password
});
63 function provider
.delete_user(username
)
64 return accounts
:set(username
, nil);
67 function provider
.get_sasl_handler()
68 local getpass_authentication_profile
= {
69 plain
= function(_
, username
, realm
)
70 local password
= usermanager
.get_password(username
, realm
);
74 return password
, true;
77 return new_sasl(host
, getpass_authentication_profile
);
80 module
:provides("auth", provider
);