mod_httpserver: Rename to mod_http_files
[prosody.git] / plugins / mod_auth_internal_hashed.lua
index c9b8107ba011f3ddeda5fa2c0c2f24c5195902e4..399044aded8bac6b067df0c65679add0ecd9d74a 100644 (file)
@@ -54,7 +54,7 @@ local iteration_count = 4096;
 
 function new_hashpass_provider(host)
        local provider = { name = "internal_hashed" };
-       log("debug", "initializing hashpass authentication provider for host '%s'", host);
+       log("debug", "initializing internal_hashed authentication provider for host '%s'", host);
 
        function provider.test_password(username, password)
                local credentials = datamanager.load(username, host, "accounts") or {};
@@ -125,6 +125,9 @@ function new_hashpass_provider(host)
        end
 
        function provider.create_user(username, password)
+               if password == nil then
+                       return datamanager.store(username, host, "accounts", {});
+               end
                local salt = generate_uuid();
                local valid, stored_key, server_key = getAuthenticationDatabaseSHA1(password, salt, iteration_count);
                local stored_key_hex = to_hex(stored_key);
@@ -132,18 +135,21 @@ function new_hashpass_provider(host)
                return datamanager.store(username, host, "accounts", {stored_key = stored_key_hex, server_key = server_key_hex, salt = salt, iteration_count = iteration_count});
        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 testpass_authentication_profile = {
-                       plain_test = function(username, password, realm)
+                       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, password, realm), true;
+                               return usermanager.test_password(prepped_username, realm, password), true;
                        end,
-                       scram_sha_1 = function(username, realm)
+                       scram_sha_1 = function(sasl, username, realm)
                                local credentials = datamanager.load(username, host, "accounts");
                                if not credentials then return; end
                                if credentials.password then
@@ -168,7 +174,7 @@ function new_hashpass_provider(host)
                                return stored_key, server_key, iteration_count, salt, true;
                        end
                };
-               return new_sasl(realm, testpass_authentication_profile);
+               return new_sasl(module.host, testpass_authentication_profile);
        end
        
        return provider;