Files
computercraft/packages/auth.lua
2023-10-08 05:25:17 -04:00

132 lines
3.5 KiB
Lua

args = { ... }
if args[1] == nil then
io.write("Usage: auth <action>\n")
return
end
local action = args[1]
local server = settings.get("auth.server")
auth_server_id = lns.lookup(server)
if action == "login" then
io.write("Username: ")
local username = io.read()
io.write("Password: ")
local password = read("*")
local data = {
["action"] = "login",
["username"] = username,
["password"] = password
}
rednet.send(auth_server_id, data, "auth")
while true do
id, msg = rednet.receive("auth")
if id == auth_server_id then
if msg == "invalid request" then
io.write("Invalid request\n")
return
elseif msg == "user not found" then
io.write("User not found\n")
return
elseif msg == "invalid password" then
io.write("Invalid password\n")
return
else
token = msg
break
end
end
end
settings.set("auth.username", username)
settings.set("auth.token", token)
settings.save()
io.write("Logged in as " .. username .. "\n")
return
elseif action == "logout" then
settings.set("auth.token", -1)
settings.save()
io.write("Logged out\n")
return
elseif action == "register" then
io.write("Username: ")
local username = io.read()
io.write("Password: ")
local password = read("*")
io.write("Confirm Password: ")
local confirm_password = read("*")
if password ~= confirm_password then
io.write("Passwords do not match\n")
return
end
local data = {
["action"] = "register",
["username"] = username,
["password"] = password
}
rednet.send(auth_server_id, data, "auth")
while true do
id, msg = rednet.receive("auth")
if id == auth_server_id then
if msg == "invalid request" then
io.write("Invalid request\n")
return
elseif msg == "user already exists" then
io.write("User already exists\n")
return
else
io.write("Registered user " .. username .. "\n")
return
end
end
end
elseif action == "group" then
local subaction = args[2]
if subaction == nil then
io.write("Usage: auth group <list:check:add>\n")
return
end
if subaction == "list" then
local result = auth.list_user_groups(settings.get("auth.username"))
io.write("Groups: " .. auth.trueKeysToString(result) .. "\n")
elseif subaction == "add" then
local target_user = args[3]
local group = args[4]
if target_user == nil or group == nil then
io.write("Usage: auth group add <user> <group>\n")
return
end
local result = auth.add_user_to_group(target_user, group)
elseif subaction == "check" then
local target_user = args[3]
local group = args[4]
if target_user == nil or group == nil then
io.write("Usage: auth group check <user> <group>\n")
return
end
local result = auth.check_user_in_group(target_user, group)
if result then
io.write("User " .. target_user .. " is in group " .. group .. "\n")
else
io.write("User " .. target_user .. " is not in group " .. group .. "\n")
end
else
io.write("Usage: auth group <list:check:add>\n")
return
end
end