Software /
code /
prosody
Annotate
plugins/mod_storage_xep0227.lua @ 12179:5e68635cdc2c
mod_http_file_share: Always measure total disk usage for statistics!
Metrics available or not depending on configuration is weird, even tho
it might be expensive to calculate and it's only really needed when
there is a global quota.
Default quota is set to infinity, which is essentially what it was.
Reports NaN if there is an error, which should count as over the
infinite default quota.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Tue, 11 Jan 2022 04:15:29 +0100 |
parent | 12176:e7639625a848 |
child | 12183:e77c938ed92b |
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 |
12173
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
37 local function default_set_user_xml(user, host, xml) |
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) |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
71 return base64.encode(hex.from(s)); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
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) |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
75 return base64.encode(hex.from(s)); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
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"); |
e87563fefd85
mod_storage_xep0227: Replace custom tag-removal helpers with :remove_children()
Matthew Wild <mwild1@gmail.com>
parents:
11840
diff
changeset
|
163 if not data then |
e87563fefd85
mod_storage_xep0227: Replace custom tag-removal helpers with :remove_children()
Matthew Wild <mwild1@gmail.com>
parents:
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 |
12082
e87563fefd85
mod_storage_xep0227: Replace custom tag-removal helpers with :remove_children()
Matthew Wild <mwild1@gmail.com>
parents:
11840
diff
changeset
|
241 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
|
242 usere:maptags(function (tag) |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
243 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
|
244 return nil; |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
245 end |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
246 return tag; |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
247 end); |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
248 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
|
249 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
|
250 usere:add_child(roster); |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
251 for jid, item in pairs(data) do |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
252 if jid then |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
253 roster:tag("item", { |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
254 jid = jid, |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
255 subscription = item.subscription, |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
256 ask = item.ask, |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
257 name = item.name, |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
258 }); |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
259 for group in pairs(item.groups) do |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
260 roster:tag("group"):text(group):up(); |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
261 end |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
262 roster:up(); -- move out from item |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
263 else |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
264 roster.attr.version = item.version; |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
265 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
|
266 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
|
267 end |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
268 end |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
269 end |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
270 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
|
271 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
|
272 end |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
273 return true; |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
274 end; |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
275 }; |
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
276 |
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
|
277 -- 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
|
278 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
|
279 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
|
280 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
|
281 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
|
282 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
|
283 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
|
284 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
|
285 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
|
286 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
|
287 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
|
288 --[[ |
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 [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
|
290 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
|
291 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
|
292 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
|
293 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
|
294 }; |
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 ]] |
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 }; |
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 local owner_el = user_el:get_child("pubsub", xmlns_pubsub_owner); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
298 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
|
299 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
|
300 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
|
301 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
|
302 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
|
303 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
|
304 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
|
305 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
|
306 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
|
307 }; |
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 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
|
309 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
|
310 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
|
311 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
|
312 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
|
313 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
|
314 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
|
315 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
|
316 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
|
317 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
|
318 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
|
319 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
|
320 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
|
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 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
|
323 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
|
324 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
|
325 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
|
326 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
|
327 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
|
328 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
|
329 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
|
330 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
|
331 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
|
332 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
|
333 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
|
334 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
|
335 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
|
336 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
|
337 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
|
338 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
|
339 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
|
340 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
|
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 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
|
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 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
|
346 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
|
347 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
|
348 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
|
349 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
|
350 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
|
351 -- 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
|
352 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
|
353 |
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 -- 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
|
355 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
|
356 |
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 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
|
358 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
|
359 node_data = { config = {} }; |
a38b7cb5fd6a
mod_storage_xep0227: Support for exporting nodes with no stored configuration
Matthew Wild <mwild1@gmail.com>
parents:
12173
diff
changeset
|
360 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
|
361 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
|
362 :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
|
363 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
|
364 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
|
365 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
|
366 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
|
367 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
|
368 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
|
369 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
|
370 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
|
371 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
|
372 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
|
373 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
|
374 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
|
375 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
|
376 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
|
377 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
|
378 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
|
379 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
|
380 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
|
381 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
|
382 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
|
383 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
|
384 |
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 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
|
386 |
12173
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
387 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
|
388 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
|
389 }; |
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 |
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 -- 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
|
392 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
|
393 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
|
394 _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
|
395 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
|
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 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
|
398 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
|
399 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
|
400 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
|
401 |
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 -- 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
|
403 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
|
404 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
|
405 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
|
406 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
|
407 |
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 -- 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
|
409 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
|
410 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
|
411 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
|
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 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
|
415 -- 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
|
416 |
12173
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
417 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
|
418 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
|
419 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
|
420 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
|
421 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
|
422 |
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 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
|
424 |
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 -- 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
|
426 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
|
427 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
|
428 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
|
429 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
|
430 |
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 -- 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
|
432 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
|
433 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
|
434 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
|
435 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
|
436 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
|
437 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
|
438 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
|
439 |
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 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
|
441 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
|
442 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
|
443 |
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 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
|
445 |
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 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
|
447 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
|
448 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
|
449 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
|
450 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
|
451 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
|
452 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
|
453 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
|
454 table.insert(results, { item_el.attr.id, item_el.tags[1], 0, user_jid }); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
455 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
|
456 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
|
457 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
|
458 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
|
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 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
|
461 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
|
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 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
|
464 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
|
465 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
|
466 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
|
467 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
|
468 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
|
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 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
|
471 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
|
472 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
|
473 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
|
474 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
|
475 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
|
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 |
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 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
|
479 |
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 -- 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
|
481 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
|
482 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
|
483 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
|
484 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
|
485 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
|
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 -- 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
|
488 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
|
489 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
|
490 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
|
491 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
|
492 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
|
493 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
|
494 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
|
495 |
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 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
|
497 -- 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
|
498 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
|
499 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
|
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 |
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 -- 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
|
503 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
|
504 :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
|
505 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
|
506 |
12173
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
507 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
|
508 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
|
509 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
|
510 -- 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
|
511 |
12173
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
512 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
|
513 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
|
514 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
|
515 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
|
516 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
|
517 |
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 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
|
519 |
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 -- 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
|
521 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
|
522 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
|
523 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
|
524 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
|
525 |
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 -- 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
|
527 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
|
528 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
|
529 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
|
530 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
|
531 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
|
532 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
|
533 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
|
534 |
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 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
|
536 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
|
537 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
|
538 |
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 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
|
540 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
|
541 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
|
542 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
|
543 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
|
544 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
|
545 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
|
546 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
|
547 table.insert(results, item_el); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
548 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
|
549 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
|
550 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
|
551 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
|
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 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
|
554 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
|
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 |
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 -- 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
|
558 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
|
559 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
|
560 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
|
561 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
|
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 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
|
564 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
|
565 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
|
566 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
|
567 }; |
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 |
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 -- 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
|
570 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
|
571 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
|
572 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
|
573 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
|
574 |
12173
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
575 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
|
576 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
|
577 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
|
578 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
|
579 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
|
580 |
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 -- 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
|
582 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
|
583 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
|
584 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
|
585 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
|
586 |
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 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
|
588 |
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 |
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 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
|
591 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
|
592 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
|
593 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
|
594 |
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 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
|
596 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
|
597 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
|
598 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
|
599 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
|
600 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
|
601 -- 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
|
602 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
|
603 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
|
604 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
|
605 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
|
606 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
|
607 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
|
608 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
|
609 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
|
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 |
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 -- 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
|
613 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
|
614 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
|
615 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
|
616 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
|
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 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
|
620 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
|
621 |
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 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
|
623 :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
|
624 :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
|
625 :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
|
626 :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
|
627 |
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 -- 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
|
629 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
|
630 |
12173
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
631 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
|
632 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
|
633 }; |
8351
cc05b6366576
mod_storage_xep0227: Add roster storage (fixes #1023)
Kim Alvefur <zash@zash.se>
parents:
8350
diff
changeset
|
634 |
3414
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
635 ----------------------------- |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
636 local driver = {}; |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
637 |
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
|
638 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
|
639 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
|
640 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
641 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
|
642 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
643 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
|
644 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
|
645 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
|
646 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
|
647 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
|
648 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
|
649 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
|
650 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
|
651 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
|
652 |
8352
6ff50541d2a6
mod_storage_xep0227: Ignore unused 'self' argument [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8351
diff
changeset
|
653 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
|
654 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
|
655 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
|
656 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
|
657 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
|
658 end |
6701
88a25c364a14
mod_storage_xep0227: Update open method for current API
Kim Alvefur <zash@zash.se>
parents:
6700
diff
changeset
|
659 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
|
660 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
|
661 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
|
662 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
|
663 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
|
664 _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
|
665 _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
|
666 }, { |
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
667 __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
|
668 } |
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
669 ); |
3414
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
670 if instance.init then instance:init(); end |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
671 return instance; |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
672 end |
9a1f6239b63c
storage/mod_xep0227: Initial commit.
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
673 |
12173
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
674 -- 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
|
675 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
|
676 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
|
677 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
|
678 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
|
679 end |
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
680 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
|
681 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
|
682 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
|
683 end |
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
684 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
|
685 end |
270047afa6af
mod_storage_xep0227: Allow overriding the input/output layer for XEP-0227 data
Matthew Wild <mwild1@gmail.com>
parents:
12082
diff
changeset
|
686 |
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
|
687 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
|
688 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
|
689 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
|
690 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
|
691 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
|
692 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
|
693 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
|
694 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
|
695 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
|
696 f:close(); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
697 local xml = parse_xml_real(s); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
698 for _, handler_funcs in pairs(handlers) do |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
699 if handler_funcs._stores then |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
700 stores:include(handler_funcs._stores(self, xml)); |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
701 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
|
702 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
|
703 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
|
704 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
|
705 |
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 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
|
707 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
|
708 |
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 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
|
710 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
|
711 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
|
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 |
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 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
|
715 |
f3085620b6ff
mod_storage_xep0227: Update for XEP-0227 r1.1: Support for SCRAM, MAM, PEP
Matthew Wild <mwild1@gmail.com>
parents:
8352
diff
changeset
|
716 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
|
717 |
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 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
|
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 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
|
721 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
|
722 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
|
723 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
|
724 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
|
725 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 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
|
728 |
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 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
|
730 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
|
731 |
5121
b5a5643f8572
core.storagemanager, mod_storage_*: "data-driver" -> "storage-provider", to allow using module:provides().
Waqas Hussain <waqas20@gmail.com>
parents:
3414
diff
changeset
|
732 module:provides("storage", driver); |