mod_register: Fix typo
[prosody.git] / core / storagemanager.lua
index b72b84db138967a7280dbcb10733242959848006..c312cf057bcd8bc3390f2193d13d85f7a1fe157c 100644 (file)
@@ -57,8 +57,28 @@ local function load_driver(host, driver_name)
        return stores_available:get(host, driver_name);
 end
 
+local function get_storage_config(host)
+       -- COMPAT w/ unreleased Prosody 0.10 and the once-experimental mod_storage_sql2 in peoples' config files
+       local storage_config = config.get(host, "storage");
+       local found_sql2;
+       if storage_config == "sql2" then
+               storage_config, found_sql2 = "sql", true;
+       elseif type(storage_config) == "table" then
+               for store_name, driver_name in pairs(storage_config) do
+                       if driver_name == "sql2" then
+                               storage_config[store_name] = "sql";
+                               found_sql2 = true;
+                       end
+               end
+       end
+       if found_sql2 then
+               log("error", "The temporary 'sql2' storage module has now been renamed to 'sql', please update your config file: https://prosody.im/doc/modules/mod_storage_sql2");
+       end
+       return storage_config;
+end
+
 local function get_driver(host, store)
-       local storage = config.get(host, "storage");
+       local storage = get_storage_config(host);
        local driver_name;
        local option_type = type(storage);
        if option_type == "string" then
@@ -94,13 +114,18 @@ local function open(host, store, typ)
 end
 
 local function purge(user, host)
-       local storage = config.get(host, "storage");
+       local storage = get_storage_config(host);
        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);
+               for store, driver_name in pairs(storage) do
+                       if not purged[driver_name] then
+                               local driver = get_driver(host, store);
+                               if driver.purge then
+                                       purged[driver_name] = driver:purge(user);
+                               else
+                                       log("warn", "Storage driver %s does not support removing all user data, you may need to delete it manually", driver_name);
+                               end
                        end
                end
        end
@@ -136,6 +161,7 @@ return {
        load_driver = load_driver;
        get_driver = get_driver;
        open = open;
+       purge = purge;
 
        olddm = olddm;
 };