test_util_multitable: make mt variable local [luacheck]
[prosody.git] / plugins / mod_private.lua
index 446a80b2a6a229a7328fada05e6b625169425093..c01053d509b8effaed36d55572d44ffa2e96be43 100644 (file)
@@ -15,38 +15,40 @@ module:add_feature("jabber:iq:private");
 
 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"));
+       if #query.tags ~= 1 then
+               origin.send(st.error_reply(stanza, "modify", "bad-format"));
+               return true;
+       end
+       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", err));
+               return true;
+       end
+       if stanza.attr.type == "get" then
+               if data and data[key] then
+                       origin.send(st.reply(stanza):query("jabber:iq:private"):add_child(st.deserialize(data[key])));
+                       return true;
+               else
+                       origin.send(st.reply(stanza):add_child(query));
                        return true;
                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
+                       origin.send(st.error_reply(stanza, "wait", "internal-server-error", err));
+                       return true;
+               end
+               origin.send(st.reply(stanza));
+               return true;
        end
-       return true;
 end);