# HG changeset patch # User Kim Alvefur # Date 1407613732 -7200 # Node ID 379faad8ce9f3656aad80662c3792850d303b518 # Parent 11510d4d3b5798023568774a2fd4402600dd241e# Parent ab9a1af806328c5b6817d4041a6725614ad0d5db Merge 0.10->trunk diff -r 11510d4d3b57 -r 379faad8ce9f plugins/mod_private.lua --- 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); diff -r 11510d4d3b57 -r 379faad8ce9f util/jid.lua --- 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)