Merge 0.10->trunk
authorKim Alvefur <zash@zash.se>
Sat, 09 Aug 2014 21:48:52 +0200
changeset 6342 379faad8ce9f
parent 6336 11510d4d3b57 (current diff)
parent 6341 ab9a1af80632 (diff)
child 6343 e6839156bb82
Merge 0.10->trunk
--- a/plugins/mod_private.lua	Fri Aug 08 12:38:35 2014 +0200
+++ b/plugins/mod_private.lua	Sat Aug 09 21:48:52 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);
--- a/util/jid.lua	Fri Aug 08 12:38:35 2014 +0200
+++ b/util/jid.lua	Sat Aug 09 21:48:52 2014 +0200
@@ -37,11 +37,7 @@
 split = _split;
 
 function bare(jid)
-	local node, host = _split(jid);
-	if node and host then
-		return node.."@"..host;
-	end
-	return host;
+	return jid and match(jid, "^[^/]+");
 end
 
 local function _prepped_split(jid)
@@ -65,30 +61,22 @@
 end
 prepped_split = _prepped_split;
 
-function prep(jid)
-	local node, host, resource = _prepped_split(jid);
-	if host then
-		if node then
-			host = node .. "@" .. host;
-		end
-		if resource then
-			host = host .. "/" .. resource;
-		end
+local function _join(node, host, resource)
+	if not host then return end
+	if node and resource then
+		return node.."@"..host.."/"..resource;
+	elseif node then
+		return node.."@"..host;
+	elseif resource then
+		return host.."/"..resource;
 	end
 	return host;
 end
+join = _join;
 
-function join(node, host, resource)
-	if node and host and resource then
-		return node.."@"..host.."/"..resource;
-	elseif node and host then
-		return node.."@"..host;
-	elseif host and resource then
-		return host.."/"..resource;
-	elseif host then
-		return host;
-	end
-	return nil; -- Invalid JID
+function prep(jid)
+	local node, host, resource = _prepped_split(jid);
+	return _join(node, host, resource);
 end
 
 function compare(jid, acl)