Annotate

plugins/mod_private.lua @ 6341:ab9a1af80632

mod_private: Cleanup and more tailcalls
author Kim Alvefur <zash@zash.se>
date Sat, 09 Aug 2014 21:48:11 +0200
parent 5776:bd0ff8ae98a8
child 6343:e6839156bb82
child 6353:a868d5d6a83f
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
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
20 return origin.send(st.error_reply(stanza, "modify", "bad-format"));
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
21 end
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
22 local tag = query.tags[1];
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
23 local key = tag.name..":"..tag.attr.xmlns;
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
24 local data, err = private_storage:get(origin.username);
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
25 if err then
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
26 return origin.send(st.error_reply(stanza, "wait", "internal-server-error", err));
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
27 end
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
28 if stanza.attr.type == "get" then
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
29 if data and data[key] then
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
30 return origin.send(st.reply(stanza):query("jabber:iq:private"):add_child(st.deserialize(data)));
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
31 else
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
32 return origin.send(st.reply(stanza):add_child(query));
3522
4646b5b039ca mod_private: Updated to use the new events API. Smaller, more robust.
Waqas Hussain <waqas20@gmail.com>
parents: 3114
diff changeset
33 end
6341
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
34 else -- type == set
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
35 if not data then data = {}; end;
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
36 if #tag == 0 then
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
37 data[key] = nil;
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
38 else
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
39 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
40 end
6341
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
41 -- TODO delete datastore if empty
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
42 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
43 if not ok then
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
44 return origin.send(st.error_reply(stanza, "wait", "internal-server-error", err));
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
45 end
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
46 return origin.send(st.reply(stanza));
3522
4646b5b039ca mod_private: Updated to use the new events API. Smaller, more robust.
Waqas Hussain <waqas20@gmail.com>
parents: 3114
diff changeset
47 end
4646b5b039ca mod_private: Updated to use the new events API. Smaller, more robust.
Waqas Hussain <waqas20@gmail.com>
parents: 3114
diff changeset
48 end);