storagemanager: Add purge() for purging user data from all backends in use
authorKim Alvefur <zash@zash.se>
Sun, 16 Sep 2012 00:18:07 +0000 (02:18 +0200)
committerKim Alvefur <zash@zash.se>
Sun, 16 Sep 2012 00:18:07 +0000 (02:18 +0200)
core/storagemanager.lua
core/usermanager.lua

index 18e2e7f9925fea0517ba7cc69bd277af695c61dd..a9759b6a2e98b9b376257cb9f31786dbbfffa41f 100644 (file)
@@ -33,12 +33,12 @@ local stores_available = multitable.new();
 
 function initialize_host(host)
        local host_session = hosts[host];
-       host_session.events.add_handler("item-added/storage-provider", function (event)
+       host_session.events.add_handler("item-added/data-driver", function (event)
                local item = event.item;
                stores_available:set(host, item.name, item);
        end);
        
-       host_session.events.add_handler("item-removed/storage-provider", function (event)
+       host_session.events.add_handler("item-removed/data-driver", function (event)
                local item = event.item;
                stores_available:set(host, item.name, nil);
        end);
@@ -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;
index 2ca0aef16a5057aa746f19d65b50aad48eed8e8d..0ed61f230de785e1b31e219d064cae884233f61c 100644 (file)
@@ -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)