Merge 0.10->trunk
[prosody.git] / plugins / mod_storage_xep0227.lua
index f3c6866ca2126d55f665e460148d9eb3e816df85..ef227ca302fafeb7d1fd0fc1d1011f2eee358d16 100644 (file)
@@ -47,7 +47,7 @@ local function getUserElement(xml)
        end
 end
 local function createOuterXml(user, host)
-       return st.stanza("server-data", {xmlns='http://www.xmpp.org/extensions/xep-0227.html#ns'})
+       return st.stanza("server-data", {xmlns='urn:xmpp:pie:0'})
                :tag("host", {jid=host})
                        :tag("user", {name = user});
 end
@@ -66,19 +66,36 @@ end
 
 local handlers = {};
 
+-- In order to support mod_auth_internal_hashed
+local extended = "http://prosody.im/protocol/extended-xep0227\1";
+
 handlers.accounts = {
        get = function(self, user)
-               local user = getUserElement(getXml(user, self.host));
+               user = getUserElement(getXml(user, self.host));
                if user and user.attr.password then
                        return { password = user.attr.password };
+               elseif user then
+                       local data = {};
+                       for k, v in pairs(user.attr) do
+                               if k:sub(1, #extended) == extended then
+                                       data[k:sub(#extended+1)] = v;
+                               end
+                       end
+                       return data;
                end
        end;
        set = function(self, user, data)
-               if data and data.password then
+               if data then
                        local xml = getXml(user, self.host);
                        if not xml then xml = createOuterXml(user, self.host); end
                        local usere = getUserElement(xml);
-                       usere.attr.password = data.password;
+                       for k, v in pairs(data) do
+                               if k == "password" then
+                                       usere.attr.password = v;
+                               else
+                                       usere.attr[extended..k] = v;
+                               end
+                       end
                        return setXml(user, self.host, xml);
                else
                        return setXml(user, self.host, nil);
@@ -87,7 +104,7 @@ handlers.accounts = {
 };
 handlers.vcard = {
        get = function(self, user)
-               local user = getUserElement(getXml(user, self.host));
+               user = getUserElement(getXml(user, self.host));
                if user then
                        local vcard = user:get_child("vCard", 'vcard-temp');
                        if vcard then
@@ -116,7 +133,7 @@ handlers.vcard = {
 };
 handlers.private = {
        get = function(self, user)
-               local user = getUserElement(getXml(user, self.host));
+               user = getUserElement(getXml(user, self.host));
                if user then
                        local private = user:get_child("query", "jabber:iq:private");
                        if private then