Changeset

6341:ab9a1af80632

mod_private: Cleanup and more tailcalls
author Kim Alvefur <zash@zash.se>
date Sat, 09 Aug 2014 21:48:11 +0200
parents 6340:7e820979fd9b
children 6342:379faad8ce9f 6344:68b5c1ed18dd
files plugins/mod_private.lua
diffstat 1 files changed, 26 insertions(+), 30 deletions(-) [+]
line wrap: on
line diff
--- a/plugins/mod_private.lua	Thu Aug 07 17:43:28 2014 +0200
+++ b/plugins/mod_private.lua	Sat Aug 09 21:48:11 2014 +0200
@@ -15,38 +15,34 @@
 
 module:hook("iq/self/jabber:iq:private:query", function(event)
 	local origin, stanza = event.origin, event.stanza;
-	local type = stanza.attr.type;
 	local query = stanza.tags[1];
-	if #query.tags == 1 then
-		local tag = query.tags[1];
-		local key = tag.name..":"..tag.attr.xmlns;
-		local data, err = private_storage:get(origin.username);
-		if err then
-			origin.send(st.error_reply(stanza, "wait", "internal-server-error"));
-			return true;
+	if #query.tags ~= 1 then
+		return origin.send(st.error_reply(stanza, "modify", "bad-format"));
+	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
+			return origin.send(st.reply(stanza):query("jabber:iq:private"):add_child(st.deserialize(data)));
+		else
+			return origin.send(st.reply(stanza):add_child(query));
 		end
-		if stanza.attr.type == "get" then
-			if data and data[key] then
-				origin.send(st.reply(stanza):tag("query", {xmlns = "jabber:iq:private"}):add_child(st.deserialize(data[key])));
-			else
-				origin.send(st.reply(stanza):add_child(stanza.tags[1]));
-			end
-		else -- set
-			if not data then data = {}; end;
-			if #tag == 0 then
-				data[key] = nil;
-			else
-				data[key] = st.preserialize(tag);
-			end
-			-- TODO delete datastore if empty
-			if private_storage:set(origin.username, data) then
-				origin.send(st.reply(stanza));
-			else
-				origin.send(st.error_reply(stanza, "wait", "internal-server-error"));
-			end
+	else -- type == set
+		if not data then data = {}; end;
+		if #tag == 0 then
+			data[key] = nil;
+		else
+			data[key] = st.preserialize(tag);
 		end
-	else
-		origin.send(st.error_reply(stanza, "modify", "bad-format"));
+		-- TODO delete datastore if empty
+		local ok, err = private_storage:set(origin.username, data);
+		if not ok then
+			return origin.send(st.error_reply(stanza, "wait", "internal-server-error", err));
+		end
+		return origin.send(st.reply(stanza));
 	end
-	return true;
 end);