Annotate

plugins/mod_private.lua @ 7665:2e553f80aedd

mod_component: Fire 'component-disconnected' event on host, to maintain consistency - sessions with no host never authenticated. Fixes #737
author Matthew Wild <mwild1@gmail.com>
date Mon, 12 Sep 2016 22:30:37 +0100
parent 6841:be87ab2d611c
child 6843:161cccfdf015
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1523
841d61be198f Remove version number from copyright headers
Matthew Wild <mwild1@gmail.com>
parents: 896
diff changeset
1 -- Prosody IM
2923
b7049746bd29 Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents: 1523
diff changeset
2 -- Copyright (C) 2008-2010 Matthew Wild
b7049746bd29 Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents: 1523
diff changeset
3 -- Copyright (C) 2008-2010 Waqas Hussain
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5500
diff changeset
4 --
758
b1885732e979 GPL->MIT!
Matthew Wild <mwild1@gmail.com>
parents: 615
diff changeset
5 -- This project is MIT/X11 licensed. Please see the
b1885732e979 GPL->MIT!
Matthew Wild <mwild1@gmail.com>
parents: 615
diff changeset
6 -- COPYING file in the source package for more information.
519
cccd610a0ef9 Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents: 438
diff changeset
7 --
cccd610a0ef9 Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents: 438
diff changeset
8
cccd610a0ef9 Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents: 438
diff changeset
9
185
a67c88ce1c6a Added support for XEP-0049: Private XML Storage (mod_private)
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
10 local st = require "util.stanza"
a67c88ce1c6a Added support for XEP-0049: Private XML Storage (mod_private)
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
11
5500
eeea0eb2602a mod_auth_internal_hashed, mod_auth_internal_plain, mod_privacy, mod_private, mod_register, mod_vcard, mod_muc: Use module:open_store()
Kim Alvefur <zash@zash.se>
parents: 5371
diff changeset
12 local private_storage = module:open_store();
185
a67c88ce1c6a Added support for XEP-0049: Private XML Storage (mod_private)
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
13
541
3521e0851c9e Change modules to use the new add_feature module API method.
Waqas Hussain <waqas20@gmail.com>
parents: 519
diff changeset
14 module:add_feature("jabber:iq:private");
421
63be85693710 Modules now sending disco replies
Waqas Hussain <waqas20@gmail.com>
parents: 310
diff changeset
15
3522
4646b5b039ca mod_private: Updated to use the new events API. Smaller, more robust.
Waqas Hussain <waqas20@gmail.com>
parents: 3114
diff changeset
16 module:hook("iq/self/jabber:iq:private:query", function(event)
4646b5b039ca mod_private: Updated to use the new events API. Smaller, more robust.
Waqas Hussain <waqas20@gmail.com>
parents: 3114
diff changeset
17 local origin, stanza = event.origin, event.stanza;
4646b5b039ca mod_private: Updated to use the new events API. Smaller, more robust.
Waqas Hussain <waqas20@gmail.com>
parents: 3114
diff changeset
18 local query = stanza.tags[1];
6341
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
19 if #query.tags ~= 1 then
6841
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6353
diff changeset
20 origin.send(st.error_reply(stanza, "modify", "bad-format"));
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6353
diff changeset
21 return true;
6341
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
22 end
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
23 local tag = query.tags[1];
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
24 local key = tag.name..":"..tag.attr.xmlns;
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
25 local data, err = private_storage:get(origin.username);
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
26 if err then
6841
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6353
diff changeset
27 origin.send(st.error_reply(stanza, "wait", "internal-server-error", err));
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6353
diff changeset
28 return true;
6341
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
29 end
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
30 if stanza.attr.type == "get" then
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
31 if data and data[key] then
6841
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6353
diff changeset
32 origin.send(st.reply(stanza):query("jabber:iq:private"):add_child(st.deserialize(data[key])));
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6353
diff changeset
33 return true;
6341
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
34 else
6841
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6353
diff changeset
35 origin.send(st.reply(stanza):add_child(query));
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6353
diff changeset
36 return true;
3522
4646b5b039ca mod_private: Updated to use the new events API. Smaller, more robust.
Waqas Hussain <waqas20@gmail.com>
parents: 3114
diff changeset
37 end
6341
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
38 else -- type == set
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
39 if not data then data = {}; end;
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
40 if #tag == 0 then
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
41 data[key] = nil;
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
42 else
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
43 data[key] = st.preserialize(tag);
185
a67c88ce1c6a Added support for XEP-0049: Private XML Storage (mod_private)
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
44 end
6341
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
45 -- TODO delete datastore if empty
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
46 local ok, err = private_storage:set(origin.username, data);
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
47 if not ok then
6841
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6353
diff changeset
48 origin.send(st.error_reply(stanza, "wait", "internal-server-error", err));
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6353
diff changeset
49 return true;
6341
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
50 end
6841
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6353
diff changeset
51 origin.send(st.reply(stanza));
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6353
diff changeset
52 return true;
3522
4646b5b039ca mod_private: Updated to use the new events API. Smaller, more robust.
Waqas Hussain <waqas20@gmail.com>
parents: 3114
diff changeset
53 end
4646b5b039ca mod_private: Updated to use the new events API. Smaller, more robust.
Waqas Hussain <waqas20@gmail.com>
parents: 3114
diff changeset
54 end);