diff options
-rw-r--r-- | lib/authenticator.lua | 24 |
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 |