mirror of
https://github.com/bjc/prosody.git
synced 2025-04-04 21:57:45 +03:00
mod_storage_internal, datamanager: Add support for iterating over users with data in a store
This commit is contained in:
parent
7aca7b6303
commit
196022f3f5
2 changed files with 25 additions and 2 deletions
|
@ -5,8 +5,8 @@ local host = module.host;
|
||||||
local driver = {};
|
local driver = {};
|
||||||
local driver_mt = { __index = driver };
|
local driver_mt = { __index = driver };
|
||||||
|
|
||||||
function driver:open(store)
|
function driver:open(store, typ)
|
||||||
return setmetatable({ store = store }, driver_mt);
|
return setmetatable({ store = store, type = typ }, driver_mt);
|
||||||
end
|
end
|
||||||
function driver:get(user)
|
function driver:get(user)
|
||||||
return datamanager.load(user, host, self.store);
|
return datamanager.load(user, host, self.store);
|
||||||
|
@ -20,6 +20,10 @@ function driver:stores(username)
|
||||||
return datamanager.stores(username, host);
|
return datamanager.stores(username, host);
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function driver:users()
|
||||||
|
return datamanager.users(host, self.store, self.type);
|
||||||
|
end
|
||||||
|
|
||||||
function driver:purge(user)
|
function driver:purge(user)
|
||||||
return datamanager.purge(user, host);
|
return datamanager.purge(user, host);
|
||||||
end
|
end
|
||||||
|
|
|
@ -282,6 +282,25 @@ local type_map = {
|
||||||
list = "list";
|
list = "list";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function users(host, store, typ)
|
||||||
|
typ = type_map[typ or "keyval"];
|
||||||
|
local store_dir = format("%s/%s/%s", data_path, encode(host), encode(store));
|
||||||
|
|
||||||
|
local mode, err = lfs.attributes(store_dir, "mode");
|
||||||
|
if not mode then
|
||||||
|
return function() log("debug", err or (store_dir .. " does not exist")) end
|
||||||
|
end
|
||||||
|
local next, state = lfs.dir(store_dir);
|
||||||
|
return function(state)
|
||||||
|
for node in next, state do
|
||||||
|
local file, ext = node:match("^(.*)%.([dalist]+)$");
|
||||||
|
if file and ext == typ then
|
||||||
|
return decode(file);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end, state;
|
||||||
|
end
|
||||||
|
|
||||||
function stores(username, host, typ)
|
function stores(username, host, typ)
|
||||||
typ = type_map[typ or "keyval"];
|
typ = type_map[typ or "keyval"];
|
||||||
local store_dir = format("%s/%s/", data_path, encode(host));
|
local store_dir = format("%s/%s/", data_path, encode(host));
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue