summaryrefslogtreecommitdiffstats
path: root/lib/authenticator.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lib/authenticator.lua')
-rw-r--r--lib/authenticator.lua24
1 files changed, 20 insertions, 4 deletions
diff --git a/lib/authenticator.lua b/lib/authenticator.lua
index 8a16d07..db4d3f7 100644
--- a/lib/authenticator.lua
+++ b/lib/authenticator.lua
@@ -109,6 +109,25 @@ local mksalt = function()
return "$6$"..str.."$"
end
+local duplicatestructure
+duplicatestructure = function(value, saved)
+ saved = saved or {}
+ if type(value) == "table" then
+ if saved[value] then
+ return saved[value]
+ else
+ local output = {}
+ saved[value] = output
+ for k,v in pairs(value) do
+ output[k] = duplicatestructure(v, saved)
+ end
+ return output
+ end
+ else
+ return value
+ end
+end
+
--- public methods
-- This function returns true or false, and
@@ -168,10 +187,7 @@ write_userinfo = function(self, userinfo)
get_id(self, id.userid)
if success and self.sessiondata and self.sessiondata.userinfo and self.sessiondata.userinfo.userid == id.userid then
- self.sessiondata.userinfo = {}
- for name,value in pairs(id) do
- self.sessiondata.userinfo[name] = value
- end
+ self.sessiondata.userinfo = duplicatestructure(id)
end
return success