From 136674425b54b191ecef0006d8460f84a4a67f35 Mon Sep 17 00:00:00 2001
From: Kim Alvefur <zash@zash.se>
Date: Sun, 16 Sep 2012 02:18:07 +0200
Subject: storagemanager: Add purge() for purging user data from all backends
 in use

---
 core/storagemanager.lua | 21 ++++++++++++++++++++-
 core/usermanager.lua    |  2 +-
 2 files changed, 21 insertions(+), 2 deletions(-)

(limited to 'core')

diff --git a/core/storagemanager.lua b/core/storagemanager.lua
index 1b76a394..a9759b6a 100644
--- a/core/storagemanager.lua
+++ b/core/storagemanager.lua
@@ -94,6 +94,25 @@ function open(host, store, typ)
 	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 @@ function datamanager.list_stores(username, host)
 	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;
diff --git a/core/usermanager.lua b/core/usermanager.lua
index 2ca0aef1..0ed61f23 100644
--- a/core/usermanager.lua
+++ b/core/usermanager.lua
@@ -93,7 +93,7 @@ function delete_user(username, host)
 	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)
-- 
cgit v1.2.3


From 07bb8a42ce660684bbe4742aeefd5ea92092a37e Mon Sep 17 00:00:00 2001
From: Kim Alvefur <zash@zash.se>
Date: Mon, 17 Sep 2012 05:42:10 +0200
Subject: storagemanager, datamanager, mod_storage_{internal,sql}: Replace
 list_stores() with an iterator version

---
 core/storagemanager.lua | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'core')

diff --git a/core/storagemanager.lua b/core/storagemanager.lua
index a9759b6a..29cad2ff 100644
--- a/core/storagemanager.lua
+++ b/core/storagemanager.lua
@@ -119,8 +119,8 @@ end
 function datamanager.store(username, host, datastore, data)
 	return open(host, datastore):set(username, data);
 end
-function datamanager.list_stores(username, host)
-	return get_driver(host):list_stores(username);
+function datamanager.stores(username, host, typ)
+	return get_driver(host):stores(username, typ);
 end
 function datamanager.purge(username, host)
 	return purge(username);
-- 
cgit v1.2.3


From 6d61a3834d5dd59a2643c386236d5c33cd97fa32 Mon Sep 17 00:00:00 2001
From: Matthew Wild <mwild1@gmail.com>
Date: Wed, 19 Sep 2012 12:08:33 +0100
Subject: storagemanager: Remove usage of 'core' when calling
 configmanager.get()

---
 core/storagemanager.lua | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

(limited to 'core')

diff --git a/core/storagemanager.lua b/core/storagemanager.lua
index 29cad2ff..10d1a4bc 100644
--- a/core/storagemanager.lua
+++ b/core/storagemanager.lua
@@ -59,7 +59,7 @@ function load_driver(host, driver_name)
 end
 
 function get_driver(host, store)
-	local storage = config.get(host, "core", "storage");
+	local storage = config.get(host, "storage");
 	local driver_name;
 	local option_type = type(storage);
 	if option_type == "string" then
@@ -68,7 +68,7 @@ function get_driver(host, store)
 		driver_name = storage[store];
 	end
 	if not driver_name then
-		driver_name = config.get(host, "core", "default_storage") or "internal";
+		driver_name = config.get(host, "default_storage") or "internal";
 	end
 	
 	local driver = load_driver(host, driver_name);
@@ -95,7 +95,7 @@ function open(host, store, typ)
 end
 
 function purge(user, host)
-	local storage = config.get(host, "core", "storage");
+	local storage = config.get(host, "storage");
 	local driver_name;
 	if type(storage) == "table" then
 		-- multiple storage backends in use that we need to purge
-- 
cgit v1.2.3