plugins/mod_private.lua
author Kim Alvefur <zash@zash.se>
Sat, 09 Aug 2014 21:52:32 +0200
changeset 6343 e6839156bb82
parent 6341 ab9a1af80632
child 6354 bbb4a82db32e
permissions -rw-r--r--
mod_private: Use map store
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
6343
e6839156bb82 mod_private: Use map store
Kim Alvefur <zash@zash.se>
parents: 6341
diff changeset
    12
local private_storage = module:open_store("private", "map");
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
	if stanza.attr.type == "get" then
6343
e6839156bb82 mod_private: Use map store
Kim Alvefur <zash@zash.se>
parents: 6341
diff changeset
    25
		local data, err = private_storage:get(origin.username, key);
e6839156bb82 mod_private: Use map store
Kim Alvefur <zash@zash.se>
parents: 6341
diff changeset
    26
		if data then
6341
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
    27
			return origin.send(st.reply(stanza):query("jabber:iq:private"):add_child(st.deserialize(data)));
6343
e6839156bb82 mod_private: Use map store
Kim Alvefur <zash@zash.se>
parents: 6341
diff changeset
    28
		elseif err then
e6839156bb82 mod_private: Use map store
Kim Alvefur <zash@zash.se>
parents: 6341
diff changeset
    29
			return origin.send(st.error_reply(stanza, "wait", "internal-server-error", err));
6341
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
    30
		else
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
    31
			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
    32
		end
6341
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
    33
	else -- type == set
6343
e6839156bb82 mod_private: Use map store
Kim Alvefur <zash@zash.se>
parents: 6341
diff changeset
    34
		local data;
e6839156bb82 mod_private: Use map store
Kim Alvefur <zash@zash.se>
parents: 6341
diff changeset
    35
		if #tag ~= 0 then
e6839156bb82 mod_private: Use map store
Kim Alvefur <zash@zash.se>
parents: 6341
diff changeset
    36
			data = st.preserialize(tag);
185
a67c88ce1c6a Added support for XEP-0049: Private XML Storage (mod_private)
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    37
		end
6341
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
    38
		-- TODO delete datastore if empty
6343
e6839156bb82 mod_private: Use map store
Kim Alvefur <zash@zash.se>
parents: 6341
diff changeset
    39
		local ok, err = private_storage:set(origin.username, key, data);
6341
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
    40
		if not ok then
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
    41
			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
    42
		end
ab9a1af80632 mod_private: Cleanup and more tailcalls
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
    43
		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
    44
	end
4646b5b039ca mod_private: Updated to use the new events API. Smaller, more robust.
Waqas Hussain <waqas20@gmail.com>
parents: 3114
diff changeset
    45
end);