Annotate

plugins/mod_storage_memory.lua @ 10446:5c2d1b13537c

util.stanza: Support the 'by' attribute on errors This is to be used when the entity generating the error is not the same as the one the stanza was directed to, e.g. an intermediate server.
author Kim Alvefur <zash@zash.se>
date Mon, 25 Nov 2019 20:59:36 +0100
parent 10222:51f145094648
child 10839:018acdaf374f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9293
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1 local serialize = require "util.serialization".serialize;
9535
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
2 local array = require "util.array";
9293
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3 local envload = require "util.envload".envload;
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4 local st = require "util.stanza";
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5 local is_stanza = st.is_stanza or function (s) return getmetatable(s) == st.stanza_mt end
9838
40ed04014b97 mod_storage_memory: Generate ID using standard util (fixes #1326)
Kim Alvefur <zash@zash.se>
parents: 9832
diff changeset
6 local new_id = require "util.id".medium;
9293
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8 local auto_purge_enabled = module:get_option_boolean("storage_memory_temporary", false);
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9 local auto_purge_stores = module:get_option_set("storage_memory_temporary_stores", {});
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10
9887
69f810014853 mod_storage_memory: Add support for archive item limits
Kim Alvefur <zash@zash.se>
parents: 9882
diff changeset
11 local archive_item_limit = module:get_option_number("storage_archive_item_limit", 1000);
69f810014853 mod_storage_memory: Add support for archive item limits
Kim Alvefur <zash@zash.se>
parents: 9882
diff changeset
12
9293
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
13 local memory = setmetatable({}, {
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
14 __index = function(t, k)
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
15 local store = module:shared(k)
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
16 t[k] = store;
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
17 return store;
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
18 end
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
19 });
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
20
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
21 local function NULL() return nil end
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
22
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
23 local function _purge_store(self, username)
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
24 self.store[username or NULL] = nil;
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
25 return true;
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
26 end
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
27
9881
68faa0c1a99c mod_storage_memory: Implement :user iteration API
Kim Alvefur <zash@zash.se>
parents: 9838
diff changeset
28 local function _users(self)
68faa0c1a99c mod_storage_memory: Implement :user iteration API
Kim Alvefur <zash@zash.se>
parents: 9838
diff changeset
29 return next, self.store, nil;
68faa0c1a99c mod_storage_memory: Implement :user iteration API
Kim Alvefur <zash@zash.se>
parents: 9838
diff changeset
30 end
68faa0c1a99c mod_storage_memory: Implement :user iteration API
Kim Alvefur <zash@zash.se>
parents: 9838
diff changeset
31
9293
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
32 local keyval_store = {};
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
33 keyval_store.__index = keyval_store;
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
34
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
35 function keyval_store:get(username)
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
36 return (self.store[username or NULL] or NULL)();
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
37 end
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
38
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
39 function keyval_store:set(username, data)
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
40 if data ~= nil then
9468
bd5e4485a245 mod_storage_memory: Switch from '@' prefix to '=' for chunks, '@' is used to indicate a source file name only
Matthew Wild <mwild1@gmail.com>
parents: 9340
diff changeset
41 data = envload("return "..serialize(data), "=(data)", {});
9293
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
42 end
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
43 self.store[username or NULL] = data;
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
44 return true;
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
45 end
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
46
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
47 keyval_store.purge = _purge_store;
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
48
9881
68faa0c1a99c mod_storage_memory: Implement :user iteration API
Kim Alvefur <zash@zash.se>
parents: 9838
diff changeset
49 keyval_store.users = _users;
68faa0c1a99c mod_storage_memory: Implement :user iteration API
Kim Alvefur <zash@zash.se>
parents: 9838
diff changeset
50
9293
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
51 local archive_store = {};
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
52 archive_store.__index = archive_store;
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
53
9881
68faa0c1a99c mod_storage_memory: Implement :user iteration API
Kim Alvefur <zash@zash.se>
parents: 9838
diff changeset
54 archive_store.users = _users;
68faa0c1a99c mod_storage_memory: Implement :user iteration API
Kim Alvefur <zash@zash.se>
parents: 9838
diff changeset
55
9887
69f810014853 mod_storage_memory: Add support for archive item limits
Kim Alvefur <zash@zash.se>
parents: 9882
diff changeset
56 archive_store.caps = {
69f810014853 mod_storage_memory: Add support for archive item limits
Kim Alvefur <zash@zash.se>
parents: 9882
diff changeset
57 total = true;
69f810014853 mod_storage_memory: Add support for archive item limits
Kim Alvefur <zash@zash.se>
parents: 9882
diff changeset
58 quota = archive_item_limit;
69f810014853 mod_storage_memory: Add support for archive item limits
Kim Alvefur <zash@zash.se>
parents: 9882
diff changeset
59 truncate = true;
69f810014853 mod_storage_memory: Add support for archive item limits
Kim Alvefur <zash@zash.se>
parents: 9882
diff changeset
60 };
69f810014853 mod_storage_memory: Add support for archive item limits
Kim Alvefur <zash@zash.se>
parents: 9882
diff changeset
61
9293
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
62 function archive_store:append(username, key, value, when, with)
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
63 if is_stanza(value) then
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
64 value = st.preserialize(value);
9468
bd5e4485a245 mod_storage_memory: Switch from '@' prefix to '=' for chunks, '@' is used to indicate a source file name only
Matthew Wild <mwild1@gmail.com>
parents: 9340
diff changeset
65 value = envload("return xml"..serialize(value), "=(stanza)", { xml = st.deserialize })
9293
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
66 else
9468
bd5e4485a245 mod_storage_memory: Switch from '@' prefix to '=' for chunks, '@' is used to indicate a source file name only
Matthew Wild <mwild1@gmail.com>
parents: 9340
diff changeset
67 value = envload("return "..serialize(value), "=(data)", {});
9293
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
68 end
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
69 local a = self.store[username or NULL];
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
70 if not a then
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
71 a = {};
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
72 self.store[username or NULL] = a;
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
73 end
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
74 local v = { key = key, when = when, with = with, value = value };
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
75 if not key then
9838
40ed04014b97 mod_storage_memory: Generate ID using standard util (fixes #1326)
Kim Alvefur <zash@zash.se>
parents: 9832
diff changeset
76 key = new_id();
9293
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
77 v.key = key;
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
78 end
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
79 if a[key] then
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
80 table.remove(a, a[key]);
9887
69f810014853 mod_storage_memory: Add support for archive item limits
Kim Alvefur <zash@zash.se>
parents: 9882
diff changeset
81 elseif #a >= archive_item_limit then
69f810014853 mod_storage_memory: Add support for archive item limits
Kim Alvefur <zash@zash.se>
parents: 9882
diff changeset
82 return nil, "quota-limit";
9293
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
83 end
9534
b301f7edf346 mod_storage_memory: Fix overwriting old keys
Kim Alvefur <zash@zash.se>
parents: 9533
diff changeset
84 local i = #a+1;
9293
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
85 a[i] = v;
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
86 a[key] = i;
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
87 return key;
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
88 end
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
89
9832
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
90 function archive_store:find(username, query)
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
91 local items = self.store[username or NULL];
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
92 if not items then
9997
7c4631d7b6fb mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents: 9906
diff changeset
93 if query then
10023
f6959fe81a1d mod_storage_memory: Return correct error even if no archive data available
Kim Alvefur <zash@zash.se>
parents: 10019
diff changeset
94 if query.before or query.after then
f6959fe81a1d mod_storage_memory: Return correct error even if no archive data available
Kim Alvefur <zash@zash.se>
parents: 10019
diff changeset
95 return nil, "item-not-found";
f6959fe81a1d mod_storage_memory: Return correct error even if no archive data available
Kim Alvefur <zash@zash.se>
parents: 10019
diff changeset
96 end
9997
7c4631d7b6fb mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents: 9906
diff changeset
97 if query.total then
7c4631d7b6fb mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents: 9906
diff changeset
98 return function () end, 0;
7c4631d7b6fb mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents: 9906
diff changeset
99 end
7c4631d7b6fb mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents: 9906
diff changeset
100 end
7c4631d7b6fb mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents: 9906
diff changeset
101 return function () end;
9832
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
102 end
9997
7c4631d7b6fb mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents: 9906
diff changeset
103 local count = nil;
9832
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
104 local i = 0;
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
105 if query then
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
106 items = array():append(items);
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
107 if query.key then
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
108 items:filter(function (item)
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
109 return item.key == query.key;
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
110 end);
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
111 end
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
112 if query.with then
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
113 items:filter(function (item)
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
114 return item.with == query.with;
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
115 end);
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
116 end
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
117 if query.start then
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
118 items:filter(function (item)
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
119 return item.when >= query.start;
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
120 end);
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
121 end
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
122 if query["end"] then
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
123 items:filter(function (item)
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
124 return item.when <= query["end"];
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
125 end);
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
126 end
9997
7c4631d7b6fb mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents: 9906
diff changeset
127 if query.total then
7c4631d7b6fb mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents: 9906
diff changeset
128 count = #items;
7c4631d7b6fb mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents: 9906
diff changeset
129 end
9832
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
130 if query.reverse then
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
131 items:reverse();
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
132 if query.before then
10019
c30c81176752 mod_storage_memory: Return error if 'before' or 'after' are not found (partial fix for #1325)
Kim Alvefur <zash@zash.se>
parents: 9997
diff changeset
133 local found = false;
9997
7c4631d7b6fb mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents: 9906
diff changeset
134 for j = 1, #items do
9832
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
135 if (items[j].key or tostring(j)) == query.before then
10019
c30c81176752 mod_storage_memory: Return error if 'before' or 'after' are not found (partial fix for #1325)
Kim Alvefur <zash@zash.se>
parents: 9997
diff changeset
136 found = true;
9832
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
137 i = j;
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
138 break;
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
139 end
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
140 end
10019
c30c81176752 mod_storage_memory: Return error if 'before' or 'after' are not found (partial fix for #1325)
Kim Alvefur <zash@zash.se>
parents: 9997
diff changeset
141 if not found then
c30c81176752 mod_storage_memory: Return error if 'before' or 'after' are not found (partial fix for #1325)
Kim Alvefur <zash@zash.se>
parents: 9997
diff changeset
142 return nil, "item-not-found";
c30c81176752 mod_storage_memory: Return error if 'before' or 'after' are not found (partial fix for #1325)
Kim Alvefur <zash@zash.se>
parents: 9997
diff changeset
143 end
9832
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
144 end
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
145 elseif query.after then
10019
c30c81176752 mod_storage_memory: Return error if 'before' or 'after' are not found (partial fix for #1325)
Kim Alvefur <zash@zash.se>
parents: 9997
diff changeset
146 local found = false;
9997
7c4631d7b6fb mod_storage_internal,memory: Only return total count if requested
Kim Alvefur <zash@zash.se>
parents: 9906
diff changeset
147 for j = 1, #items do
9832
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
148 if (items[j].key or tostring(j)) == query.after then
10019
c30c81176752 mod_storage_memory: Return error if 'before' or 'after' are not found (partial fix for #1325)
Kim Alvefur <zash@zash.se>
parents: 9997
diff changeset
149 found = true;
9832
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
150 i = j;
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
151 break;
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
152 end
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
153 end
10019
c30c81176752 mod_storage_memory: Return error if 'before' or 'after' are not found (partial fix for #1325)
Kim Alvefur <zash@zash.se>
parents: 9997
diff changeset
154 if not found then
c30c81176752 mod_storage_memory: Return error if 'before' or 'after' are not found (partial fix for #1325)
Kim Alvefur <zash@zash.se>
parents: 9997
diff changeset
155 return nil, "item-not-found";
c30c81176752 mod_storage_memory: Return error if 'before' or 'after' are not found (partial fix for #1325)
Kim Alvefur <zash@zash.se>
parents: 9997
diff changeset
156 end
9832
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
157 end
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
158 if query.limit and #items - i > query.limit then
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
159 items[i+query.limit+1] = nil;
9293
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
160 end
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
161 end
9832
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
162 return function ()
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
163 i = i + 1;
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
164 local item = items[i];
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
165 if not item then return; end
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
166 return item.key, item.value(), item.when, item.with;
96d9c121547b mod_storage_memory: Replace query function with one based on storage_internal (fixes #1322)
Kim Alvefur <zash@zash.se>
parents: 9609
diff changeset
167 end, count;
9293
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
168 end
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
169
9906
d0b58bdd6c86 mod_storage_memory: Fix copypaste mistake
Kim Alvefur <zash@zash.se>
parents: 9905
diff changeset
170 function archive_store:summary(username, query)
9905
6d50efaee148 mod_storage_memory: Implement archive summary API
Kim Alvefur <zash@zash.se>
parents: 9887
diff changeset
171 local iter, err = self:find(username, query)
6d50efaee148 mod_storage_memory: Implement archive summary API
Kim Alvefur <zash@zash.se>
parents: 9887
diff changeset
172 if not iter then return iter, err; end
10220
1e2b444acb72 mod_storage_*: Tweak :summary API to allow future expansion with more fields
Kim Alvefur <zash@zash.se>
parents: 10023
diff changeset
173 local counts = {};
10222
51f145094648 mod_storage_*: Also include timestmap of first message in :summary API
Kim Alvefur <zash@zash.se>
parents: 10221
diff changeset
174 local earliest = {};
10221
068692cb9e78 mod_storage_*: Include timestamp of latest message in :summary API
Kim Alvefur <zash@zash.se>
parents: 10220
diff changeset
175 local latest = {};
068692cb9e78 mod_storage_*: Include timestamp of latest message in :summary API
Kim Alvefur <zash@zash.se>
parents: 10220
diff changeset
176 for _, _, when, with in iter do
10220
1e2b444acb72 mod_storage_*: Tweak :summary API to allow future expansion with more fields
Kim Alvefur <zash@zash.se>
parents: 10023
diff changeset
177 counts[with] = (counts[with] or 0) + 1;
10222
51f145094648 mod_storage_*: Also include timestmap of first message in :summary API
Kim Alvefur <zash@zash.se>
parents: 10221
diff changeset
178 if earliest[with] == nil then
51f145094648 mod_storage_*: Also include timestmap of first message in :summary API
Kim Alvefur <zash@zash.se>
parents: 10221
diff changeset
179 earliest[with] = when;
51f145094648 mod_storage_*: Also include timestmap of first message in :summary API
Kim Alvefur <zash@zash.se>
parents: 10221
diff changeset
180 end
10221
068692cb9e78 mod_storage_*: Include timestamp of latest message in :summary API
Kim Alvefur <zash@zash.se>
parents: 10220
diff changeset
181 latest[with] = when;
9905
6d50efaee148 mod_storage_memory: Implement archive summary API
Kim Alvefur <zash@zash.se>
parents: 9887
diff changeset
182 end
10220
1e2b444acb72 mod_storage_*: Tweak :summary API to allow future expansion with more fields
Kim Alvefur <zash@zash.se>
parents: 10023
diff changeset
183 return {
1e2b444acb72 mod_storage_*: Tweak :summary API to allow future expansion with more fields
Kim Alvefur <zash@zash.se>
parents: 10023
diff changeset
184 counts = counts;
10222
51f145094648 mod_storage_*: Also include timestmap of first message in :summary API
Kim Alvefur <zash@zash.se>
parents: 10221
diff changeset
185 earliest = earliest;
10221
068692cb9e78 mod_storage_*: Include timestamp of latest message in :summary API
Kim Alvefur <zash@zash.se>
parents: 10220
diff changeset
186 latest = latest;
10220
1e2b444acb72 mod_storage_*: Tweak :summary API to allow future expansion with more fields
Kim Alvefur <zash@zash.se>
parents: 10023
diff changeset
187 };
9905
6d50efaee148 mod_storage_memory: Implement archive summary API
Kim Alvefur <zash@zash.se>
parents: 9887
diff changeset
188 end
6d50efaee148 mod_storage_memory: Implement archive summary API
Kim Alvefur <zash@zash.se>
parents: 9887
diff changeset
189
9293
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
190
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
191 function archive_store:delete(username, query)
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
192 if not query or next(query) == nil then
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
193 self.store[username or NULL] = nil;
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
194 return true;
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
195 end
9535
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
196 local items = self.store[username or NULL];
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
197 if not items then
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
198 -- Store is empty
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
199 return 0;
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
200 end
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
201 items = array(items);
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
202 local count_before = #items;
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
203 if query then
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
204 if query.key then
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
205 items:filter(function (item)
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
206 return item.key ~= query.key;
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
207 end);
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
208 end
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
209 if query.with then
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
210 items:filter(function (item)
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
211 return item.with ~= query.with;
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
212 end);
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
213 end
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
214 if query.start then
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
215 items:filter(function (item)
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
216 return item.when < query.start;
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
217 end);
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
218 end
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
219 if query["end"] then
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
220 items:filter(function (item)
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
221 return item.when > query["end"];
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
222 end);
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
223 end
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
224 if query.truncate and #items > query.truncate then
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
225 if query.reverse then
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
226 -- Before: { 1, 2, 3, 4, 5, }
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
227 -- After: { 1, 2, 3 }
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
228 for i = #items, query.truncate + 1, -1 do
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
229 items[i] = nil;
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
230 end
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
231 else
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
232 -- Before: { 1, 2, 3, 4, 5, }
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
233 -- After: { 3, 4, 5 }
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
234 local offset = #items - query.truncate;
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
235 for i = 1, #items do
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
236 items[i] = items[i+offset];
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
237 end
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
238 end
9293
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
239 end
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
240 end
9535
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
241 local count = count_before - #items;
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
242 if count == 0 then
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
243 return 0; -- No changes, skip write
9293
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
244 end
9535
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
245 setmetatable(items, nil);
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
246
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
247 do -- re-index by key
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
248 for k in pairs(items) do
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
249 if type(k) == "string" then
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
250 items[k] = nil;
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
251 end
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
252 end
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
253
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
254 for i = 1, #items do
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
255 items[ items[i].key ] = i;
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
256 end
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
257 end
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
258
c1befd1c886d mod_storage_memory: Adapt archive deletion code from mod_storage_internal
Kim Alvefur <zash@zash.se>
parents: 9534
diff changeset
259 return count;
9293
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
260 end
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
261
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
262 archive_store.purge = _purge_store;
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
263
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
264 local stores = {
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
265 keyval = keyval_store;
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
266 archive = archive_store;
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
267 }
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
268
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
269 local driver = {};
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
270
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
271 function driver:open(store, typ) -- luacheck: ignore 212/self
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
272 local store_mt = stores[typ or "keyval"];
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
273 if store_mt then
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
274 return setmetatable({ store = memory[store] }, store_mt);
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
275 end
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
276 return nil, "unsupported-store";
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
277 end
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
278
9609
1dfcea523200 mod_storage_memory: Support the purge driver method
Kim Alvefur <zash@zash.se>
parents: 9535
diff changeset
279 function driver:purge(user) -- luacheck: ignore 212/self
1dfcea523200 mod_storage_memory: Support the purge driver method
Kim Alvefur <zash@zash.se>
parents: 9535
diff changeset
280 for _, store in pairs(memory) do
1dfcea523200 mod_storage_memory: Support the purge driver method
Kim Alvefur <zash@zash.se>
parents: 9535
diff changeset
281 store[user] = nil;
1dfcea523200 mod_storage_memory: Support the purge driver method
Kim Alvefur <zash@zash.se>
parents: 9535
diff changeset
282 end
1dfcea523200 mod_storage_memory: Support the purge driver method
Kim Alvefur <zash@zash.se>
parents: 9535
diff changeset
283 end
1dfcea523200 mod_storage_memory: Support the purge driver method
Kim Alvefur <zash@zash.se>
parents: 9535
diff changeset
284
9293
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
285 if auto_purge_enabled then
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
286 module:hook("resource-unbind", function (event)
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
287 local user_bare_jid = event.session.username.."@"..event.session.host;
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
288 if not prosody.bare_sessions[user_bare_jid] then -- User went offline
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
289 module:log("debug", "Clearing store for offline user %s", user_bare_jid);
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
290 local f, s, v;
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
291 if auto_purge_stores:empty() then
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
292 f, s, v = pairs(memory);
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
293 else
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
294 f, s, v = auto_purge_stores:items();
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
295 end
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
296
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
297 for store_name in f, s, v do
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
298 if memory[store_name] then
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
299 memory[store_name][event.session.username] = nil;
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
300 end
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
301 end
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
302 end
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
303 end);
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
304 end
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
305
0a751835627d mod_storage_memory: Import from prosody-modules 4c3230c22c18
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
306 module:provides("storage", driver);