do _G.userlib = {} local ut = {} function userlib.users() local t = {} for k,v in pairs(ut) do t[#t+1] = k end return t end function userlib.verify(username,pass) if ut[username] then if sha.sha256(pass..ut[username][2]) == ut[username][1] then return true end end return false end function userlib.gensalt(len) local S = "" for i = 1, len do S=S..string.char(math.random(32,126)) end return S end function userlib.setuser(username,hpass,salt,...) ut[username] = {hpass, salt,...} end function userlib.deluser(username) ut[username] = nil end function userlib.readpwd(path) local f=io.open(path,"rb") if not f then return false end local C=f:read("*a") for line in C:gmatch("[^\n]+") do local username,hpass,salt = line:match("(.+)\t(.+)\t(.+)") log(username,hpass,salt) if username and hpass and salt then ut[username] = {hpass,salt} end end end function userlib.writepwd() local S="" for k,v in pairs(ut) do S=S..k.."\t"..v[1].."\t"..v[2].."\n" end return S end function userlib.write(path) local f=io.open(path,"wb") if not f then return false end f:write(userlib.writepwd()) f:close() end spawn("load users",function() userlib.readpwd("/boot/sys/users.dat") end) end