diff options
author | Kim Alvefur <zash@zash.se> | 2012-09-21 17:23:08 +0200 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2012-09-21 17:23:08 +0200 |
commit | 196022f3f5e88c241fdf7fafe3affd2f8912036d (patch) | |
tree | 8711a9d40798237639afc7b74ef08995e698bd5e /util/datamanager.lua | |
parent | 7aca7b6303f614cb9e9330bf9e2d34c63a5b818a (diff) | |
download | prosody-196022f3f5e88c241fdf7fafe3affd2f8912036d.tar.gz prosody-196022f3f5e88c241fdf7fafe3affd2f8912036d.zip |
mod_storage_internal, datamanager: Add support for iterating over users with data in a store
Diffstat (limited to 'util/datamanager.lua')
-rw-r--r-- | util/datamanager.lua | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/util/datamanager.lua b/util/datamanager.lua index 9207f555..08d9d6af 100644 --- a/util/datamanager.lua +++ b/util/datamanager.lua @@ -282,6 +282,25 @@ local type_map = { 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) typ = type_map[typ or "keyval"]; local store_dir = format("%s/%s/", data_path, encode(host)); |