59 lines
1.2 KiB
Lua
59 lines
1.2 KiB
Lua
|
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
|