Software /
code /
prosody
Annotate
plugins/mod_storage_xep0227.lua @ 12454:b2438f374b3e 0.12
mod_storage_xep0227: Handle missing {pubsub#owner}pubsub element (fixes #1740)
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Thu, 07 Apr 2022 17:22:02 +0100 |
parent | 12355:a0ff5c438e9d |
child | 12456:64722dcb0b8c |
rev | line source |
---|---|
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; |
11789
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
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; |
11789
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
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:
8352
diff
changeset
|
9 local jid_prep = require "util.jid".prep; |
12176
e7639625a848
mod_storage_xep0227: Fix writing non-user data
Kim Alvefur <zash@zash.se>
parents:
12175
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 |
11789
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
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:
8352
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:
8352
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:
8352
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:
8352
diff
changeset
|
16 local it = require "util.iterators"; |
6697
3d27f5855f4b
mod_storage_xep0227: Use configured storage path
Kim Alvefur <zash@zash.se>
parents:
6696
diff
changeset
|
17 local paths = require"util.paths"; |
11789
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
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 |
11789
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
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:
8352
diff
changeset
|
23 |
12175
39921b979edb
mod_storage_xep0227: Ignore luacheck warning
Matthew Wild <mwild1@gmail.com>
parents:
12174
diff
changeset
|
24 local function default_get_user_xml(self, user, host) --luacheck: ignore 212/self |
12176
e7639625a848
mod_storage_xep0227: Fix writing non-user data
Kim Alvefur <zash@zash.se>
parents:
12175
diff
changeset
|
25 local jid = jid_join(user, host); |
6697
3d27f5855f4b
mod_storage_xep0227: Use configured storage path
Kim Alvefur <zash@zash.se>
parents:
6696
diff
changeset
|
26 local path = paths.join(prosody.paths.data, jid..".xml"); |
11789
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
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:
8352
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:
8352
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:
8352
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:
8352
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:
8352
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"); |
6698
95a8aeca1fc9
mod_storage_xep0227: Close file handle after reading
Kim Alvefur <zash@zash.se>
parents:
6697
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 |
12195
c5788969b812
mod_storage_xep0227: Fix luacheck warning
Matthew Wild <mwild1@gmail.com>
parents:
12194
diff
changeset
|
37 local function default_set_user_xml(self, user, host, xml) --luacheck: ignore 212/self |
12176
e7639625a848
mod_storage_xep0227: Fix writing non-user data
Kim Alvefur <zash@zash.se>
parents:
12175
diff
changeset
|
38 local jid = jid_join(user, host); |
6697
3d27f5855f4b
mod_storage_xep0227: Use configured storage path
Kim Alvefur <zash@zash.se>
parents:
6696
diff
changeset
|
39 local path = paths.join(prosody.paths.data, jid..".xml"); |
6700
0103dc8fa179
mod_storage_xep0227: Return error from io.open if unable to open file for writing
Kim Alvefur <zash@zash.se>
parents:
6699
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:
6699
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 |
6699
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:
6698
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 |
11789
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
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) |
6702
6a5c6c95cf78
mod_storage_xep0227: Use the registered namespace
Kim Alvefur <zash@zash.se>
parents:
6701
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 |
11789
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
70 local function hex_to_base64(s) |
12355
a0ff5c438e9d
util.hex: Deprecate to/from in favour of encode/decode, for consistency!
Matthew Wild <mwild1@gmail.com>
parents:
12195
diff
changeset
|
71 return base64.encode(hex.decode(s)); |
11789
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
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:
8352
diff
changeset
|
73 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
74 local function base64_to_hex(s) |
12355
a0ff5c438e9d
util.hex: Deprecate to/from in favour of encode/decode, for consistency!
Matthew Wild <mwild1@gmail.com>
parents:
12195
diff
changeset
|
75 return base64.encode(hex.decode(s)); |
11789
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
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:
8352
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 |
11789
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
80 -- In order to support custom account properties |
6703
353a7d4dfdc2
mod_storage_xep0227: Store data from mod_auth_internal_hashed in a private namespace
Kim Alvefur <zash@zash.se>
parents:
6702
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:
6702
diff
changeset
|
82 |
11789
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
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:
8352
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:
8352
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) |
12173
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
88 user = getUserElement(self:_get_user_xml(user, self.host)); |
11789
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
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:
8352
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:
8352
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:
8352
diff
changeset
|
92 ); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
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:
8352
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:
8352
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:
8352
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:
8352
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:
8352
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:
8352
diff
changeset
|
99 }; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
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 }; |
6703
353a7d4dfdc2
mod_storage_xep0227: Store data from mod_auth_internal_hashed in a private namespace
Kim Alvefur <zash@zash.se>
parents:
6702
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:
6702
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:
6702
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:
6702
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:
6702
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:
6702
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:
6702
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:
6702
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) |
11789
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
113 if not data then |
12173
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
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 |
11789
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
116 |
12173
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
117 local xml = self:_get_user_xml(user, self.host); |
11789
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
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:
8352
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:
8352
diff
changeset
|
120 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
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:
8352
diff
changeset
|
122 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
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:
8352
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:
8352
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:
8352
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:
8352
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:
8352
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:
8352
diff
changeset
|
129 :text_tag("salt", base64.encode(data.salt)); |
11840
5e9e75c277a2
mod_storage_xep0227: Add scram-credentials to user element rather than server
Matthew Wild <mwild1@gmail.com>
parents:
11789
diff
changeset
|
130 usere:add_child(scram_el); |
11789
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
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:
8352
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:
8352
diff
changeset
|
133 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
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:
8352
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:
8352
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:
8352
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:
8352
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:
8352
diff
changeset
|
139 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
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:
8352
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:
8352
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:
8352
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:
8352
diff
changeset
|
144 |
12173
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
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) |
12173
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
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) |
12173
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
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 |
12082
e87563fefd85
mod_storage_xep0227: Replace custom tag-removal helpers with :remove_children()
Matthew Wild <mwild1@gmail.com>
parents:
11840
diff
changeset
|
162 usere:remove_children("vCard", "vcard-temp"); |
12188
0fee75871f78
mod_storage_xep0227: be defensive against empty vCard
Jonas Schäfer <jonas@wielicki.name>
parents:
12185
diff
changeset
|
163 if not data or not data.attr then |
12082
e87563fefd85
mod_storage_xep0227: Replace custom tag-removal helpers with :remove_children()
Matthew Wild <mwild1@gmail.com>
parents:
11840
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 |
12082
e87563fefd85
mod_storage_xep0227: Replace custom tag-removal helpers with :remove_children()
Matthew Wild <mwild1@gmail.com>
parents:
11840
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:
11840
diff
changeset
|
168 usere:add_child(vcard); |
12173
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
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) |
12173
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
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) |
12173
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
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 |
12082
e87563fefd85
mod_storage_xep0227: Replace custom tag-removal helpers with :remove_children()
Matthew Wild <mwild1@gmail.com>
parents:
11840
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 |
12082
e87563fefd85
mod_storage_xep0227: Replace custom tag-removal helpers with :remove_children()
Matthew Wild <mwild1@gmail.com>
parents:
11840
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 |
12173
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
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 |
8351
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
206 handlers.roster = { |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
207 get = function(self, user) |
12173
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
208 user = getUserElement(self:_get_user_xml(user, self.host)); |
8351
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
209 if user then |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
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:
8350
diff
changeset
|
211 if roster then |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
212 local r = { |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
213 [false] = { |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
214 version = roster.attr.version; |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
215 pending = {}; |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
216 } |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
217 }; |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
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:
8350
diff
changeset
|
219 r[item.attr.jid] = { |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
220 jid = item.attr.jid, |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
221 subscription = item.attr.subscription, |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
222 ask = item.attr.ask, |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
223 name = item.attr.name, |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
224 groups = {}; |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
225 }; |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
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:
8350
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:
8350
diff
changeset
|
228 end |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
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:
8350
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:
8350
diff
changeset
|
231 end |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
232 end |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
233 return r; |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
234 end |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
235 end |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
236 end; |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
237 set = function(self, user, data) |
12173
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
238 local xml = self:_get_user_xml(user, self.host); |
8351
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
239 local usere = xml and getUserElement(xml); |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
240 if usere then |
12185
708769a4c5da
mod_storage_xep0227: Fix luacheck warnings
Matthew Wild <mwild1@gmail.com>
parents:
12184
diff
changeset
|
241 local user_jid = jid_join(usere.name, self.host); |
12082
e87563fefd85
mod_storage_xep0227: Replace custom tag-removal helpers with :remove_children()
Matthew Wild <mwild1@gmail.com>
parents:
11840
diff
changeset
|
242 usere:remove_children("query", "jabber:iq:roster"); |
8351
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
243 usere:maptags(function (tag) |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
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:
8350
diff
changeset
|
245 return nil; |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
246 end |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
247 return tag; |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
248 end); |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
249 if data and next(data) ~= nil then |
12082
e87563fefd85
mod_storage_xep0227: Replace custom tag-removal helpers with :remove_children()
Matthew Wild <mwild1@gmail.com>
parents:
11840
diff
changeset
|
250 local roster = st.stanza("query", {xmlns='jabber:iq:roster'}); |
8351
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
251 usere:add_child(roster); |
12183
e77c938ed92b
mod_storage_xep0227: Skip self-contacts on roster import
Matthew Wild <mwild1@gmail.com>
parents:
12176
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:
12176
diff
changeset
|
253 if contact_jid ~= false then |
12189
82c8e855c850
mod_storage_xep0227: treat roster metadata pseudo-entry correctly
Jonas Schäfer <jonas@wielicki.name>
parents:
12188
diff
changeset
|
254 contact_jid = jid_bare(jid_prep(contact_jid)); |
12183
e77c938ed92b
mod_storage_xep0227: Skip self-contacts on roster import
Matthew Wild <mwild1@gmail.com>
parents:
12176
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:
12176
diff
changeset
|
256 roster:tag("item", { |
e77c938ed92b
mod_storage_xep0227: Skip self-contacts on roster import
Matthew Wild <mwild1@gmail.com>
parents:
12176
diff
changeset
|
257 jid = contact_jid, |
e77c938ed92b
mod_storage_xep0227: Skip self-contacts on roster import
Matthew Wild <mwild1@gmail.com>
parents:
12176
diff
changeset
|
258 subscription = item.subscription, |
e77c938ed92b
mod_storage_xep0227: Skip self-contacts on roster import
Matthew Wild <mwild1@gmail.com>
parents:
12176
diff
changeset
|
259 ask = item.ask, |
e77c938ed92b
mod_storage_xep0227: Skip self-contacts on roster import
Matthew Wild <mwild1@gmail.com>
parents:
12176
diff
changeset
|
260 name = item.name, |
e77c938ed92b
mod_storage_xep0227: Skip self-contacts on roster import
Matthew Wild <mwild1@gmail.com>
parents:
12176
diff
changeset
|
261 }); |
e77c938ed92b
mod_storage_xep0227: Skip self-contacts on roster import
Matthew Wild <mwild1@gmail.com>
parents:
12176
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:
12176
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:
12176
diff
changeset
|
264 end |
e77c938ed92b
mod_storage_xep0227: Skip self-contacts on roster import
Matthew Wild <mwild1@gmail.com>
parents:
12176
diff
changeset
|
265 roster:up(); -- move out from item |
8351
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
266 end |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
267 else |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
268 roster.attr.version = item.version; |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
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:
8350
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:
8350
diff
changeset
|
271 end |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
272 end |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
273 end |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
274 end |
12173
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
275 return self:_set_user_xml(user, self.host, xml); |
8351
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
276 end |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
277 return true; |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
278 end; |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
279 }; |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
280 |
11789
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
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:
8352
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:
8352
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:
8352
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:
8352
diff
changeset
|
285 get = function (self, user) |
12173
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
286 local xml = self:_get_user_xml(user, self.host); |
11789
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
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:
8352
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:
8352
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:
8352
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:
8352
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:
8352
diff
changeset
|
292 --[[ |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
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:
8352
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:
8352
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:
8352
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:
8352
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:
8352
diff
changeset
|
298 }; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
299 ]] |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
300 }; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
301 local owner_el = user_el:get_child("pubsub", xmlns_pubsub_owner); |
12454
b2438f374b3e
mod_storage_xep0227: Handle missing {pubsub#owner}pubsub element (fixes #1740)
Matthew Wild <mwild1@gmail.com>
parents:
12355
diff
changeset
|
302 if not owner_el then |
b2438f374b3e
mod_storage_xep0227: Handle missing {pubsub#owner}pubsub element (fixes #1740)
Matthew Wild <mwild1@gmail.com>
parents:
12355
diff
changeset
|
303 return nil; |
b2438f374b3e
mod_storage_xep0227: Handle missing {pubsub#owner}pubsub element (fixes #1740)
Matthew Wild <mwild1@gmail.com>
parents:
12355
diff
changeset
|
304 end |
11789
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
305 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:
8352
diff
changeset
|
306 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:
8352
diff
changeset
|
307 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:
8352
diff
changeset
|
308 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:
8352
diff
changeset
|
309 node = { |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
310 name = node_name; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
311 config = {}; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
312 affiliations = {}; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
313 subscribers = {}; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
314 }; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
315 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:
8352
diff
changeset
|
316 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
317 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:
8352
diff
changeset
|
318 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:
8352
diff
changeset
|
319 if form then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
320 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:
8352
diff
changeset
|
321 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
322 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:
8352
diff
changeset
|
323 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:
8352
diff
changeset
|
324 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:
8352
diff
changeset
|
325 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:
8352
diff
changeset
|
326 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:
8352
diff
changeset
|
327 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:
8352
diff
changeset
|
328 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
329 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
330 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:
8352
diff
changeset
|
331 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:
8352
diff
changeset
|
332 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:
8352
diff
changeset
|
333 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:
8352
diff
changeset
|
334 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:
8352
diff
changeset
|
335 local options; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
336 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:
8352
diff
changeset
|
337 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:
8352
diff
changeset
|
338 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:
8352
diff
changeset
|
339 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:
8352
diff
changeset
|
340 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:
8352
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:
8352
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:
8352
diff
changeset
|
343 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:
8352
diff
changeset
|
344 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
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:
8352
diff
changeset
|
346 else |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
347 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:
8352
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:
8352
diff
changeset
|
349 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
350 return nodes; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
351 end; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
352 set = function(self, user, data) |
12173
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
353 local xml = self:_get_user_xml(user, self.host); |
11789
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
354 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:
8352
diff
changeset
|
355 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:
8352
diff
changeset
|
356 return true; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
357 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
358 -- 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:
8352
diff
changeset
|
359 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:
8352
diff
changeset
|
360 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
361 -- Generate new data |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
362 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:
8352
diff
changeset
|
363 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
364 for node_name, node_data in pairs(data) do |
12174
a38b7cb5fd6a
mod_storage_xep0227: Support for exporting nodes with no stored configuration
Matthew Wild <mwild1@gmail.com>
parents:
12173
diff
changeset
|
365 if node_data == true then |
a38b7cb5fd6a
mod_storage_xep0227: Support for exporting nodes with no stored configuration
Matthew Wild <mwild1@gmail.com>
parents:
12173
diff
changeset
|
366 node_data = { config = {} }; |
a38b7cb5fd6a
mod_storage_xep0227: Support for exporting nodes with no stored configuration
Matthew Wild <mwild1@gmail.com>
parents:
12173
diff
changeset
|
367 end |
11789
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
368 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:
8352
diff
changeset
|
369 :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:
8352
diff
changeset
|
370 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:
8352
diff
changeset
|
371 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:
8352
diff
changeset
|
372 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:
8352
diff
changeset
|
373 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:
8352
diff
changeset
|
374 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:
8352
diff
changeset
|
375 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
376 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:
8352
diff
changeset
|
377 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
378 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:
8352
diff
changeset
|
379 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:
8352
diff
changeset
|
380 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:
8352
diff
changeset
|
381 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:
8352
diff
changeset
|
382 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:
8352
diff
changeset
|
383 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:
8352
diff
changeset
|
384 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:
8352
diff
changeset
|
385 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
386 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:
8352
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:
8352
diff
changeset
|
388 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:
8352
diff
changeset
|
389 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
390 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
391 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
392 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:
8352
diff
changeset
|
393 |
12173
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
394 return self:_set_user_xml(user, self.host, xml); |
11789
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
395 end; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
396 }; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
397 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
398 -- PEP items |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
399 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:
8352
diff
changeset
|
400 handlers.pep_ = { |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
401 _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:
8352
diff
changeset
|
402 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:
8352
diff
changeset
|
403 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
404 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:
8352
diff
changeset
|
405 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:
8352
diff
changeset
|
406 return store_names; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
407 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
408 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
409 -- 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:
8352
diff
changeset
|
410 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:
8352
diff
changeset
|
411 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:
8352
diff
changeset
|
412 return store_names; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
413 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
414 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
415 -- 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:
8352
diff
changeset
|
416 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:
8352
diff
changeset
|
417 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:
8352
diff
changeset
|
418 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
419 return store_names; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
420 end; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
421 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:
8352
diff
changeset
|
422 -- 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:
8352
diff
changeset
|
423 |
12173
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
424 local xml = self:_get_user_xml(user, self.host); |
11789
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
425 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:
8352
diff
changeset
|
426 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:
8352
diff
changeset
|
427 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:
8352
diff
changeset
|
428 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
429 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
430 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:
8352
diff
changeset
|
431 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
432 -- 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:
8352
diff
changeset
|
433 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:
8352
diff
changeset
|
434 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:
8352
diff
changeset
|
435 return nil; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
436 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
437 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
438 -- 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:
8352
diff
changeset
|
439 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:
8352
diff
changeset
|
440 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:
8352
diff
changeset
|
441 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:
8352
diff
changeset
|
442 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:
8352
diff
changeset
|
443 break; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
444 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
445 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
446 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
447 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:
8352
diff
changeset
|
448 return nil; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
449 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
450 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
451 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:
8352
diff
changeset
|
452 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
453 local results = {}; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
454 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:
8352
diff
changeset
|
455 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:
8352
diff
changeset
|
456 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:
8352
diff
changeset
|
457 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:
8352
diff
changeset
|
458 break; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
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:
8352
diff
changeset
|
460 else |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
461 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:
8352
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:
8352
diff
changeset
|
463 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:
8352
diff
changeset
|
464 break; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
465 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
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:
8352
diff
changeset
|
467 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:
8352
diff
changeset
|
468 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:
8352
diff
changeset
|
469 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
470 local i = 0; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
471 return function () |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
472 i = i + 1; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
473 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:
8352
diff
changeset
|
474 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:
8352
diff
changeset
|
475 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:
8352
diff
changeset
|
476 end; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
477 end; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
478 append = function (self, user, key, payload, when, with) --luacheck: ignore 212/when 212/with 212/key |
12173
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
479 local xml = self:_get_user_xml(user, self.host); |
11789
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
480 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:
8352
diff
changeset
|
481 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:
8352
diff
changeset
|
482 return true; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
483 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
484 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
485 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:
8352
diff
changeset
|
486 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
487 -- 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:
8352
diff
changeset
|
488 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:
8352
diff
changeset
|
489 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:
8352
diff
changeset
|
490 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:
8352
diff
changeset
|
491 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:
8352
diff
changeset
|
492 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
493 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
494 -- 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:
8352
diff
changeset
|
495 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:
8352
diff
changeset
|
496 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:
8352
diff
changeset
|
497 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:
8352
diff
changeset
|
498 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:
8352
diff
changeset
|
499 break; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
500 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
501 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
502 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
503 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:
8352
diff
changeset
|
504 -- 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:
8352
diff
changeset
|
505 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:
8352
diff
changeset
|
506 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:
8352
diff
changeset
|
507 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
508 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
509 -- 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:
8352
diff
changeset
|
510 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:
8352
diff
changeset
|
511 :add_child(payload); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
512 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:
8352
diff
changeset
|
513 |
12173
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
514 return self:_set_user_xml(user, self.host, xml); |
11789
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
515 end; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
516 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:
8352
diff
changeset
|
517 -- 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:
8352
diff
changeset
|
518 |
12173
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
519 local xml = self:_get_user_xml(user, self.host); |
11789
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
520 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:
8352
diff
changeset
|
521 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:
8352
diff
changeset
|
522 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:
8352
diff
changeset
|
523 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
524 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
525 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:
8352
diff
changeset
|
526 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
527 -- 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:
8352
diff
changeset
|
528 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:
8352
diff
changeset
|
529 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:
8352
diff
changeset
|
530 return nil; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
531 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
532 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
533 -- 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:
8352
diff
changeset
|
534 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:
8352
diff
changeset
|
535 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:
8352
diff
changeset
|
536 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:
8352
diff
changeset
|
537 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:
8352
diff
changeset
|
538 break; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
539 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
540 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
541 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
542 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:
8352
diff
changeset
|
543 return nil; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
544 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
545 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
546 local results = array(); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
547 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:
8352
diff
changeset
|
548 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:
8352
diff
changeset
|
549 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:
8352
diff
changeset
|
550 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:
8352
diff
changeset
|
551 break; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
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:
8352
diff
changeset
|
553 else |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
554 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:
8352
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:
8352
diff
changeset
|
556 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:
8352
diff
changeset
|
557 break; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
558 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
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:
8352
diff
changeset
|
560 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:
8352
diff
changeset
|
561 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:
8352
diff
changeset
|
562 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
563 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
564 -- 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:
8352
diff
changeset
|
565 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:
8352
diff
changeset
|
566 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:
8352
diff
changeset
|
567 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:
8352
diff
changeset
|
568 return nil; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
569 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
570 return item_el; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
571 end); |
12173
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
572 return self:_set_user_xml(user, self.host, xml); |
11789
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
573 end; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
574 }; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
575 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
576 -- MAM archives |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
577 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:
8352
diff
changeset
|
578 handlers.archive = { |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
579 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:
8352
diff
changeset
|
580 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:
8352
diff
changeset
|
581 |
12173
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
582 local xml = self:_get_user_xml(user, self.host); |
11789
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
583 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:
8352
diff
changeset
|
584 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:
8352
diff
changeset
|
585 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:
8352
diff
changeset
|
586 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
587 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
588 -- 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:
8352
diff
changeset
|
589 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:
8352
diff
changeset
|
590 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:
8352
diff
changeset
|
591 return nil; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
592 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
593 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
594 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:
8352
diff
changeset
|
595 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
596 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
597 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:
8352
diff
changeset
|
598 return function () |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
599 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:
8352
diff
changeset
|
600 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:
8352
diff
changeset
|
601 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
602 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:
8352
diff
changeset
|
603 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:
8352
diff
changeset
|
604 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:
8352
diff
changeset
|
605 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:
8352
diff
changeset
|
606 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:
8352
diff
changeset
|
607 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:
8352
diff
changeset
|
608 -- 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:
8352
diff
changeset
|
609 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:
8352
diff
changeset
|
610 end; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
611 end; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
612 append = function (self, user, key, payload, when, with) --luacheck: ignore 212/when 212/with 212/key |
12173
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
613 local xml = self:_get_user_xml(user, self.host); |
11789
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
614 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:
8352
diff
changeset
|
615 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:
8352
diff
changeset
|
616 return true; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
617 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
618 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
619 -- 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:
8352
diff
changeset
|
620 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:
8352
diff
changeset
|
621 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:
8352
diff
changeset
|
622 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:
8352
diff
changeset
|
623 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:
8352
diff
changeset
|
624 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
625 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
626 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:
8352
diff
changeset
|
627 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:
8352
diff
changeset
|
628 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
629 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:
8352
diff
changeset
|
630 :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:
8352
diff
changeset
|
631 :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:
8352
diff
changeset
|
632 :add_child(item) |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
633 :up(); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
634 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
635 -- 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:
8352
diff
changeset
|
636 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:
8352
diff
changeset
|
637 |
12173
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
638 return self:_set_user_xml(user, self.host, xml); |
11789
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
639 end; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
640 }; |
8351
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
641 |
3414
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
642 ----------------------------- |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
643 local driver = {}; |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
644 |
11789
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
645 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:
8352
diff
changeset
|
646 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:
8352
diff
changeset
|
647 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
648 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:
8352
diff
changeset
|
649 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
650 return function () |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
651 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:
8352
diff
changeset
|
652 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:
8352
diff
changeset
|
653 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:
8352
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:
8352
diff
changeset
|
655 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:
8352
diff
changeset
|
656 return filename:match("^[^@]+"); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
657 end; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
658 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
659 |
8352
6ff50541d2a6
mod_storage_xep0227: Ignore unused 'self' argument [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8351
diff
changeset
|
660 function driver:open(datastore, typ) -- luacheck: ignore 212/self |
11789
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
661 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
|
662 local handler = handlers[datastore]; |
11789
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
663 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:
8352
diff
changeset
|
664 handler = handlers.pep_; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
665 end |
6701
88a25c364a14
mod_storage_xep0227: Update open method for current API
Kim Alvefur <zash@zash.se>
parents:
6700
diff
changeset
|
666 if not handler then return nil, "unsupported-datastore"; end |
12173
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
667 local instance = setmetatable({ |
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
668 host = module.host; |
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
669 datastore = datastore; |
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
670 users = users; |
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
671 _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:
12082
diff
changeset
|
672 _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:
12082
diff
changeset
|
673 }, { |
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
674 __index = handler; |
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
675 } |
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
676 ); |
3414
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
677 if instance.init then instance:init(); end |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
678 return instance; |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
679 end |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
680 |
12173
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
681 -- 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:
12082
diff
changeset
|
682 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:
12082
diff
changeset
|
683 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:
12082
diff
changeset
|
684 if not instance then |
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
685 return instance, err; |
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
686 end |
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
687 if options then |
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
688 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:
12082
diff
changeset
|
689 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:
12082
diff
changeset
|
690 end |
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
691 return instance; |
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
692 end |
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
693 |
12184
326f5466ddc7
mod_storage_xep0227: Add API to iterate all stores of a user
Matthew Wild <mwild1@gmail.com>
parents:
12183
diff
changeset
|
694 local function get_store_names_from_xml(self, user_xml) |
326f5466ddc7
mod_storage_xep0227: Add API to iterate all stores of a user
Matthew Wild <mwild1@gmail.com>
parents:
12183
diff
changeset
|
695 local stores = set.new(); |
326f5466ddc7
mod_storage_xep0227: Add API to iterate all stores of a user
Matthew Wild <mwild1@gmail.com>
parents:
12183
diff
changeset
|
696 for handler_name, handler_funcs in pairs(handlers) do |
326f5466ddc7
mod_storage_xep0227: Add API to iterate all stores of a user
Matthew Wild <mwild1@gmail.com>
parents:
12183
diff
changeset
|
697 if handler_funcs._stores then |
326f5466ddc7
mod_storage_xep0227: Add API to iterate all stores of a user
Matthew Wild <mwild1@gmail.com>
parents:
12183
diff
changeset
|
698 stores:include(handler_funcs._stores(self, user_xml)); |
326f5466ddc7
mod_storage_xep0227: Add API to iterate all stores of a user
Matthew Wild <mwild1@gmail.com>
parents:
12183
diff
changeset
|
699 else |
12194
9965d7d126c7
mod_storage_xep0227: Fix traceback during iteration of driver stores
Matthew Wild <mwild1@gmail.com>
parents:
12193
diff
changeset
|
700 stores:add(handler_name); |
12184
326f5466ddc7
mod_storage_xep0227: Add API to iterate all stores of a user
Matthew Wild <mwild1@gmail.com>
parents:
12183
diff
changeset
|
701 end |
326f5466ddc7
mod_storage_xep0227: Add API to iterate all stores of a user
Matthew Wild <mwild1@gmail.com>
parents:
12183
diff
changeset
|
702 end |
326f5466ddc7
mod_storage_xep0227: Add API to iterate all stores of a user
Matthew Wild <mwild1@gmail.com>
parents:
12183
diff
changeset
|
703 return stores; |
326f5466ddc7
mod_storage_xep0227: Add API to iterate all stores of a user
Matthew Wild <mwild1@gmail.com>
parents:
12183
diff
changeset
|
704 end |
326f5466ddc7
mod_storage_xep0227: Add API to iterate all stores of a user
Matthew Wild <mwild1@gmail.com>
parents:
12183
diff
changeset
|
705 |
11789
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
706 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:
8352
diff
changeset
|
707 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:
8352
diff
changeset
|
708 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:
8352
diff
changeset
|
709 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:
8352
diff
changeset
|
710 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:
8352
diff
changeset
|
711 return stores; |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
712 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
713 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:
8352
diff
changeset
|
714 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:
8352
diff
changeset
|
715 f:close(); |
12184
326f5466ddc7
mod_storage_xep0227: Add API to iterate all stores of a user
Matthew Wild <mwild1@gmail.com>
parents:
12183
diff
changeset
|
716 local user_xml = parse_xml_real(s); |
326f5466ddc7
mod_storage_xep0227: Add API to iterate all stores of a user
Matthew Wild <mwild1@gmail.com>
parents:
12183
diff
changeset
|
717 return get_store_names_from_xml(self, user_xml); |
11789
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
718 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
719 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
720 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:
8352
diff
changeset
|
721 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:
8352
diff
changeset
|
722 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
723 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:
8352
diff
changeset
|
724 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:
8352
diff
changeset
|
725 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:
8352
diff
changeset
|
726 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
727 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
728 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:
8352
diff
changeset
|
729 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
730 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:
8352
diff
changeset
|
731 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
732 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:
8352
diff
changeset
|
733 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
734 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:
8352
diff
changeset
|
735 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:
8352
diff
changeset
|
736 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:
8352
diff
changeset
|
737 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:
8352
diff
changeset
|
738 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:
8352
diff
changeset
|
739 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
740 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
741 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
742 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
743 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:
8352
diff
changeset
|
744 end |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
745 |
12184
326f5466ddc7
mod_storage_xep0227: Add API to iterate all stores of a user
Matthew Wild <mwild1@gmail.com>
parents:
12183
diff
changeset
|
746 function driver:xep0227_user_stores(username, host) |
326f5466ddc7
mod_storage_xep0227: Add API to iterate all stores of a user
Matthew Wild <mwild1@gmail.com>
parents:
12183
diff
changeset
|
747 local user_xml = self:_get_user_xml(username, host); |
326f5466ddc7
mod_storage_xep0227: Add API to iterate all stores of a user
Matthew Wild <mwild1@gmail.com>
parents:
12183
diff
changeset
|
748 if not user_xml then |
326f5466ddc7
mod_storage_xep0227: Add API to iterate all stores of a user
Matthew Wild <mwild1@gmail.com>
parents:
12183
diff
changeset
|
749 return nil; |
326f5466ddc7
mod_storage_xep0227: Add API to iterate all stores of a user
Matthew Wild <mwild1@gmail.com>
parents:
12183
diff
changeset
|
750 end |
326f5466ddc7
mod_storage_xep0227: Add API to iterate all stores of a user
Matthew Wild <mwild1@gmail.com>
parents:
12183
diff
changeset
|
751 local store_names = get_store_names_from_xml(username, host); |
326f5466ddc7
mod_storage_xep0227: Add API to iterate all stores of a user
Matthew Wild <mwild1@gmail.com>
parents:
12183
diff
changeset
|
752 return store_names:items(); |
326f5466ddc7
mod_storage_xep0227: Add API to iterate all stores of a user
Matthew Wild <mwild1@gmail.com>
parents:
12183
diff
changeset
|
753 end |
326f5466ddc7
mod_storage_xep0227: Add API to iterate all stores of a user
Matthew Wild <mwild1@gmail.com>
parents:
12183
diff
changeset
|
754 |
5121
b5a5643f8572
core.storagemanager, mod_storage_*: "data-driver" -> "storage-provider", to allow using module:provides().
Waqas Hussain <waqas20@gmail.com>
parents:
3414
diff
changeset
|
755 module:provides("storage", driver); |