tools/ejabberd2prosody: Support for pending-in roster items
authorWaqas Hussain <waqas20@gmail.com>
Thu, 29 Jan 2009 17:37:25 +0000 (22:37 +0500)
committerWaqas Hussain <waqas20@gmail.com>
Thu, 29 Jan 2009 17:37:25 +0000 (22:37 +0500)
tools/ejabberd2prosody.lua

index 2f837497c38114b1a7946534e5a8b9d5ea9bb9fc..c2034715dd70790988949600167bd3ddcf8d42fa 100755 (executable)
@@ -57,12 +57,19 @@ function password(node, host, password)
        local ret, err = dm.store(node, host, "accounts", {password = password});\r
        print("["..(err or "success").."] accounts: "..node.."@"..host.." = "..password);\r
 end\r
-function roster(node, host, jid, item)\r
-       local roster = dm.load(node, host, "roster") or {};\r
-       roster[jid] = item;\r
-       local ret, err = dm.store(node, host, "roster", roster);\r
-       print("["..(err or "success").."] roster: " ..node.."@"..host.." - "..jid);\r
-end\r
+function roster(node, host, jid, item)
+       local roster = dm.load(node, host, "roster") or {};
+       roster[jid] = item;
+       local ret, err = dm.store(node, host, "roster", roster);
+       print("["..(err or "success").."] roster: " ..node.."@"..host.." - "..jid);
+end
+function roster_pending(node, host, jid)
+       local roster = dm.load(node, host, "roster") or {};
+       roster.pending = roster.pending or {};
+       roster.pending[jid] = true;
+       local ret, err = dm.store(node, host, "roster", roster);
+       print("["..(err or "success").."] roster: " ..node.."@"..host.." - "..jid);
+end
 function private_storage(node, host, xmlns, stanza)\r
        local private = dm.load(node, host, "private") or {};\r
        private[xmlns] = st.preserialize(stanza);\r
@@ -90,7 +97,10 @@ local filters = {
                local name = tuple[5]; local subscription = tuple[6];\r
                local ask = tuple[7]; local groups = tuple[8];\r
                if type(name) ~= type("") then name = nil; end\r
-               if ask == "none" then ask = nil; elseif ask == "out" then ask = "subscribe" else error(ask) end\r
+               if ask == "none" then ask = nil; elseif ask == "out" then ask = "subscribe" elseif ask == "in" then
+                       roster_pending(node, host, contact);
+                       return;
+               else error(ask) end\r
                if subscription ~= "both" and subscription ~= "from" and subscription ~= "to" and subscription ~= "none" then error(subscription) end\r
                local item = {name = name, ask = ask, subscription = subscription, groups = {}};\r
                for _, g in ipairs(groups) do item.groups[g] = true; end\r