annotate mod_storage_memory/mod_storage_memory.lua @ 5608:1893ae742f66

mod_http_oauth2: Show errors on device flow user code entry page If the user enters the code incorrectly, having to click back to try again is no fun. Instead, show the error and the code entry form again.
author Kim Alvefur <zash@zash.se>
date Wed, 19 Jul 2023 13:05:47 +0200
parents bc745a60ce21
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2656
83fb61fa476e mod_storage_memory: Serialize data functions that return the data (prevents mutation of stored data)
Kim Alvefur <zash@zash.se>
parents: 2655
diff changeset
1 local serialize = require "util.serialization".serialize;
83fb61fa476e mod_storage_memory: Serialize data functions that return the data (prevents mutation of stored data)
Kim Alvefur <zash@zash.se>
parents: 2655
diff changeset
2 local envload = require "util.envload".envload;
83fb61fa476e mod_storage_memory: Serialize data functions that return the data (prevents mutation of stored data)
Kim Alvefur <zash@zash.se>
parents: 2655
diff changeset
3 local st = require "util.stanza";
83fb61fa476e mod_storage_memory: Serialize data functions that return the data (prevents mutation of stored data)
Kim Alvefur <zash@zash.se>
parents: 2655
diff changeset
4 local is_stanza = st.is_stanza or function (s) return getmetatable(s) == st.stanza_mt end
83fb61fa476e mod_storage_memory: Serialize data functions that return the data (prevents mutation of stored data)
Kim Alvefur <zash@zash.se>
parents: 2655
diff changeset
5
2620
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
6 local auto_purge_enabled = module:get_option_boolean("storage_memory_temporary", false);
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
7 local auto_purge_stores = module:get_option_set("storage_memory_temporary_stores", {});
1259
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
8
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
9 local memory = setmetatable({}, {
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
10 __index = function(t, k)
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
11 local store = module:shared(k)
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
12 t[k] = store;
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
13 return store;
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
14 end
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
15 });
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
16
2656
83fb61fa476e mod_storage_memory: Serialize data functions that return the data (prevents mutation of stored data)
Kim Alvefur <zash@zash.se>
parents: 2655
diff changeset
17 local function NULL() return nil end
2097
4454f124465a mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents: 1760
diff changeset
18
2619
1e4bbff0a6fd mod_storage_memory: Add :purge() method to all store types
Matthew Wild <mwild1@gmail.com>
parents: 2172
diff changeset
19 local function _purge_store(self, username)
1e4bbff0a6fd mod_storage_memory: Add :purge() method to all store types
Matthew Wild <mwild1@gmail.com>
parents: 2172
diff changeset
20 self.store[username or NULL] = nil;
1e4bbff0a6fd mod_storage_memory: Add :purge() method to all store types
Matthew Wild <mwild1@gmail.com>
parents: 2172
diff changeset
21 return true;
1e4bbff0a6fd mod_storage_memory: Add :purge() method to all store types
Matthew Wild <mwild1@gmail.com>
parents: 2172
diff changeset
22 end
1e4bbff0a6fd mod_storage_memory: Add :purge() method to all store types
Matthew Wild <mwild1@gmail.com>
parents: 2172
diff changeset
23
1259
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
24 local keyval_store = {};
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
25 keyval_store.__index = keyval_store;
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
26
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
27 function keyval_store:get(username)
2656
83fb61fa476e mod_storage_memory: Serialize data functions that return the data (prevents mutation of stored data)
Kim Alvefur <zash@zash.se>
parents: 2655
diff changeset
28 return (self.store[username or NULL] or NULL)();
1259
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
29 end
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
30
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
31 function keyval_store:set(username, data)
3091
8e5da12205b5 mod_storage_memory: Fix removal of data in keyvalue (thanks jonasw)
Kim Alvefur <zash@zash.se>
parents: 2803
diff changeset
32 if data ~= nil then
8e5da12205b5 mod_storage_memory: Fix removal of data in keyvalue (thanks jonasw)
Kim Alvefur <zash@zash.se>
parents: 2803
diff changeset
33 data = envload("return "..serialize(data), "@data", {});
8e5da12205b5 mod_storage_memory: Fix removal of data in keyvalue (thanks jonasw)
Kim Alvefur <zash@zash.se>
parents: 2803
diff changeset
34 end
8e5da12205b5 mod_storage_memory: Fix removal of data in keyvalue (thanks jonasw)
Kim Alvefur <zash@zash.se>
parents: 2803
diff changeset
35 self.store[username or NULL] = data;
1259
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
36 return true;
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
37 end
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
38
2619
1e4bbff0a6fd mod_storage_memory: Add :purge() method to all store types
Matthew Wild <mwild1@gmail.com>
parents: 2172
diff changeset
39 keyval_store.purge = _purge_store;
1e4bbff0a6fd mod_storage_memory: Add :purge() method to all store types
Matthew Wild <mwild1@gmail.com>
parents: 2172
diff changeset
40
1608
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
41 local archive_store = {};
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
42 archive_store.__index = archive_store;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
43
1753
54c8a0cb2996 mod_storage_(archive-capable): Change order of arguments to :append to be the same as return values from :find iterator (see prosody 41725f3df3cc)
Kim Alvefur <zash@zash.se>
parents: 1608
diff changeset
44 function archive_store:append(username, key, value, when, with)
54c8a0cb2996 mod_storage_(archive-capable): Change order of arguments to :append to be the same as return values from :find iterator (see prosody 41725f3df3cc)
Kim Alvefur <zash@zash.se>
parents: 1608
diff changeset
45 if type(when) ~= "number" then
1760
e72f9eac51c8 mod_storage_(various): Order swapping in 54c8a0cb2996 was backwards
Kim Alvefur <zash@zash.se>
parents: 1753
diff changeset
46 when, with, value = value, when, with;
1753
54c8a0cb2996 mod_storage_(archive-capable): Change order of arguments to :append to be the same as return values from :find iterator (see prosody 41725f3df3cc)
Kim Alvefur <zash@zash.se>
parents: 1608
diff changeset
47 end
2656
83fb61fa476e mod_storage_memory: Serialize data functions that return the data (prevents mutation of stored data)
Kim Alvefur <zash@zash.se>
parents: 2655
diff changeset
48 if is_stanza(value) then
83fb61fa476e mod_storage_memory: Serialize data functions that return the data (prevents mutation of stored data)
Kim Alvefur <zash@zash.se>
parents: 2655
diff changeset
49 value = st.preserialize(value);
2802
0d5d1ff96600 mod_storage_memory: Serialize stanzas on save (was delayed until query)
Kim Alvefur <zash@zash.se>
parents: 2673
diff changeset
50 value = envload("return xml"..serialize(value), "@stanza", { xml = st.deserialize })
2656
83fb61fa476e mod_storage_memory: Serialize data functions that return the data (prevents mutation of stored data)
Kim Alvefur <zash@zash.se>
parents: 2655
diff changeset
51 else
2673
2e1a4740adee mod_storage_memory: Include missing return statement (thanks jonasw)
Kim Alvefur <zash@zash.se>
parents: 2661
diff changeset
52 value = envload("return "..serialize(value), "@data", {});
2656
83fb61fa476e mod_storage_memory: Serialize data functions that return the data (prevents mutation of stored data)
Kim Alvefur <zash@zash.se>
parents: 2655
diff changeset
53 end
2097
4454f124465a mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents: 1760
diff changeset
54 local a = self.store[username or NULL];
1608
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
55 if not a then
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
56 a = {};
2097
4454f124465a mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents: 1760
diff changeset
57 self.store[username or NULL] = a;
1608
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
58 end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
59 local i = #a+1;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
60 local v = { key = key, when = when, with = with, value = value };
2803
9db18f909b84 mod_storage_memory: Allow archive items to be overwritten by id
Kim Alvefur <zash@zash.se>
parents: 2802
diff changeset
61 if not key then
1608
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
62 key = tostring(a):match"%x+$"..tostring(v):match"%x+$";
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
63 v.key = key;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
64 end
2803
9db18f909b84 mod_storage_memory: Allow archive items to be overwritten by id
Kim Alvefur <zash@zash.se>
parents: 2802
diff changeset
65 if a[key] then
9db18f909b84 mod_storage_memory: Allow archive items to be overwritten by id
Kim Alvefur <zash@zash.se>
parents: 2802
diff changeset
66 table.remove(a, a[key]);
9db18f909b84 mod_storage_memory: Allow archive items to be overwritten by id
Kim Alvefur <zash@zash.se>
parents: 2802
diff changeset
67 end
1608
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
68 a[i] = v;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
69 a[key] = i;
2654
9e5015555fff mod_storage_memory: Fix to make archive:append() return the archive id as it should
Kim Alvefur <zash@zash.se>
parents: 2620
diff changeset
70 return key;
1608
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
71 end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
72
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
73 local function archive_iter (a, start, stop, step, limit, when_start, when_end, match_with)
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
74 local item, when, with;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
75 local count = 0;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
76 coroutine.yield(true); -- Ready
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
77 for i = start, stop, step do
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
78 item = a[i];
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
79 when, with = item.when, item.with;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
80 if when >= when_start and when_end >= when and (not match_with or match_with == with) then
2656
83fb61fa476e mod_storage_memory: Serialize data functions that return the data (prevents mutation of stored data)
Kim Alvefur <zash@zash.se>
parents: 2655
diff changeset
81 coroutine.yield(item.key, item.value(), when, with);
1608
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
82 count = count + 1;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
83 if limit and count >= limit then return end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
84 end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
85 end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
86 end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
87
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
88 function archive_store:find(username, query)
2097
4454f124465a mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents: 1760
diff changeset
89 local a = self.store[username or NULL] or {};
1608
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
90 local start, stop, step = 1, #a, 1;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
91 local qstart, qend, qwith = -math.huge, math.huge;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
92 local limit;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
93 if query then
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
94 module:log("debug", "query included")
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
95 if query.reverse then
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
96 start, stop, step = stop, start, -1;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
97 if query.before then
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
98 start = a[query.before];
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
99 end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
100 elseif query.after then
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
101 start = a[query.after];
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
102 end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
103 limit = query.limit;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
104 qstart = query.start or qstart;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
105 qend = query["end"] or qend;
2660
796ace2c8f9d mod_storage_memory: Inclued 'with' in search [luacheck]
Kim Alvefur <zash@zash.se>
parents: 2659
diff changeset
106 qwith = query.with;
1608
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
107 end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
108 if not start then return nil, "invalid-key"; end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
109 local iter = coroutine.wrap(archive_iter);
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
110 iter(a, start, stop, step, limit, qstart, qend, qwith);
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
111 return iter;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
112 end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
113
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
114 function archive_store:delete(username, query)
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
115 if not query or next(query) == nil then
2097
4454f124465a mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents: 1760
diff changeset
116 self.store[username or NULL] = nil;
1608
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
117 return true;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
118 end
2097
4454f124465a mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents: 1760
diff changeset
119 local old = self.store[username or NULL];
1608
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
120 if not old then return true; end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
121 local qstart = query.start or -math.huge;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
122 local qend = query["end"] or math.huge;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
123 local qwith = query.with;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
124 local new = {};
2097
4454f124465a mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents: 1760
diff changeset
125 self.store[username or NULL] = new;
1608
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
126 local t;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
127 for i = 1, #old do
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
128 i = old[i];
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
129 t = i.when;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
130 if not(qstart >= t and qend <= t and (not qwith or i.with == qwith)) then
3361
bc745a60ce21 mod_storage_memory: Fix saving of remaining items during deletion
Kim Alvefur <zash@zash.se>
parents: 3091
diff changeset
131 self:append(username, i.key, i.value(), t, i.with);
1608
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
132 end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
133 end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
134 if #new == 0 then
2097
4454f124465a mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents: 1760
diff changeset
135 self.store[username or NULL] = nil;
1608
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
136 end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
137 return true;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
138 end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
139
2619
1e4bbff0a6fd mod_storage_memory: Add :purge() method to all store types
Matthew Wild <mwild1@gmail.com>
parents: 2172
diff changeset
140 archive_store.purge = _purge_store;
1e4bbff0a6fd mod_storage_memory: Add :purge() method to all store types
Matthew Wild <mwild1@gmail.com>
parents: 2172
diff changeset
141
1259
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
142 local stores = {
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
143 keyval = keyval_store;
1608
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
144 archive = archive_store;
1259
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
145 }
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
146
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
147 local driver = {};
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
148
2661
1d734acabd46 mod_storage_memory: Ignore unused 'self' [luacheck]
Kim Alvefur <zash@zash.se>
parents: 2660
diff changeset
149 function driver:open(store, typ) -- luacheck: ignore 212/self
1259
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
150 local store_mt = stores[typ or "keyval"];
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
151 if store_mt then
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
152 return setmetatable({ store = memory[store] }, store_mt);
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
153 end
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
154 return nil, "unsupported-store";
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
155 end
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
156
2620
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
157 if auto_purge_enabled then
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
158 module:hook("resource-unbind", function (event)
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
159 local user_bare_jid = event.session.username.."@"..event.session.host;
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
160 if not prosody.bare_sessions[user_bare_jid] then -- User went offline
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
161 module:log("debug", "Clearing store for offline user %s", user_bare_jid);
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
162 local f, s, v;
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
163 if auto_purge_stores:empty() then
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
164 f, s, v = pairs(memory);
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
165 else
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
166 f, s, v = auto_purge_stores:items();
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
167 end
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
168
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
169 for store_name in f, s, v do
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
170 if memory[store_name] then
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
171 memory[store_name][event.session.username] = nil;
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
172 end
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
173 end
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
174 end
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
175 end);
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
176 end
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
177
1259
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
178 module:provides("storage", driver);