From 6ec3c0bee0f0e657b54551b2f66c7de2a5bda468 Mon Sep 17 00:00:00 2001
From: Kim Alvefur <zash@zash.se>
Date: Thu, 20 Aug 2015 09:14:15 +0200
Subject: ejabberd2prosody: Support password stored as SCRAM hashes

---
 tools/ejabberd2prosody.lua | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

(limited to 'tools')

diff --git a/tools/ejabberd2prosody.lua b/tools/ejabberd2prosody.lua
index af87594e..069b5161 100755
--- a/tools/ejabberd2prosody.lua
+++ b/tools/ejabberd2prosody.lua
@@ -72,7 +72,22 @@ function vcard(node, host, stanza)
 	print("["..(err or "success").."] vCard: "..node.."@"..host);
 end
 function password(node, host, password)
-	local ret, err = dm.store(node, host, "accounts", {password = password});
+	local data = {};
+	if type(password) == "string" then
+		data.password = password;
+	elseif type(password) == "table" and password[1] == "scram" then
+		local unb64 = require"mime".unb64;
+		local function hex(s)
+			return s:gsub(".", function (c)
+				return ("%02x"):format(c:byte());
+			end);
+		end
+		data.stored_key = hex(unb64(password[2]));
+		data.server_key = hex(unb64(password[3]));
+		data.salt = unb64(password[4]);
+		data.iteration_count = password[5];
+	end
+	local ret, err = dm.store(node, host, "accounts", data);
 	print("["..(err or "success").."] accounts: "..node.."@"..host);
 end
 function roster(node, host, jid, item)
-- 
cgit v1.2.3