Remove all trailing whitespace
[prosody.git] / plugins / mod_auth_internal_plain.lua
1 -- Prosody IM
2 -- Copyright (C) 2008-2010 Matthew Wild
3 -- Copyright (C) 2008-2010 Waqas Hussain
4 --
5 -- This project is MIT/X11 licensed. Please see the
6 -- COPYING file in the source package for more information.
7 --
8
9 local usermanager = require "core.usermanager";
10 local new_sasl = require "util.sasl".new;
11
12 local log = module._log;
13 local host = module.host;
14
15 local accounts = module:open_store("accounts");
16
17 -- define auth provider
18 local provider = {};
19 log("debug", "initializing internal_plain authentication provider for host '%s'", host);
20
21 function provider.test_password(username, password)
22         log("debug", "test password for user %s at host %s", username, host);
23         local credentials = accounts:get(username) or {};
24
25         if password == credentials.password then
26                 return true;
27         else
28                 return nil, "Auth failed. Invalid username or password.";
29         end
30 end
31
32 function provider.get_password(username)
33         log("debug", "get_password for username '%s' at host '%s'", username, host);
34         return (accounts:get(username) or {}).password;
35 end
36
37 function provider.set_password(username, password)
38         local account = accounts:get(username);
39         if account then
40                 account.password = password;
41                 return accounts:set(username, account);
42         end
43         return nil, "Account not available.";
44 end
45
46 function provider.user_exists(username)
47         local account = accounts:get(username);
48         if not account then
49                 log("debug", "account not found for username '%s' at host '%s'", username, host);
50                 return nil, "Auth failed. Invalid username";
51         end
52         return true;
53 end
54
55 function provider.users()
56         return accounts:users();
57 end
58
59 function provider.create_user(username, password)
60         return accounts:set(username, {password = password});
61 end
62
63 function provider.delete_user(username)
64         return accounts:set(username, nil);
65 end
66
67 function provider.get_sasl_handler()
68         local getpass_authentication_profile = {
69                 plain = function(sasl, username, realm)
70                         local password = usermanager.get_password(username, realm);
71                         if not password then
72                                 return "", nil;
73                         end
74                         return password, true;
75                 end
76         };
77         return new_sasl(host, getpass_authentication_profile);
78 end
79
80 module:provides("auth", provider);
81