computercraft/auth.lua

123 lines
2.8 KiB
Lua
Raw Normal View History

2023-10-08 06:30:50 +02:00
args = { ... }
if args[1] == nil then
io.write("Usage: auth <action>\n")
return
end
local action = args[1]
2023-10-08 08:18:41 +02:00
settings.define("auth.token", {
description = "Authentication token",
2023-10-08 08:26:08 +02:00
type = "number",
2023-10-08 08:18:41 +02:00
default = ""
})
settings.define("auth.server", {
description = "Authentication server",
type = "string",
default = "auth.box"
})
local server = settings.get("auth.server")
2023-10-08 06:30:50 +02:00
function lns_lookup(hostname)
local data = {
["action"] = "lookup",
["hostname"] = hostname
}
2023-10-08 06:32:26 +02:00
lns_server_id = rednet.lookup("lns", lns_server)
2023-10-08 06:30:50 +02:00
rednet.send(lns_server_id, data)
while true do
id, msg = rednet.receive()
if id == lns_server_id then
if msg == nil then
return nil
else
return msg
end
end
end
end
auth_server_id = lns_lookup(server)
if action == "login" then
io.write("Username: ")
local username = io.read()
io.write("Password: ")
2023-10-08 06:33:38 +02:00
local password = read("*")
2023-10-08 06:30:50 +02:00
local data = {
["action"] = "login",
["username"] = username,
["password"] = password
}
rednet.send(auth_server_id, data)
while true do
id, msg = rednet.receive()
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
2023-10-08 08:18:41 +02:00
settings.set("auth.token", token)
2023-10-08 08:36:02 +02:00
settings.save()
2023-10-08 06:30:50 +02:00
io.write("Logged in as " .. username .. "\n")
return
end
2023-10-08 06:41:44 +02:00
if 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)
while true do
id, msg = rednet.receive()
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
end