projects
/
prosody.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge 0.10->trunk
[prosody.git]
/
plugins
/
mod_storage_xep0227.lua
diff --git
a/plugins/mod_storage_xep0227.lua
b/plugins/mod_storage_xep0227.lua
index 61ef7d6d494f12c5c5515c767cb7b03cf6c4fdec..ef227ca302fafeb7d1fd0fc1d1011f2eee358d16 100644
(file)
--- a/
plugins/mod_storage_xep0227.lua
+++ b/
plugins/mod_storage_xep0227.lua
@@
-47,7
+47,7
@@
local function getUserElement(xml)
end
end
local function createOuterXml(user, host)
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
:tag("host", {jid=host})
:tag("user", {name = user});
end
@@
-66,19
+66,36
@@
end
local handlers = {};
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)
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 };
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)
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);
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);
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)
};
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
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)
};
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
if user then
local private = user:get_child("query", "jabber:iq:private");
if private then
@@
-150,15
+167,10
@@
handlers.private = {
-----------------------------
local driver = {};
-----------------------------
local driver = {};
-function driver:open(host, datastore, typ)
- local instance = setmetatable({}, self);
- instance.host = host;
- instance.datastore = datastore;
+function driver:open(datastore, typ)
local handler = handlers[datastore];
local handler = handlers[datastore];
- if not handler then return nil; end
- for key,val in pairs(handler) do
- instance[key] = val;
- end
+ if not handler then return nil, "unsupported-datastore"; end
+ local instance = setmetatable({ host = module.host; datastore = datastore; }, { __index = handler });
if instance.init then instance:init(); end
return instance;
end
if instance.init then instance:init(); end
return instance;
end