plugins/private.lua

1
local verse = require "verse";
2
 
3
-- Implements XEP-0049: Private XML Storage
4
 
5
local xmlns_private = "jabber:iq:private";
6
 
7
function verse.plugins.private(stream)
8
	function stream:private_set(name, xmlns, data, callback)
9
		local iq = verse.iq({ type = "set" })
10
			:tag("query", { xmlns = xmlns_private });
11
		if data then
12
			if data.name == name and data.attr and data.attr.xmlns == xmlns then
13
				iq:add_child(data);
14
			else
15
				iq:tag(name, { xmlns = xmlns })
16
					:add_child(data);
17
			end
18
		end
19
		self:send_iq(iq, callback);
20
	end
21
 
22
	function stream:private_get(name, xmlns, callback)
23
		self:send_iq(verse.iq({type="get"})
24
			:tag("query", { xmlns = xmlns_private })
25
				:tag(name, { xmlns = xmlns }),
26
			function (reply)
27
				if reply.attr.type == "result" then
28
					local query = reply:get_child("query", xmlns_private);
29
					local result = query:get_child(name, xmlns);
30
					callback(result);
31
				end
32
			end);
33
	end
34
end