Changeset

5129:e8253c931166

storagemanager: Add purge() for purging user data from all backends in use
author Kim Alvefur <zash@zash.se>
date Sun, 16 Sep 2012 02:18:07 +0200
parents 5128:834ab74585ec
children 5130:051d352ed03c
files core/storagemanager.lua core/usermanager.lua
diffstat 2 files changed, 21 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/core/storagemanager.lua	Sat Sep 15 23:00:59 2012 +0200
+++ b/core/storagemanager.lua	Sun Sep 16 02:18:07 2012 +0200
@@ -94,6 +94,25 @@
 	return ret, err;
 end
 
+function purge(user, host)
+	local storage = config.get(host, "core", "storage");
+	local driver_name;
+	if type(storage) == "table" then
+		-- multiple storage backends in use that we need to purge
+		local purged = {};
+		for store, driver in pairs(storage) do
+			if not purged[driver] then
+				purged[driver] = get_driver(host, store):purge(user);
+			end
+		end
+	end
+	get_driver(host):purge(user); -- and the default driver
+
+	olddm.purge(user, host); -- COMPAT list stores, like offline messages end up in the old datamanager
+
+	return true;
+end
+
 function datamanager.load(username, host, datastore)
 	return open(host, datastore):get(username);
 end
@@ -104,7 +123,7 @@
 	return get_driver(host):list_stores(username);
 end
 function datamanager.purge(username, host)
-	return get_driver(host):purge(username);
+	return purge(username);
 end
 
 return _M;
--- a/core/usermanager.lua	Sat Sep 15 23:00:59 2012 +0200
+++ b/core/usermanager.lua	Sun Sep 16 02:18:07 2012 +0200
@@ -93,7 +93,7 @@
 	local ok, err = hosts[host].users.delete_user(username);
 	if not ok then return nil, err; end
 	prosody.events.fire_event("user-deleted", { username = username, host = host });
-	return storagemanager.get_driver(host):purge(username);
+	return storagemanager.purge(username, host);
 end
 
 function get_sasl_handler(host, session)