author | Matthew Wild <mwild1@gmail.com> |
Fri, 14 Jan 2022 16:55:18 +0000 | |
changeset 12187 | e77c938ed92b |
parent 12180 | e7639625a848 |
child 12188 | 326f5466ddc7 |
permissions | -rw-r--r-- |
3414
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
1 |
|
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
2 |
local ipairs, pairs = ipairs, pairs; |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
3 |
local setmetatable = setmetatable; |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
4 |
local tostring = tostring; |
11793
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
5 |
local next, unpack = next, table.unpack or unpack; --luacheck: ignore 113/unpack |
3414
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
6 |
local os_remove = os.remove; |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
7 |
local io_open = io.open; |
11793
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
8 |
local jid_bare = require "util.jid".bare; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
9 |
local jid_prep = require "util.jid".prep; |
12180
e7639625a848
mod_storage_xep0227: Fix writing non-user data
Kim Alvefur <zash@zash.se>
parents:
12179
diff
changeset
|
10 |
local jid_join = require "util.jid".join; |
3414
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
11 |
|
11793
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
12 |
local array = require "util.array"; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
13 |
local base64 = require "util.encodings".base64; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
14 |
local dt = require "util.datetime"; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
15 |
local hex = require "util.hex"; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
16 |
local it = require "util.iterators"; |
6700
3d27f5855f4b
mod_storage_xep0227: Use configured storage path
Kim Alvefur <zash@zash.se>
parents:
6699
diff
changeset
|
17 |
local paths = require"util.paths"; |
11793
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
18 |
local set = require "util.set"; |
3414
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
19 |
local st = require "util.stanza"; |
5219
060d7fc6caf4
plugins/storage/mod_xep0227: Use util.xml.
Waqas Hussain <waqas20@gmail.com>
parents:
5121
diff
changeset
|
20 |
local parse_xml_real = require "util.xml".parse; |
3414
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
21 |
|
11793
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
22 |
local lfs = require "lfs"; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
23 |
|
12179
39921b979edb
mod_storage_xep0227: Ignore luacheck warning
Matthew Wild <mwild1@gmail.com>
parents:
12178
diff
changeset
|
24 |
local function default_get_user_xml(self, user, host) --luacheck: ignore 212/self |
12180
e7639625a848
mod_storage_xep0227: Fix writing non-user data
Kim Alvefur <zash@zash.se>
parents:
12179
diff
changeset
|
25 |
local jid = jid_join(user, host); |
6700
3d27f5855f4b
mod_storage_xep0227: Use configured storage path
Kim Alvefur <zash@zash.se>
parents:
6699
diff
changeset
|
26 |
local path = paths.join(prosody.paths.data, jid..".xml"); |
11793
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
27 |
local f, err = io_open(path); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
28 |
if not f then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
29 |
module:log("debug", "Unable to load XML file for <%s>: %s", jid, err); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
30 |
return; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
31 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
32 |
module:log("debug", "Loaded %s", path); |
3414
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
33 |
local s = f:read("*a"); |
6701
95a8aeca1fc9
mod_storage_xep0227: Close file handle after reading
Kim Alvefur <zash@zash.se>
parents:
6700
diff
changeset
|
34 |
f:close(); |
3414
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
35 |
return parse_xml_real(s); |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
36 |
end |
12177
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
37 |
local function default_set_user_xml(user, host, xml) |
12180
e7639625a848
mod_storage_xep0227: Fix writing non-user data
Kim Alvefur <zash@zash.se>
parents:
12179
diff
changeset
|
38 |
local jid = jid_join(user, host); |
6700
3d27f5855f4b
mod_storage_xep0227: Use configured storage path
Kim Alvefur <zash@zash.se>
parents:
6699
diff
changeset
|
39 |
local path = paths.join(prosody.paths.data, jid..".xml"); |
6703
0103dc8fa179
mod_storage_xep0227: Return error from io.open if unable to open file for writing
Kim Alvefur <zash@zash.se>
parents:
6702
diff
changeset
|
40 |
local f, err = io_open(path, "w"); |
0103dc8fa179
mod_storage_xep0227: Return error from io.open if unable to open file for writing
Kim Alvefur <zash@zash.se>
parents:
6702
diff
changeset
|
41 |
if not f then return f, err; end |
3414
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
42 |
if xml then |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
43 |
local s = tostring(xml); |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
44 |
f:write(s); |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
45 |
f:close(); |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
46 |
return true; |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
47 |
else |
6702
ccdd0b615106
mod_storage_xep0227: Open file for writing even if removing so os.remove has a file to delete
Kim Alvefur <zash@zash.se>
parents:
6701
diff
changeset
|
48 |
f:close(); |
3414
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
49 |
return os_remove(path); |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
50 |
end |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
51 |
end |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
52 |
local function getUserElement(xml) |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
53 |
if xml and xml.name == "server-data" then |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
54 |
local host = xml.tags[1]; |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
55 |
if host and host.name == "host" then |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
56 |
local user = host.tags[1]; |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
57 |
if user and user.name == "user" then |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
58 |
return user; |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
59 |
end |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
60 |
end |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
61 |
end |
11793
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
62 |
module:log("warn", "Unable to find user element"); |
3414
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
63 |
end |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
64 |
local function createOuterXml(user, host) |
6705
6a5c6c95cf78
mod_storage_xep0227: Use the registered namespace
Kim Alvefur <zash@zash.se>
parents:
6704
diff
changeset
|
65 |
return st.stanza("server-data", {xmlns='urn:xmpp:pie:0'}) |
3414
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
66 |
:tag("host", {jid=host}) |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
67 |
:tag("user", {name = user}); |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
68 |
end |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
69 |
|
11793
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
70 |
local function hex_to_base64(s) |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
71 |
return base64.encode(hex.from(s)); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
72 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
73 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
74 |
local function base64_to_hex(s) |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
75 |
return base64.encode(hex.from(s)); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
76 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
77 |
|
3414
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
78 |
local handlers = {}; |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
79 |
|
11793
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
80 |
-- In order to support custom account properties |
6706
353a7d4dfdc2
mod_storage_xep0227: Store data from mod_auth_internal_hashed in a private namespace
Kim Alvefur <zash@zash.se>
parents:
6705
diff
changeset
|
81 |
local extended = "http://prosody.im/protocol/extended-xep0227\1"; |
353a7d4dfdc2
mod_storage_xep0227: Store data from mod_auth_internal_hashed in a private namespace
Kim Alvefur <zash@zash.se>
parents:
6705
diff
changeset
|
82 |
|
11793
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
83 |
local scram_hash_name = module:get_option_string("password_hash", "SHA-1"); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
84 |
local scram_properties = set.new({ "server_key", "stored_key", "iteration_count", "salt" }); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
85 |
|
3414
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
86 |
handlers.accounts = { |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
87 |
get = function(self, user) |
12177
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
88 |
user = getUserElement(self:_get_user_xml(user, self.host)); |
11793
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
89 |
local scram_credentials = user and user:get_child_with_attr( |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
90 |
"scram-credentials", "urn:xmpp:pie:0#scram", |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
91 |
"mechanism", "SCRAM-"..scram_hash_name |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
92 |
); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
93 |
if scram_credentials then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
94 |
return { |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
95 |
iteration_count = tonumber(scram_credentials:get_child_text("iter-count")); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
96 |
server_key = base64_to_hex(scram_credentials:get_child_text("server-key")); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
97 |
stored_key = base64_to_hex(scram_credentials:get_child_text("stored-key")); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
98 |
salt = base64.decode(scram_credentials:get_child_text("salt")); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
99 |
}; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
100 |
elseif user and user.attr.password then |
3414
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
101 |
return { password = user.attr.password }; |
6706
353a7d4dfdc2
mod_storage_xep0227: Store data from mod_auth_internal_hashed in a private namespace
Kim Alvefur <zash@zash.se>
parents:
6705
diff
changeset
|
102 |
elseif user then |
353a7d4dfdc2
mod_storage_xep0227: Store data from mod_auth_internal_hashed in a private namespace
Kim Alvefur <zash@zash.se>
parents:
6705
diff
changeset
|
103 |
local data = {}; |
353a7d4dfdc2
mod_storage_xep0227: Store data from mod_auth_internal_hashed in a private namespace
Kim Alvefur <zash@zash.se>
parents:
6705
diff
changeset
|
104 |
for k, v in pairs(user.attr) do |
353a7d4dfdc2
mod_storage_xep0227: Store data from mod_auth_internal_hashed in a private namespace
Kim Alvefur <zash@zash.se>
parents:
6705
diff
changeset
|
105 |
if k:sub(1, #extended) == extended then |
353a7d4dfdc2
mod_storage_xep0227: Store data from mod_auth_internal_hashed in a private namespace
Kim Alvefur <zash@zash.se>
parents:
6705
diff
changeset
|
106 |
data[k:sub(#extended+1)] = v; |
353a7d4dfdc2
mod_storage_xep0227: Store data from mod_auth_internal_hashed in a private namespace
Kim Alvefur <zash@zash.se>
parents:
6705
diff
changeset
|
107 |
end |
353a7d4dfdc2
mod_storage_xep0227: Store data from mod_auth_internal_hashed in a private namespace
Kim Alvefur <zash@zash.se>
parents:
6705
diff
changeset
|
108 |
end |
353a7d4dfdc2
mod_storage_xep0227: Store data from mod_auth_internal_hashed in a private namespace
Kim Alvefur <zash@zash.se>
parents:
6705
diff
changeset
|
109 |
return data; |
3414
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
110 |
end |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
111 |
end; |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
112 |
set = function(self, user, data) |
11793
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
113 |
if not data then |
12177
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
114 |
return self:_set_user_xml(user, self.host, nil); |
3414
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
115 |
end |
11793
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
116 |
|
12177
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
117 |
local xml = self:_get_user_xml(user, self.host); |
11793
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
118 |
if not xml then xml = createOuterXml(user, self.host); end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
119 |
local usere = getUserElement(xml); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
120 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
121 |
local account_properties = set.new(it.to_array(it.keys(data))); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
122 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
123 |
-- Include SCRAM credentials if known |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
124 |
if account_properties:contains_set(scram_properties) then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
125 |
local scram_el = st.stanza("scram-credentials", { xmlns = "urn:xmpp:pie:0#scram", mechanism = "SCRAM-"..scram_hash_name }) |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
126 |
:text_tag("server-key", hex_to_base64(data.server_key)) |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
127 |
:text_tag("stored-key", hex_to_base64(data.stored_key)) |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
128 |
:text_tag("iter-count", ("%d"):format(data.iteration_count)) |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
129 |
:text_tag("salt", base64.encode(data.salt)); |
11844
5e9e75c277a2
mod_storage_xep0227: Add scram-credentials to user element rather than server
Matthew Wild <mwild1@gmail.com>
parents:
11793
diff
changeset
|
130 |
usere:add_child(scram_el); |
11793
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
131 |
account_properties:exclude(scram_properties); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
132 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
133 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
134 |
-- Include the password if present |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
135 |
if account_properties:contains("password") then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
136 |
usere.attr.password = data.password; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
137 |
account_properties:remove("password"); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
138 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
139 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
140 |
-- Preserve remaining properties as namespaced attributes |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
141 |
for property in account_properties do |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
142 |
usere.attr[extended..property] = data[property]; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
143 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
144 |
|
12177
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
145 |
return self:_set_user_xml(user, self.host, xml); |
3414
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
146 |
end; |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
147 |
}; |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
148 |
handlers.vcard = { |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
149 |
get = function(self, user) |
12177
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
150 |
user = getUserElement(self:_get_user_xml(user, self.host)); |
3414
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
151 |
if user then |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
152 |
local vcard = user:get_child("vCard", 'vcard-temp'); |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
153 |
if vcard then |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
154 |
return st.preserialize(vcard); |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
155 |
end |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
156 |
end |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
157 |
end; |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
158 |
set = function(self, user, data) |
12177
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
159 |
local xml = self:_get_user_xml(user, self.host); |
3414
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
160 |
local usere = xml and getUserElement(xml); |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
161 |
if usere then |
12086
e87563fefd85
mod_storage_xep0227: Replace custom tag-removal helpers with :remove_children()
Matthew Wild <mwild1@gmail.com>
parents:
11844
diff
changeset
|
162 |
usere:remove_children("vCard", "vcard-temp"); |
e87563fefd85
mod_storage_xep0227: Replace custom tag-removal helpers with :remove_children()
Matthew Wild <mwild1@gmail.com>
parents:
11844
diff
changeset
|
163 |
if not data then |
e87563fefd85
mod_storage_xep0227: Replace custom tag-removal helpers with :remove_children()
Matthew Wild <mwild1@gmail.com>
parents:
11844
diff
changeset
|
164 |
-- No data to set, old one deleted, success |
3414
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
165 |
return true; |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
166 |
end |
12086
e87563fefd85
mod_storage_xep0227: Replace custom tag-removal helpers with :remove_children()
Matthew Wild <mwild1@gmail.com>
parents:
11844
diff
changeset
|
167 |
local vcard = st.deserialize(data); |
e87563fefd85
mod_storage_xep0227: Replace custom tag-removal helpers with :remove_children()
Matthew Wild <mwild1@gmail.com>
parents:
11844
diff
changeset
|
168 |
usere:add_child(vcard); |
12177
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
169 |
return self:_set_user_xml(user, self.host, xml); |
3414
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
170 |
end |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
171 |
return true; |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
172 |
end; |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
173 |
}; |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
174 |
handlers.private = { |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
175 |
get = function(self, user) |
12177
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
176 |
user = getUserElement(self:_get_user_xml(user, self.host)); |
3414
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
177 |
if user then |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
178 |
local private = user:get_child("query", "jabber:iq:private"); |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
179 |
if private then |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
180 |
local r = {}; |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
181 |
for _, tag in ipairs(private.tags) do |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
182 |
r[tag.name..":"..tag.attr.xmlns] = st.preserialize(tag); |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
183 |
end |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
184 |
return r; |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
185 |
end |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
186 |
end |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
187 |
end; |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
188 |
set = function(self, user, data) |
12177
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
189 |
local xml = self:_get_user_xml(user, self.host); |
3414
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
190 |
local usere = xml and getUserElement(xml); |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
191 |
if usere then |
12086
e87563fefd85
mod_storage_xep0227: Replace custom tag-removal helpers with :remove_children()
Matthew Wild <mwild1@gmail.com>
parents:
11844
diff
changeset
|
192 |
usere:remove_children("query", "jabber:iq:private"); |
3414
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
193 |
if data and next(data) ~= nil then |
12086
e87563fefd85
mod_storage_xep0227: Replace custom tag-removal helpers with :remove_children()
Matthew Wild <mwild1@gmail.com>
parents:
11844
diff
changeset
|
194 |
local private = st.stanza("query", {xmlns='jabber:iq:private'}); |
3414
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
195 |
for _,tag in pairs(data) do |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
196 |
private:add_child(st.deserialize(tag)); |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
197 |
end |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
198 |
usere:add_child(private); |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
199 |
end |
12177
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
200 |
return self:_set_user_xml(user, self.host, xml); |
3414
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
201 |
end |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
202 |
return true; |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
203 |
end; |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
204 |
}; |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
205 |
|
8354
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
206 |
handlers.roster = { |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
207 |
get = function(self, user) |
12177
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
208 |
user = getUserElement(self:_get_user_xml(user, self.host)); |
8354
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
209 |
if user then |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
210 |
local roster = user:get_child("query", "jabber:iq:roster"); |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
211 |
if roster then |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
212 |
local r = { |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
213 |
[false] = { |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
214 |
version = roster.attr.version; |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
215 |
pending = {}; |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
216 |
} |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
217 |
}; |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
218 |
for item in roster:childtags("item") do |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
219 |
r[item.attr.jid] = { |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
220 |
jid = item.attr.jid, |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
221 |
subscription = item.attr.subscription, |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
222 |
ask = item.attr.ask, |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
223 |
name = item.attr.name, |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
224 |
groups = {}; |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
225 |
}; |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
226 |
for group in item:childtags("group") do |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
227 |
r[item.attr.jid].groups[group:get_text()] = true; |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
228 |
end |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
229 |
for pending in user:childtags("presence", "jabber:client") do |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
230 |
r[false].pending[pending.attr.from] = true; |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
231 |
end |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
232 |
end |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
233 |
return r; |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
234 |
end |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
235 |
end |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
236 |
end; |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
237 |
set = function(self, user, data) |
12177
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
238 |
local xml = self:_get_user_xml(user, self.host); |
8354
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
239 |
local usere = xml and getUserElement(xml); |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
240 |
if usere then |
12187
e77c938ed92b
mod_storage_xep0227: Skip self-contacts on roster import
Matthew Wild <mwild1@gmail.com>
parents:
12180
diff
changeset
|
241 |
local user_jid = jid.join(usere.name, self.host); |
12086
e87563fefd85
mod_storage_xep0227: Replace custom tag-removal helpers with :remove_children()
Matthew Wild <mwild1@gmail.com>
parents:
11844
diff
changeset
|
242 |
usere:remove_children("query", "jabber:iq:roster"); |
8354
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
243 |
usere:maptags(function (tag) |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
244 |
if tag.attr.xmlns == "jabber:client" and tag.name == "presence" and tag.attr.type == "subscribe" then |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
245 |
return nil; |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
246 |
end |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
247 |
return tag; |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
248 |
end); |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
249 |
if data and next(data) ~= nil then |
12086
e87563fefd85
mod_storage_xep0227: Replace custom tag-removal helpers with :remove_children()
Matthew Wild <mwild1@gmail.com>
parents:
11844
diff
changeset
|
250 |
local roster = st.stanza("query", {xmlns='jabber:iq:roster'}); |
8354
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
251 |
usere:add_child(roster); |
12187
e77c938ed92b
mod_storage_xep0227: Skip self-contacts on roster import
Matthew Wild <mwild1@gmail.com>
parents:
12180
diff
changeset
|
252 |
for contact_jid, item in pairs(data) do |
e77c938ed92b
mod_storage_xep0227: Skip self-contacts on roster import
Matthew Wild <mwild1@gmail.com>
parents:
12180
diff
changeset
|
253 |
contact_jid = jid.bare(jid.prep(contact_jid)); |
e77c938ed92b
mod_storage_xep0227: Skip self-contacts on roster import
Matthew Wild <mwild1@gmail.com>
parents:
12180
diff
changeset
|
254 |
if contact_jid ~= false then |
e77c938ed92b
mod_storage_xep0227: Skip self-contacts on roster import
Matthew Wild <mwild1@gmail.com>
parents:
12180
diff
changeset
|
255 |
if contact_jid ~= user_jid then -- Skip self-contacts |
e77c938ed92b
mod_storage_xep0227: Skip self-contacts on roster import
Matthew Wild <mwild1@gmail.com>
parents:
12180
diff
changeset
|
256 |
roster:tag("item", { |
e77c938ed92b
mod_storage_xep0227: Skip self-contacts on roster import
Matthew Wild <mwild1@gmail.com>
parents:
12180
diff
changeset
|
257 |
jid = contact_jid, |
e77c938ed92b
mod_storage_xep0227: Skip self-contacts on roster import
Matthew Wild <mwild1@gmail.com>
parents:
12180
diff
changeset
|
258 |
subscription = item.subscription, |
e77c938ed92b
mod_storage_xep0227: Skip self-contacts on roster import
Matthew Wild <mwild1@gmail.com>
parents:
12180
diff
changeset
|
259 |
ask = item.ask, |
e77c938ed92b
mod_storage_xep0227: Skip self-contacts on roster import
Matthew Wild <mwild1@gmail.com>
parents:
12180
diff
changeset
|
260 |
name = item.name, |
e77c938ed92b
mod_storage_xep0227: Skip self-contacts on roster import
Matthew Wild <mwild1@gmail.com>
parents:
12180
diff
changeset
|
261 |
}); |
e77c938ed92b
mod_storage_xep0227: Skip self-contacts on roster import
Matthew Wild <mwild1@gmail.com>
parents:
12180
diff
changeset
|
262 |
for group in pairs(item.groups) do |
e77c938ed92b
mod_storage_xep0227: Skip self-contacts on roster import
Matthew Wild <mwild1@gmail.com>
parents:
12180
diff
changeset
|
263 |
roster:tag("group"):text(group):up(); |
e77c938ed92b
mod_storage_xep0227: Skip self-contacts on roster import
Matthew Wild <mwild1@gmail.com>
parents:
12180
diff
changeset
|
264 |
end |
e77c938ed92b
mod_storage_xep0227: Skip self-contacts on roster import
Matthew Wild <mwild1@gmail.com>
parents:
12180
diff
changeset
|
265 |
roster:up(); -- move out from item |
8354
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
266 |
end |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
267 |
else |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
268 |
roster.attr.version = item.version; |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
269 |
for pending_jid in pairs(item.pending) do |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
270 |
usere:add_child(st.presence({ from = pending_jid, type = "subscribe" })); |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
271 |
end |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
272 |
end |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
273 |
end |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
274 |
end |
12177
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
275 |
return self:_set_user_xml(user, self.host, xml); |
8354
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
276 |
end |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
277 |
return true; |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
278 |
end; |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
279 |
}; |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
280 |
|
11793
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
281 |
-- PEP node configuration/etc. (not items) |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
282 |
local xmlns_pubsub_owner = "http://jabber.org/protocol/pubsub#owner"; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
283 |
local lib_pubsub = module:require "pubsub"; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
284 |
handlers.pep = { |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
285 |
get = function (self, user) |
12177
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
286 |
local xml = self:_get_user_xml(user, self.host); |
11793
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
287 |
local user_el = xml and getUserElement(xml); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
288 |
if not user_el then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
289 |
return nil; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
290 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
291 |
local nodes = { |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
292 |
--[[ |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
293 |
[node_name] = { |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
294 |
name = node_name; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
295 |
config = {}; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
296 |
affiliations = {}; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
297 |
subscribers = {}; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
298 |
}; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
299 |
]] |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
300 |
}; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
301 |
local owner_el = user_el:get_child("pubsub", xmlns_pubsub_owner); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
302 |
for node_el in owner_el:childtags() do |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
303 |
local node_name = node_el.attr.node; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
304 |
local node = nodes[node_name]; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
305 |
if not node then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
306 |
node = { |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
307 |
name = node_name; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
308 |
config = {}; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
309 |
affiliations = {}; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
310 |
subscribers = {}; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
311 |
}; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
312 |
nodes[node_name] = node; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
313 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
314 |
if node_el.name == "configure" then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
315 |
local form = node_el:get_child("x", "jabber:x:data"); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
316 |
if form then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
317 |
node.config = lib_pubsub.node_config_form:data(form); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
318 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
319 |
elseif node_el.name == "affiliations" then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
320 |
for affiliation_el in node_el:childtags("affiliation") do |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
321 |
local aff_jid = jid_prep(affiliation_el.attr.jid); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
322 |
local aff_value = affiliation_el.attr.affiliation; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
323 |
if aff_jid and aff_value then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
324 |
node.affiliations[aff_jid] = aff_value; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
325 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
326 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
327 |
elseif node_el.name == "subscriptions" then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
328 |
for subscription_el in node_el:childtags("subscription") do |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
329 |
local sub_jid = jid_prep(subscription_el.attr.jid); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
330 |
local sub_state = subscription_el.attr.subscription; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
331 |
if sub_jid and sub_state == "subscribed" then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
332 |
local options; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
333 |
local subscription_options_el = subscription_el:get_child("options"); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
334 |
if subscription_options_el then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
335 |
local options_form = subscription_options_el:get_child("x", "jabber:x:data"); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
336 |
if options_form then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
337 |
options = lib_pubsub.subscription_options_form:data(options_form); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
338 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
339 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
340 |
node.subscribers[sub_jid] = options or true; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
341 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
342 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
343 |
else |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
344 |
module:log("warn", "Ignoring unknown pubsub element: %s", node_el.name); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
345 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
346 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
347 |
return nodes; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
348 |
end; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
349 |
set = function(self, user, data) |
12177
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
350 |
local xml = self:_get_user_xml(user, self.host); |
11793
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
351 |
local user_el = xml and getUserElement(xml); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
352 |
if not user_el then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
353 |
return true; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
354 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
355 |
-- Remove existing data, if any |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
356 |
user_el:remove_children("pubsub", xmlns_pubsub_owner); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
357 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
358 |
-- Generate new data |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
359 |
local owner_el = st.stanza("pubsub", { xmlns = xmlns_pubsub_owner }); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
360 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
361 |
for node_name, node_data in pairs(data) do |
12178
a38b7cb5fd6a
mod_storage_xep0227: Support for exporting nodes with no stored configuration
Matthew Wild <mwild1@gmail.com>
parents:
12177
diff
changeset
|
362 |
if node_data == true then |
a38b7cb5fd6a
mod_storage_xep0227: Support for exporting nodes with no stored configuration
Matthew Wild <mwild1@gmail.com>
parents:
12177
diff
changeset
|
363 |
node_data = { config = {} }; |
a38b7cb5fd6a
mod_storage_xep0227: Support for exporting nodes with no stored configuration
Matthew Wild <mwild1@gmail.com>
parents:
12177
diff
changeset
|
364 |
end |
11793
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
365 |
local configure_el = st.stanza("configure", { node = node_name }) |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
366 |
:add_child(lib_pubsub.node_config_form:form(node_data.config, "submit")); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
367 |
owner_el:add_child(configure_el); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
368 |
if node_data.affiliations and next(node_data.affiliations) ~= nil then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
369 |
local affiliations_el = st.stanza("affiliations", { node = node_name }); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
370 |
for aff_jid, aff_value in pairs(node_data.affiliations) do |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
371 |
affiliations_el:tag("affiliation", { jid = aff_jid, affiliation = aff_value }):up(); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
372 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
373 |
owner_el:add_child(affiliations_el); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
374 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
375 |
if node_data.subscribers and next(node_data.subscribers) ~= nil then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
376 |
local subscriptions_el = st.stanza("subscriptions", { node = node_name }); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
377 |
for sub_jid, sub_data in pairs(node_data.subscribers) do |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
378 |
local sub_el = st.stanza("subscription", { jid = sub_jid, subscribed = "subscribed" }); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
379 |
if sub_data ~= true then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
380 |
local options_form = lib_pubsub.subscription_options_form:form(sub_data, "submit"); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
381 |
sub_el:tag("options"):add_child(options_form):up(); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
382 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
383 |
subscriptions_el:add_child(sub_el); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
384 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
385 |
owner_el:add_child(subscriptions_el); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
386 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
387 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
388 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
389 |
user_el:add_child(owner_el); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
390 |
|
12177
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
391 |
return self:_set_user_xml(user, self.host, xml); |
11793
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
392 |
end; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
393 |
}; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
394 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
395 |
-- PEP items |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
396 |
local xmlns_pubsub = "http://jabber.org/protocol/pubsub"; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
397 |
handlers.pep_ = { |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
398 |
_stores = function (self, xml) --luacheck: ignore 212/self |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
399 |
local store_names = set.new(); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
400 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
401 |
local user_el = xml and getUserElement(xml); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
402 |
if not user_el then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
403 |
return store_names; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
404 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
405 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
406 |
-- Locate existing pubsub element, if any |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
407 |
local pubsub_el = user_el:get_child("pubsub", xmlns_pubsub); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
408 |
if not pubsub_el then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
409 |
return store_names; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
410 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
411 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
412 |
-- Find node items element, if any |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
413 |
for items_el in pubsub_el:childtags("items") do |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
414 |
store_names:add("pep_"..items_el.attr.node); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
415 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
416 |
return store_names; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
417 |
end; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
418 |
find = function (self, user, query) |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
419 |
-- query keys: limit, reverse, key (id) |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
420 |
|
12177
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
421 |
local xml = self:_get_user_xml(user, self.host); |
11793
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
422 |
local user_el = xml and getUserElement(xml); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
423 |
if not user_el then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
424 |
return nil, "no 227 user element found"; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
425 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
426 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
427 |
local node_name = self.datastore:match("^pep_(.+)$"); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
428 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
429 |
-- Locate existing pubsub element, if any |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
430 |
local pubsub_el = user_el:get_child("pubsub", xmlns_pubsub); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
431 |
if not pubsub_el then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
432 |
return nil; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
433 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
434 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
435 |
-- Find node items element, if any |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
436 |
local node_items_el; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
437 |
for items_el in pubsub_el:childtags("items") do |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
438 |
if items_el.attr.node == node_name then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
439 |
node_items_el = items_el; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
440 |
break; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
441 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
442 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
443 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
444 |
if not node_items_el then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
445 |
return nil; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
446 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
447 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
448 |
local user_jid = user.."@"..self.host; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
449 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
450 |
local results = {}; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
451 |
for item_el in node_items_el:childtags("item") do |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
452 |
if query and query.key then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
453 |
if item_el.attr.id == query.key then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
454 |
table.insert(results, { item_el.attr.id, item_el.tags[1], 0, user_jid }); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
455 |
break; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
456 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
457 |
else |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
458 |
table.insert(results, { item_el.attr.id, item_el.tags[1], 0, user_jid }); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
459 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
460 |
if query and query.limit and #results >= query.limit then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
461 |
break; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
462 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
463 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
464 |
if query and query.reverse then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
465 |
return array.reverse(results); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
466 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
467 |
local i = 0; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
468 |
return function () |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
469 |
i = i + 1; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
470 |
local v = results[i]; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
471 |
if v == nil then return nil; end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
472 |
return unpack(v, 1, 4); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
473 |
end; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
474 |
end; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
475 |
append = function (self, user, key, payload, when, with) --luacheck: ignore 212/when 212/with 212/key |
12177
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
476 |
local xml = self:_get_user_xml(user, self.host); |
11793
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
477 |
local user_el = xml and getUserElement(xml); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
478 |
if not user_el then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
479 |
return true; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
480 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
481 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
482 |
local node_name = self.datastore:match("^pep_(.+)$"); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
483 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
484 |
-- Locate existing pubsub element, if any |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
485 |
local pubsub_el = user_el:get_child("pubsub", xmlns_pubsub); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
486 |
if not pubsub_el then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
487 |
pubsub_el = st.stanza("pubsub", { xmlns = xmlns_pubsub }); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
488 |
user_el:add_child(pubsub_el); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
489 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
490 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
491 |
-- Find node items element, if any |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
492 |
local node_items_el; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
493 |
for items_el in pubsub_el:childtags("items") do |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
494 |
if items_el.attr.node == node_name then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
495 |
node_items_el = items_el; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
496 |
break; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
497 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
498 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
499 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
500 |
if not node_items_el then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
501 |
-- Doesn't exist yet, create one |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
502 |
node_items_el = st.stanza("items", { node = node_name }); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
503 |
pubsub_el:add_child(node_items_el); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
504 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
505 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
506 |
-- Append item to pubsub_el |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
507 |
local item_el = st.stanza("item", { id = key }) |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
508 |
:add_child(payload); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
509 |
node_items_el:add_child(item_el); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
510 |
|
12177
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
511 |
return self:_set_user_xml(user, self.host, xml); |
11793
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
512 |
end; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
513 |
delete = function (self, user, query) |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
514 |
-- query keys: limit, reverse, key (id) |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
515 |
|
12177
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
516 |
local xml = self:_get_user_xml(user, self.host); |
11793
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
517 |
local user_el = xml and getUserElement(xml); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
518 |
if not user_el then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
519 |
return nil, "no 227 user element found"; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
520 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
521 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
522 |
local node_name = self.datastore:match("^pep_(.+)$"); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
523 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
524 |
-- Locate existing pubsub element, if any |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
525 |
local pubsub_el = user_el:get_child("pubsub", xmlns_pubsub); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
526 |
if not pubsub_el then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
527 |
return nil; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
528 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
529 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
530 |
-- Find node items element, if any |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
531 |
local node_items_el; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
532 |
for items_el in pubsub_el:childtags("items") do |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
533 |
if items_el.attr.node == node_name then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
534 |
node_items_el = items_el; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
535 |
break; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
536 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
537 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
538 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
539 |
if not node_items_el then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
540 |
return nil; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
541 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
542 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
543 |
local results = array(); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
544 |
for item_el in pubsub_el:childtags("item") do |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
545 |
if query and query.key then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
546 |
if item_el.attr.id == query.key then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
547 |
table.insert(results, item_el); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
548 |
break; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
549 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
550 |
else |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
551 |
table.insert(results, item_el); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
552 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
553 |
if query and query.limit and #results >= query.limit then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
554 |
break; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
555 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
556 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
557 |
if query and query.truncate then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
558 |
results:sub(-query.truncate); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
559 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
560 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
561 |
-- Actually remove the matching items |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
562 |
local delete_keys = set.new(results:map(function (item) return item.attr.id; end)); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
563 |
pubsub_el:maptags(function (item_el) |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
564 |
if delete_keys:contains(item_el.attr.id) then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
565 |
return nil; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
566 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
567 |
return item_el; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
568 |
end); |
12177
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
569 |
return self:_set_user_xml(user, self.host, xml); |
11793
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
570 |
end; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
571 |
}; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
572 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
573 |
-- MAM archives |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
574 |
local xmlns_pie_mam = "urn:xmpp:pie:0#mam"; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
575 |
handlers.archive = { |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
576 |
find = function (self, user, query) |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
577 |
assert(query == nil, "XEP-0313 queries are not supported on XEP-0227 files"); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
578 |
|
12177
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
579 |
local xml = self:_get_user_xml(user, self.host); |
11793
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
580 |
local user_el = xml and getUserElement(xml); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
581 |
if not user_el then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
582 |
return nil, "no 227 user element found"; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
583 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
584 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
585 |
-- Locate existing archive element, if any |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
586 |
local archive_el = user_el:get_child("archive", xmlns_pie_mam); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
587 |
if not archive_el then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
588 |
return nil; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
589 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
590 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
591 |
local user_jid = user.."@"..self.host; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
592 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
593 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
594 |
local f, s, result_el = archive_el:childtags("result", "urn:xmpp:mam:2"); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
595 |
return function () |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
596 |
result_el = f(s, result_el); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
597 |
if not result_el then return nil; end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
598 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
599 |
local id = result_el.attr.id; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
600 |
local item = result_el:find("{urn:xmpp:forward:0}forwarded/{jabber:client}message"); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
601 |
assert(item, "Invalid stanza in XEP-0227 archive"); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
602 |
local when = dt.parse(result_el:find("{urn:xmpp:forward:0}forwarded/{urn:xmpp:delay}delay@stamp")); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
603 |
local to_bare, from_bare = jid_bare(item.attr.to), jid_bare(item.attr.from); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
604 |
local with = to_bare == user_jid and from_bare or to_bare; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
605 |
-- id, item, when, with |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
606 |
return id, item, when, with; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
607 |
end; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
608 |
end; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
609 |
append = function (self, user, key, payload, when, with) --luacheck: ignore 212/when 212/with 212/key |
12177
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
610 |
local xml = self:_get_user_xml(user, self.host); |
11793
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
611 |
local user_el = xml and getUserElement(xml); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
612 |
if not user_el then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
613 |
return true; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
614 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
615 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
616 |
-- Locate existing archive element, if any |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
617 |
local archive_el = user_el:get_child("archive", xmlns_pie_mam); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
618 |
if not archive_el then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
619 |
archive_el = st.stanza("archive", { xmlns = xmlns_pie_mam }); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
620 |
user_el:add_child(archive_el); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
621 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
622 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
623 |
local item = st.clone(payload); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
624 |
item.attr.xmlns = "jabber:client"; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
625 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
626 |
local result_el = st.stanza("result", { xmlns = "urn:xmpp:mam:2", id = key }) |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
627 |
:tag("forwarded", { xmlns = "urn:xmpp:forward:0" }) |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
628 |
:tag("delay", { xmlns = "urn:xmpp:delay", stamp = dt.datetime(when) }):up() |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
629 |
:add_child(item) |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
630 |
:up(); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
631 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
632 |
-- Append item to archive_el |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
633 |
archive_el:add_child(result_el); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
634 |
|
12177
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
635 |
return self:_set_user_xml(user, self.host, xml); |
11793
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
636 |
end; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
637 |
}; |
8354
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8353
diff
changeset
|
638 |
|
3414
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
639 |
----------------------------- |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
640 |
local driver = {}; |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
641 |
|
11793
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
642 |
local function users(self) |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
643 |
local file_patt = "^.*@"..(self.host:gsub("%p", "%%%1")).."%.xml$"; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
644 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
645 |
local f, s, filename = lfs.dir(prosody.paths.data); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
646 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
647 |
return function () |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
648 |
filename = f(s, filename); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
649 |
while filename and not filename:match(file_patt) do |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
650 |
filename = f(s, filename); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
651 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
652 |
if not filename then return nil; end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
653 |
return filename:match("^[^@]+"); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
654 |
end; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
655 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
656 |
|
8355
6ff50541d2a6
mod_storage_xep0227: Ignore unused 'self' argument [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8354
diff
changeset
|
657 |
function driver:open(datastore, typ) -- luacheck: ignore 212/self |
11793
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
658 |
if typ and typ ~= "keyval" and typ ~= "archive" then return nil, "unsupported-store"; end |
3414
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
659 |
local handler = handlers[datastore]; |
11793
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
660 |
if not handler and datastore:match("^pep_") then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
661 |
handler = handlers.pep_; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
662 |
end |
6704
88a25c364a14
mod_storage_xep0227: Update open method for current API
Kim Alvefur <zash@zash.se>
parents:
6703
diff
changeset
|
663 |
if not handler then return nil, "unsupported-datastore"; end |
12177
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
664 |
local instance = setmetatable({ |
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
665 |
host = module.host; |
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
666 |
datastore = datastore; |
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
667 |
users = users; |
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
668 |
_get_user_xml = assert(default_get_user_xml); |
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
669 |
_set_user_xml = default_set_user_xml; |
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
670 |
}, { |
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
671 |
__index = handler; |
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
672 |
} |
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
673 |
); |
3414
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
674 |
if instance.init then instance:init(); end |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
675 |
return instance; |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
676 |
end |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
677 |
|
12177
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
678 |
-- Custom API that allows some configuration |
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
679 |
function driver:open_xep0227(datastore, typ, options) |
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
680 |
local instance, err = self:open(datastore, typ); |
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
681 |
if not instance then |
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
682 |
return instance, err; |
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
683 |
end |
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
684 |
if options then |
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
685 |
instance._set_user_xml = assert(options.set_user_xml); |
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
686 |
instance._get_user_xml = assert(options.get_user_xml); |
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
687 |
end |
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
688 |
return instance; |
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
689 |
end |
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12086
diff
changeset
|
690 |
|
11793
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
691 |
local function get_store_names(self, path) |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
692 |
local stores = set.new(); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
693 |
local f, err = io_open(paths.join(prosody.paths.data, path)); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
694 |
if not f then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
695 |
module:log("warn", "Unable to load XML file for <%s>: %s", "store listing", err); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
696 |
return stores; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
697 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
698 |
module:log("info", "Loaded %s", path); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
699 |
local s = f:read("*a"); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
700 |
f:close(); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
701 |
local xml = parse_xml_real(s); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
702 |
for _, handler_funcs in pairs(handlers) do |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
703 |
if handler_funcs._stores then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
704 |
stores:include(handler_funcs._stores(self, xml)); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
705 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
706 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
707 |
return stores; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
708 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
709 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
710 |
function driver:stores(username) |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
711 |
local store_dir = prosody.paths.data; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
712 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
713 |
local mode, err = lfs.attributes(store_dir, "mode"); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
714 |
if not mode then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
715 |
return function() module:log("debug", "Could not iterate over stores in %s: %s", store_dir, err); end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
716 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
717 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
718 |
local file_patt = "^.*@"..(module.host:gsub("%p", "%%%1")).."%.xml$"; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
719 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
720 |
local all_users = username == true; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
721 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
722 |
local store_names = set.new(); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
723 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
724 |
for filename in lfs.dir(prosody.paths.data) do |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
725 |
if filename:match(file_patt) then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
726 |
if all_users or filename == username.."@"..module.host..".xml" then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
727 |
store_names:include(get_store_names(self, filename)); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
728 |
if not all_users then break; end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
729 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
730 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
731 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
732 |
|
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
733 |
return store_names:items(); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
734 |
end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8355
diff
changeset
|
735 |
|
5121
b5a5643f8572
core.storagemanager, mod_storage_*: "data-driver" -> "storage-provider", to allow using module:provides().
Waqas Hussain <waqas20@gmail.com>
parents:
3414
diff
changeset
|
736 |
module:provides("storage", driver); |