From 83a9c237c37e55897eb666dde09a48e9a72799b8 Mon Sep 17 00:00:00 2001
From: Kim Alvefur <zash@zash.se>
Date: Fri, 15 May 2015 15:32:21 +0200
Subject: mod_storage_xep0227: Store data from mod_auth_internal_hashed in a
 private namespace

---
 plugins/mod_storage_xep0227.lua | 21 +++++++++++++++++++--
 1 file changed, 19 insertions(+), 2 deletions(-)

(limited to 'plugins')

diff --git a/plugins/mod_storage_xep0227.lua b/plugins/mod_storage_xep0227.lua
index f1410d70..4510f5d1 100644
--- a/plugins/mod_storage_xep0227.lua
+++ b/plugins/mod_storage_xep0227.lua
@@ -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));
 		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);
-- 
cgit v1.2.3