kp-bank/atm.lua

74 lines
2.4 KiB
Lua
Raw Normal View History

2023-08-29 20:53:57 +00:00
--[[
atm.lua is a client program that runs on a computer connected to a backing
currency supply, to facilitate deposits and withdrawals as well as other
banking actions.
Each ATM keeps a secret security key that it uses to authorize secure actions
like recording transactions.
]]--
local g = require("simple-graphics")
local bankClient = require("bank-client")
local W, H = term.getSize()
local function drawFrame()
g.clear(term, colors.white)
g.drawXLine(term, 1, W, 1, colors.black)
g.drawText(term, 2, 1, "ATM", colors.white, colors.black)
end
2023-08-29 21:25:57 +00:00
local function tryReadDiskCredentials(name)
if disk.hasData(name) then
local dataFile = fs.combine(disk.getMountPath(name), "bank-credentials.json")
if fs.exists(dataFile) then
local f = io.open(dataFile, "r")
local content = textutils.unserializeJSON(f:read("*a"))
f:close()
if (
content ~= nil and
content.username and
type(content.username) == "string" and
content.password and
type(content.password) == "string"
) then
return content
end
end
end
return nil
end
2023-08-29 21:09:38 +00:00
local function showLoginUI()
2023-08-29 20:53:57 +00:00
drawFrame()
g.drawTextCenter(term, W/2, 3, "Welcome to HandieBank ATM!", colors.green, colors.white)
2023-08-29 21:18:23 +00:00
g.drawTextCenter(term, W/2, 5, "Insert your card below, or click to login.", colors.black, colors.white)
2023-08-29 21:25:57 +00:00
g.fillRect(term, 22, 7, 9, 3, colors.green)
2023-08-29 21:18:23 +00:00
g.drawTextCenter(term, W/2, 8, "Login", colors.white, colors.green)
2023-08-29 21:09:38 +00:00
while true do
local event, p1, p2, p3 = os.pullEvent()
if event == "disk" then
2023-08-29 21:25:57 +00:00
local credentials = tryReadDiskCredentials(p1)
if credentials then
return credentials
2023-08-29 21:18:23 +00:00
else
2023-08-29 21:25:57 +00:00
disk.eject(p1)
2023-08-29 21:18:23 +00:00
end
2023-08-29 21:09:38 +00:00
elseif event == "mouse_click" then
local button = p1
local x = p2
local y = p3
2023-08-29 21:25:57 +00:00
if button == 1 and x >= 22 and x <= 30 and y >= 7 and y <= 9 then
2023-08-29 21:18:23 +00:00
-- TODO: Show login input elements.
2023-08-29 21:09:38 +00:00
return {username = "bleh", password = "bleh"}
end
end
end
2023-08-29 20:53:57 +00:00
end
2023-08-29 21:09:38 +00:00
while true do
local credentials = showLoginUI()
2023-08-29 21:18:23 +00:00
g.clear(term, colors.black)
2023-08-29 21:25:57 +00:00
print("Credentials: " .. textutils.serialize(credentials))
2023-08-29 21:18:23 +00:00
return
2023-08-29 21:09:38 +00:00
end