Diff

plugins/mod_private.lua @ 6343:e6839156bb82

mod_private: Use map store
author Kim Alvefur <zash@zash.se>
date Sat, 09 Aug 2014 21:52:32 +0200
parent 6341:ab9a1af80632
child 6354:bbb4a82db32e
line wrap: on
line diff
--- a/plugins/mod_private.lua	Sat Aug 09 21:48:52 2014 +0200
+++ b/plugins/mod_private.lua	Sat Aug 09 21:52:32 2014 +0200
@@ -9,7 +9,7 @@
 
 local st = require "util.stanza"
 
-local private_storage = module:open_store();
+local private_storage = module:open_store("private", "map");
 
 module:add_feature("jabber:iq:private");
 
@@ -21,25 +21,22 @@
 	end
 	local tag = query.tags[1];
 	local key = tag.name..":"..tag.attr.xmlns;
-	local data, err = private_storage:get(origin.username);
-	if err then
-		return origin.send(st.error_reply(stanza, "wait", "internal-server-error", err));
-	end
 	if stanza.attr.type == "get" then
-		if data and data[key] then
+		local data, err = private_storage:get(origin.username, key);
+		if data then
 			return origin.send(st.reply(stanza):query("jabber:iq:private"):add_child(st.deserialize(data)));
+		elseif err then
+			return origin.send(st.error_reply(stanza, "wait", "internal-server-error", err));
 		else
 			return origin.send(st.reply(stanza):add_child(query));
 		end
 	else -- type == set
-		if not data then data = {}; end;
-		if #tag == 0 then
-			data[key] = nil;
-		else
-			data[key] = st.preserialize(tag);
+		local data;
+		if #tag ~= 0 then
+			data = st.preserialize(tag);
 		end
 		-- TODO delete datastore if empty
-		local ok, err = private_storage:set(origin.username, data);
+		local ok, err = private_storage:set(origin.username, key, data);
 		if not ok then
 			return origin.send(st.error_reply(stanza, "wait", "internal-server-error", err));
 		end