Annotate

mod_storage_metronome_readonly/mod_storage_metronome_readonly.lua @ 6344:eb834f754f57 draft default tip

Merge update
author Trần H. Trung <xmpp:trần.h.trung@trung.fun>
date Fri, 18 Jul 2025 20:45:38 +0700
parent 6174:877416deacfa
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6147
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
1 local datamanager = require "prosody.core.storagemanager".olddm;
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
2 local datetime = require "prosody.util.datetime";
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
3 local st = require "prosody.util.stanza";
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
4 local now = require "prosody.util.time".now;
6169
dcd16e349a7a mod_storage_metronome_readonly: Fix luacheck warnings
Link Mauve <linkmauve@linkmauve.fr>
parents: 6166
diff changeset
5 local gen_id = require "prosody.util.id".medium;
6147
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
6 local set = require "prosody.util.set";
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
7 local envloadfile = require"prosody.util.envload".envloadfile;
6170
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
8 local dir = require "lfs".dir;
6147
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
9
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
10 local host = module.host;
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
11
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
12 local archive_item_limit = module:get_option_integer("storage_archive_item_limit", 10000, 0);
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
13
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
14 -- Metronome doesn’t store the item publish time, so fallback to the migration time.
6169
dcd16e349a7a mod_storage_metronome_readonly: Fix luacheck warnings
Link Mauve <linkmauve@linkmauve.fr>
parents: 6166
diff changeset
15 local time_now = math.floor(now());
6147
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
16
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
17 local function encode (s)
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
18 return s and (s:gsub("%W", function (c) return string.format("%%%02x", c:byte()); end));
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
19 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
20
6165
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
21 local file = io.open("/etc/mime.types");
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
22 local mimes = {};
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
23 while true do
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
24 local line = file:read("*l");
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
25 if not line then
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
26 break;
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
27 end
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
28 if line ~= "" then
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
29 local first_char = line:sub(1, 1);
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
30 if first_char ~= "#" then
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
31 --local line:match("(%S+)%s+"));
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
32 local match = line:gmatch("%S+");
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
33 local mime = match();
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
34 for ext in match do
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
35 mimes[ext] = mime;
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
36 end
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
37 end
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
38 end
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
39 end
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
40 file:close();
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
41
6147
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
42 local driver = {};
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
43
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
44 function driver:open(store, typ)
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
45 local mt = self[typ or "keyval"]
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
46 if not mt then
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
47 return nil, "unsupported-store";
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
48 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
49 return setmetatable({ store = store, type = typ }, mt);
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
50 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
51
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
52 function driver:stores(username) -- luacheck: ignore 212/self
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
53 if username == true then
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
54 local nodes = set.new();
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
55 for user in datamanager.users(host, "pep") do
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
56 local data = datamanager.load(user, host, "pep");
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
57
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
58 for _, node in ipairs(data["nodes"]) do
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
59 nodes:add("pep_" .. node);
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
60 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
61 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
62 return function()
6169
dcd16e349a7a mod_storage_metronome_readonly: Fix luacheck warnings
Link Mauve <linkmauve@linkmauve.fr>
parents: 6166
diff changeset
63 -- luacheck: ignore 512
6147
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
64 for node in nodes do
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
65 nodes:remove(node);
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
66 return node;
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
67 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
68 end;
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
69 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
70 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
71
6169
dcd16e349a7a mod_storage_metronome_readonly: Fix luacheck warnings
Link Mauve <linkmauve@linkmauve.fr>
parents: 6166
diff changeset
72 function driver:purge(user) -- luacheck: ignore 212/self user
6147
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
73 return nil, "unsupported-store";
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
74 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
75
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
76 local keyval = { };
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
77 driver.keyval = { __index = keyval };
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
78
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
79 function keyval:get(user)
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
80 if self.store == "pep" then
6169
dcd16e349a7a mod_storage_metronome_readonly: Fix luacheck warnings
Link Mauve <linkmauve@linkmauve.fr>
parents: 6166
diff changeset
81 local ret = datamanager.load(user, host, self.store);
dcd16e349a7a mod_storage_metronome_readonly: Fix luacheck warnings
Link Mauve <linkmauve@linkmauve.fr>
parents: 6166
diff changeset
82 local nodes = ret["nodes"];
6147
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
83 local result = {};
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
84
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
85 local pep_base_path = datamanager.getpath(user, host, self.store):sub(1, -5);
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
86
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
87 for _, node in ipairs(nodes) do
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
88 local path = ("%s/%s.dat"):format(pep_base_path, encode(node));
6169
dcd16e349a7a mod_storage_metronome_readonly: Fix luacheck warnings
Link Mauve <linkmauve@linkmauve.fr>
parents: 6166
diff changeset
89 local get_data = envloadfile(path, {});
dcd16e349a7a mod_storage_metronome_readonly: Fix luacheck warnings
Link Mauve <linkmauve@linkmauve.fr>
parents: 6166
diff changeset
90 if not get_data then
dcd16e349a7a mod_storage_metronome_readonly: Fix luacheck warnings
Link Mauve <linkmauve@linkmauve.fr>
parents: 6166
diff changeset
91 module:log("error", "Failed to load metronome storage");
6147
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
92 return nil, "Error reading storage";
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
93 end
6169
dcd16e349a7a mod_storage_metronome_readonly: Fix luacheck warnings
Link Mauve <linkmauve@linkmauve.fr>
parents: 6166
diff changeset
94 local success, data = pcall(get_data);
6147
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
95 if not success then
6169
dcd16e349a7a mod_storage_metronome_readonly: Fix luacheck warnings
Link Mauve <linkmauve@linkmauve.fr>
parents: 6166
diff changeset
96 module:log("error", "Unable to load metronome storage");
6147
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
97 return nil, "Error reading storage";
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
98 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
99 local new_node = {};
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
100 new_node["name"] = node;
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
101 new_node["subscribers"] = data["subscribers"];
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
102 new_node["affiliations"] = data["affiliations"];
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
103 new_node["config"] = data["config"];
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
104 result[node] = new_node;
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
105 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
106 return result;
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
107 elseif self.store == "cloud_notify" then
6169
dcd16e349a7a mod_storage_metronome_readonly: Fix luacheck warnings
Link Mauve <linkmauve@linkmauve.fr>
parents: 6166
diff changeset
108 local ret = datamanager.load(user, host, "push");
6147
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
109 local result = {};
6169
dcd16e349a7a mod_storage_metronome_readonly: Fix luacheck warnings
Link Mauve <linkmauve@linkmauve.fr>
parents: 6166
diff changeset
110 for jid, data in pairs(ret) do
6147
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
111 local secret = data["secret"];
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
112 for node in pairs(data["nodes"]) do
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
113 -- TODO: Does Metronome store more info than that?
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
114 local options;
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
115 if secret then
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
116 options = st.preserialize(st.stanza("x", { xmlns = "jabber:x:data", type = "submit" })
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
117 :tag("field", { var = "FORM_TYPE" })
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
118 :text_tag("value", "http://jabber.org/protocol/pubsub#publish-options")
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
119 :up()
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
120 :tag("field", { var = "secret" })
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
121 :text_tag("value", secret));
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
122 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
123 result[jid.."<"..node] = {
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
124 jid = jid,
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
125 node = node,
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
126 options = options,
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
127 };
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
128 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
129 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
130 return result;
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
131 elseif self.store == "roster" then
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
132 return datamanager.load(user, host, self.store);
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
133 elseif self.store == "vcard" then
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
134 return datamanager.load(user, host, self.store);
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
135 elseif self.store == "private" then
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
136 return datamanager.load(user, host, self.store);
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
137
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
138 -- After that, handle MUC specific stuff, not tested yet whatsoever.
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
139 elseif self.store == "persistent" then
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
140 return datamanager.load(user, host, self.store);
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
141 elseif self.store == "config" then
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
142 return datamanager.load(user, host, self.store);
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
143 elseif self.store == "vcard_muc" then
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
144 local data = datamanager.load(user, host, "room_icons");
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
145 return data and data["photo"];
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
146 else
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
147 return nil, "unsupported-store";
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
148 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
149 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
150
6169
dcd16e349a7a mod_storage_metronome_readonly: Fix luacheck warnings
Link Mauve <linkmauve@linkmauve.fr>
parents: 6166
diff changeset
151 function keyval:set(user, data) -- luacheck: ignore 212/self user data
6147
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
152 return nil, "unsupported-store";
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
153 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
154
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
155 function keyval:users()
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
156 local store;
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
157 if self.store == "vcard_muc" then
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
158 store = "room_icons";
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
159 elseif self.store == "cloud_notify" then
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
160 store = "push";
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
161 else
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
162 store = self.store;
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
163 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
164 return datamanager.users(host, store, self.type);
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
165 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
166
6172
983549664bd4 mod_storage_metronome_readonly: Fix wrongly done refactoring
Link Mauve <linkmauve@linkmauve.fr>
parents: 6171
diff changeset
167 local function parse_logs(logs, jid)
6170
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
168 local iter = ipairs(logs);
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
169 local i = 0;
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
170 local message;
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
171 return function()
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
172 i, message = iter(logs, i);
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
173 if not message then
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
174 return;
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
175 end
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
176
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
177 local with;
6171
44f77f4f653a mod_storage_metronome_readonly: Revert non-working is_muc hack, the correct with is "message<groupchat"
Link Mauve <linkmauve@linkmauve.fr>
parents: 6170
diff changeset
178 local bare_to = message["bare_to"];
44f77f4f653a mod_storage_metronome_readonly: Revert non-working is_muc hack, the correct with is "message<groupchat"
Link Mauve <linkmauve@linkmauve.fr>
parents: 6170
diff changeset
179 local bare_from = message["bare_from"];
44f77f4f653a mod_storage_metronome_readonly: Revert non-working is_muc hack, the correct with is "message<groupchat"
Link Mauve <linkmauve@linkmauve.fr>
parents: 6170
diff changeset
180 if jid == bare_to then
44f77f4f653a mod_storage_metronome_readonly: Revert non-working is_muc hack, the correct with is "message<groupchat"
Link Mauve <linkmauve@linkmauve.fr>
parents: 6170
diff changeset
181 -- received
44f77f4f653a mod_storage_metronome_readonly: Revert non-working is_muc hack, the correct with is "message<groupchat"
Link Mauve <linkmauve@linkmauve.fr>
parents: 6170
diff changeset
182 with = bare_from;
6170
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
183 else
6171
44f77f4f653a mod_storage_metronome_readonly: Revert non-working is_muc hack, the correct with is "message<groupchat"
Link Mauve <linkmauve@linkmauve.fr>
parents: 6170
diff changeset
184 -- sent
44f77f4f653a mod_storage_metronome_readonly: Revert non-working is_muc hack, the correct with is "message<groupchat"
Link Mauve <linkmauve@linkmauve.fr>
parents: 6170
diff changeset
185 with = bare_to;
6170
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
186 end
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
187
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
188 local to = message["to"];
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
189 local from = message["from"];
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
190 local id = message["id"];
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
191 local type = message["type"];
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
192
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
193 local key = message["uid"];
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
194 local when = message["timestamp"];
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
195 local item = st.message({ to = to, from = from, id = id, type = type }, message["body"]);
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
196 if message["tags"] then
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
197 for _, tag in ipairs(message["tags"]) do
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
198 setmetatable(tag, st.stanza_mt);
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
199 item:add_direct_child(tag);
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
200 end
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
201 end
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
202 if message["marker"] then
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
203 item:tag(message["marker"], { xmlns = "urn:xmpp:chat-markers:0", id = message["marker_id"] });
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
204 end
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
205 return key, item, when, with;
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
206 end;
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
207 end
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
208
6147
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
209 local archive = {};
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
210 driver.archive = { __index = archive };
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
211
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
212 archive.caps = {
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
213 total = true;
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
214 quota = archive_item_limit;
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
215 full_id_range = true;
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
216 ids = true;
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
217 };
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
218
6169
dcd16e349a7a mod_storage_metronome_readonly: Fix luacheck warnings
Link Mauve <linkmauve@linkmauve.fr>
parents: 6166
diff changeset
219 function archive:append(username, key, value, when, with) -- luacheck: ignore 212/self username key value when with
6147
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
220 return nil, "unsupported-store";
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
221 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
222
6169
dcd16e349a7a mod_storage_metronome_readonly: Fix luacheck warnings
Link Mauve <linkmauve@linkmauve.fr>
parents: 6166
diff changeset
223 function archive:find(username, query) -- luacheck: ignore 212/self query
6147
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
224 if self.store == "archive" then
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
225 local jid = username.."@"..host;
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
226 local data = datamanager.load(username, host, "archiving");
6172
983549664bd4 mod_storage_metronome_readonly: Fix wrongly done refactoring
Link Mauve <linkmauve@linkmauve.fr>
parents: 6171
diff changeset
227 return parse_logs(data["logs"], jid);
6147
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
228
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
229 elseif self.store:sub(1, 4) == "pep_" then
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
230 local node = self.store:sub(5);
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
231
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
232 local pep_base_path = datamanager.getpath(username, host, "pep"):sub(1, -5);
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
233 local path = ("%s/%s.dat"):format(pep_base_path, encode(node));
6169
dcd16e349a7a mod_storage_metronome_readonly: Fix luacheck warnings
Link Mauve <linkmauve@linkmauve.fr>
parents: 6166
diff changeset
234 local get_data = envloadfile(path, {});
dcd16e349a7a mod_storage_metronome_readonly: Fix luacheck warnings
Link Mauve <linkmauve@linkmauve.fr>
parents: 6166
diff changeset
235 if not get_data then
dcd16e349a7a mod_storage_metronome_readonly: Fix luacheck warnings
Link Mauve <linkmauve@linkmauve.fr>
parents: 6166
diff changeset
236 module:log("debug", "Failed to load metronome storage");
6147
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
237 return {};
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
238 end
6169
dcd16e349a7a mod_storage_metronome_readonly: Fix luacheck warnings
Link Mauve <linkmauve@linkmauve.fr>
parents: 6166
diff changeset
239 local success, data = pcall(get_data);
6147
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
240 if not success then
6169
dcd16e349a7a mod_storage_metronome_readonly: Fix luacheck warnings
Link Mauve <linkmauve@linkmauve.fr>
parents: 6166
diff changeset
241 module:log("error", "Unable to load metronome storage");
6147
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
242 return nil, "Error reading storage";
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
243 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
244
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
245 local iter = pairs(data["data"]);
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
246 local key = nil;
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
247 local payload;
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
248 return function()
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
249 key, payload = iter(data["data"], key);
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
250 if not key then
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
251 return;
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
252 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
253 local item = st.deserialize(payload[1]);
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
254 local with = data["data_author"][key];
6169
dcd16e349a7a mod_storage_metronome_readonly: Fix luacheck warnings
Link Mauve <linkmauve@linkmauve.fr>
parents: 6166
diff changeset
255 return key, item, time_now, with;
6147
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
256 end;
6170
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
257
6147
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
258 elseif self.store == "offline" then
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
259 -- This is mostly copy/pasted from mod_storage_internal.
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
260 local list, err = datamanager.list_open(username, host, self.store);
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
261 if not list then
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
262 if err then
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
263 return list, err;
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
264 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
265 return function()
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
266 end;
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
267 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
268
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
269 local i = 0;
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
270 local iter = function()
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
271 i = i + 1;
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
272 return list[i];
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
273 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
274
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
275 return function()
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
276 local item = iter();
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
277 if item == nil then
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
278 if list.close then
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
279 list:close();
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
280 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
281 return
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
282 end
6169
dcd16e349a7a mod_storage_metronome_readonly: Fix luacheck warnings
Link Mauve <linkmauve@linkmauve.fr>
parents: 6166
diff changeset
283 local key = gen_id();
6147
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
284 local when = item.attr and datetime.parse(item.attr.stamp);
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
285 local with = "";
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
286 item.key, item.when, item.with = nil, nil, nil;
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
287 item.attr.stamp = nil;
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
288 -- COMPAT Stored data may still contain legacy XEP-0091 timestamp
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
289 item.attr.stamp_legacy = nil;
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
290 item = st.deserialize(item);
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
291 return key, item, when, with;
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
292 end
6170
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
293
6165
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
294 elseif self.store == "uploads" then
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
295 local list = {};
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
296
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
297 for user in datamanager.users(host, "http_upload", "list") do
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
298 local data, err = datamanager.list_open(user, host, "http_upload");
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
299 if not data then
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
300 if err then
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
301 return data, err;
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
302 end
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
303 return function()
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
304 end;
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
305 end
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
306
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
307 for _, stuff in ipairs(data) do
6172
983549664bd4 mod_storage_metronome_readonly: Fix wrongly done refactoring
Link Mauve <linkmauve@linkmauve.fr>
parents: 6171
diff changeset
308 local key = stuff.dir;
6165
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
309 local size = tostring(stuff.size);
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
310 local time = stuff.time;
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
311 local filename = stuff.filename;
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
312 local ext = filename:match(".*%.(%S+)"):lower();
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
313 local mime = mimes[ext] or "application/octet-stream";
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
314 local stanza = st.stanza("request", { xmlns = "urn:xmpp:http:upload:0", size = size, ["content-type"] = mime, filename = filename })
6172
983549664bd4 mod_storage_metronome_readonly: Fix wrongly done refactoring
Link Mauve <linkmauve@linkmauve.fr>
parents: 6171
diff changeset
315 list[key] = {user.."@"..host, time, stanza};
6165
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
316 end
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
317 end
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
318
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
319 local iter = pairs(list);
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
320 local key = nil;
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
321 local payload;
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
322 return function()
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
323 key, payload = iter(list, key);
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
324 if not key then
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
325 return;
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
326 end
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
327 local with = payload[1];
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
328 local when = payload[2];
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
329 local stanza = payload[3];
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
330 return key, stanza, when, with;
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
331 end;
6170
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
332
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
333 elseif self.store == "muc_log" then
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
334 local base_path = datamanager.getpath("", host, "stanza_log"):sub(1, -5);
6174
877416deacfa mod_storage_metronome_readonly: Sort the days first before iterating on MUC MAM entries
Link Mauve <linkmauve@linkmauve.fr>
parents: 6172
diff changeset
335 local days = {};
877416deacfa mod_storage_metronome_readonly: Sort the days first before iterating on MUC MAM entries
Link Mauve <linkmauve@linkmauve.fr>
parents: 6172
diff changeset
336 for date in dir(base_path) do
877416deacfa mod_storage_metronome_readonly: Sort the days first before iterating on MUC MAM entries
Link Mauve <linkmauve@linkmauve.fr>
parents: 6172
diff changeset
337 if date ~= "." and date ~= ".." then
877416deacfa mod_storage_metronome_readonly: Sort the days first before iterating on MUC MAM entries
Link Mauve <linkmauve@linkmauve.fr>
parents: 6172
diff changeset
338 table.insert(days, date);
877416deacfa mod_storage_metronome_readonly: Sort the days first before iterating on MUC MAM entries
Link Mauve <linkmauve@linkmauve.fr>
parents: 6172
diff changeset
339 end
877416deacfa mod_storage_metronome_readonly: Sort the days first before iterating on MUC MAM entries
Link Mauve <linkmauve@linkmauve.fr>
parents: 6172
diff changeset
340 end
877416deacfa mod_storage_metronome_readonly: Sort the days first before iterating on MUC MAM entries
Link Mauve <linkmauve@linkmauve.fr>
parents: 6172
diff changeset
341 table.sort(days);
6170
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
342 local list = {};
6174
877416deacfa mod_storage_metronome_readonly: Sort the days first before iterating on MUC MAM entries
Link Mauve <linkmauve@linkmauve.fr>
parents: 6172
diff changeset
343 for _, date in ipairs(days) do
877416deacfa mod_storage_metronome_readonly: Sort the days first before iterating on MUC MAM entries
Link Mauve <linkmauve@linkmauve.fr>
parents: 6172
diff changeset
344 local path = base_path..date.."/"..encode(username)..".dat";
877416deacfa mod_storage_metronome_readonly: Sort the days first before iterating on MUC MAM entries
Link Mauve <linkmauve@linkmauve.fr>
parents: 6172
diff changeset
345 local get_data = envloadfile(path, {});
877416deacfa mod_storage_metronome_readonly: Sort the days first before iterating on MUC MAM entries
Link Mauve <linkmauve@linkmauve.fr>
parents: 6172
diff changeset
346 if get_data then
877416deacfa mod_storage_metronome_readonly: Sort the days first before iterating on MUC MAM entries
Link Mauve <linkmauve@linkmauve.fr>
parents: 6172
diff changeset
347 local success, data = pcall(get_data);
877416deacfa mod_storage_metronome_readonly: Sort the days first before iterating on MUC MAM entries
Link Mauve <linkmauve@linkmauve.fr>
parents: 6172
diff changeset
348 if not success then
877416deacfa mod_storage_metronome_readonly: Sort the days first before iterating on MUC MAM entries
Link Mauve <linkmauve@linkmauve.fr>
parents: 6172
diff changeset
349 module:log("error", "Unable to load metronome storage");
877416deacfa mod_storage_metronome_readonly: Sort the days first before iterating on MUC MAM entries
Link Mauve <linkmauve@linkmauve.fr>
parents: 6172
diff changeset
350 return nil, "Error reading storage";
877416deacfa mod_storage_metronome_readonly: Sort the days first before iterating on MUC MAM entries
Link Mauve <linkmauve@linkmauve.fr>
parents: 6172
diff changeset
351 end
877416deacfa mod_storage_metronome_readonly: Sort the days first before iterating on MUC MAM entries
Link Mauve <linkmauve@linkmauve.fr>
parents: 6172
diff changeset
352 for key, item, when in parse_logs(data) do
877416deacfa mod_storage_metronome_readonly: Sort the days first before iterating on MUC MAM entries
Link Mauve <linkmauve@linkmauve.fr>
parents: 6172
diff changeset
353 table.insert(list, {key, item, when});
6170
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
354 end
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
355 end
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
356 end
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
357
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
358 local i = 0;
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
359 local iter = function()
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
360 i = i + 1;
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
361 return list[i];
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
362 end
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
363
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
364 return function()
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
365 local item = iter();
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
366 if item == nil then
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
367 if list.close then
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
368 list:close();
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
369 end
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
370 return
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
371 end
6171
44f77f4f653a mod_storage_metronome_readonly: Revert non-working is_muc hack, the correct with is "message<groupchat"
Link Mauve <linkmauve@linkmauve.fr>
parents: 6170
diff changeset
372 return item[1], item[2], item[3], "message<groupchat"
6170
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
373 end
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
374
6147
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
375 else
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
376 return nil, "unsupported-store";
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
377 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
378 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
379
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
380 function archive:get(username, wanted_key)
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
381 local iter, err = self:find(username, { key = wanted_key })
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
382 if not iter then return iter, err; end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
383 for key, stanza, when, with in iter do
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
384 if key == wanted_key then
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
385 return stanza, when, with;
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
386 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
387 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
388 return nil, "item-not-found";
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
389 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
390
6169
dcd16e349a7a mod_storage_metronome_readonly: Fix luacheck warnings
Link Mauve <linkmauve@linkmauve.fr>
parents: 6166
diff changeset
391 function archive:set(username, key, new_value, new_when, new_with) -- luacheck: ignore 212/self username key new_value new_when new_with
6147
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
392 return nil, "unsupported-store";
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
393 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
394
6169
dcd16e349a7a mod_storage_metronome_readonly: Fix luacheck warnings
Link Mauve <linkmauve@linkmauve.fr>
parents: 6166
diff changeset
395 function archive:dates(username) -- luacheck: ignore 212/self username
6147
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
396 return nil, "unsupported-store";
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
397 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
398
6169
dcd16e349a7a mod_storage_metronome_readonly: Fix luacheck warnings
Link Mauve <linkmauve@linkmauve.fr>
parents: 6166
diff changeset
399 function archive:summary(username, query) -- luacheck: ignore 212/self username query
6147
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
400 return nil, "unsupported-store";
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
401 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
402
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
403 function archive:users()
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
404 if self.store == "archive" then
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
405 return datamanager.users(host, "archiving");
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
406 elseif self.store:sub(1, 4) == "pep_" then
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
407 local wanted_node = self.store:sub(5);
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
408 local iter, tbl = datamanager.users(host, "pep");
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
409 return function()
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
410 while true do
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
411 local user = iter(tbl);
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
412 if not user then
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
413 return;
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
414 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
415 local data = datamanager.load(user, host, "pep");
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
416 for _, node in ipairs(data["nodes"]) do
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
417 if node == wanted_node then
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
418 return user;
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
419 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
420 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
421 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
422 end;
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
423 elseif self.store == "offline" then
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
424 return datamanager.users(host, self.store, "list");
6165
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
425 elseif self.store == "uploads" then
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
426 local done = false;
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
427 return function()
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
428 if not done then
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
429 done = true;
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
430 return "";
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
431 end
11650fe276c0 mod_storage_metronome_readonly: Add support for migrating to mod_http_file_share
Link Mauve <linkmauve@linkmauve.fr>
parents: 6147
diff changeset
432 end;
6170
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
433 elseif self.store == "muc_log" then
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
434 local iter, tbl = pairs(datamanager.load(nil, host, "persistent"));
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
435 local jid = nil;
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
436 return function()
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
437 jid = iter(tbl, jid);
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
438 if not jid then
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
439 return;
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
440 end
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
441 local user = jid:gsub("@.*", "");
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
442 return user;
ec0e9d4f2275 mod_storage_metronome_readonly: Add support for mod_muc_mam storage
Link Mauve <linkmauve@linkmauve.fr>
parents: 6169
diff changeset
443 end;
6147
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
444 else
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
445 return nil, "unsupported-store";
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
446 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
447 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
448
6169
dcd16e349a7a mod_storage_metronome_readonly: Fix luacheck warnings
Link Mauve <linkmauve@linkmauve.fr>
parents: 6166
diff changeset
449 function archive:trim(username, to_when) -- luacheck: ignore 212/self username to_when
6147
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
450 return nil, "unsupported-store";
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
451 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
452
6169
dcd16e349a7a mod_storage_metronome_readonly: Fix luacheck warnings
Link Mauve <linkmauve@linkmauve.fr>
parents: 6166
diff changeset
453 function archive:delete(username, query) -- luacheck: ignore 212/self username query
6147
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
454 return nil, "unsupported-store";
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
455 end
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
456
6ba0489e4828 mod_storage_metronome_readonly: New module for migrating off Metronome
Link Mauve <linkmauve@linkmauve.fr>
parents:
diff changeset
457 module:provides("storage", driver);