1
0
mirror of https://github.com/osmarks/random-stuff synced 2024-12-27 10:30:35 +00:00
random-stuff/computercraft/potatobox.lua
2023-11-13 19:37:05 +00:00

84 lines
2.3 KiB
Lua

if os.getComputerLabel() == nil then os.setComputerLabel(("Sandbox-%d"):format(os.getComputerID())) end
local function update()
local h = http.get "https://pastebin.com/raw/SJHZqiGY"
local f = fs.open("startup", "w")
f.write(h.readAll())
h.close()
f.close()
end
local function run()
term.setPaletteColor(colors.white, 0xffffff)
term.setPaletteColor(colors.black, 0x000000)
term.clear()
term.setCursorPos(1, 1)
local h = http.get "https://pastebin.com/raw/Frv3xkB9"
local fn, err = load(h.readAll(), "@yafss")
h.close()
if not fn then error(err) end
local yafss = fn()
local startup_message = [[Welcome to this GTech-sponsored computer.
This shell is running in a sandbox. Any changes you make outside of "/persistent" will NOT be saved.
Please save any important data or work elsewhere.]]
local FS_overlay = {
["startup"] = ([[
print(%q)
shell.setPath(shell.path() .. ":/persistent")
]]):format(startup_message),
["/rom/programs/update.lua"] = [[os.update()
print "Updated sandbox"
os.full_reboot()]]
}
local running = true
local function reinit_sandbox() running = false end
local API_overrides = {
["~expect"] = _G["~expect"],
os = {
shutdown = reinit_sandbox,
reboot = reinit_sandbox,
setComputerLabel = function() error "Nope." end,
update = update,
full_reboot = os.reboot
}
}
if not fs.exists "boxdata" then fs.makeDir "boxdata" end
if not fs.exists "boxdata/persistent" then fs.makeDir "boxdata/persistent" end
for _, file in pairs(fs.list "boxdata") do
if file ~= "persistent" then fs.delete(fs.combine("boxdata", file)) end
end
parallel.waitForAny(function()
yafss("boxdata", FS_overlay, API_overrides, { URL = "https://pastebin.com/raw/hvy03JuM" })
end,
function()
while running do coroutine.yield() end
end)
end
local ok, err = pcall(update)
if not ok then printError("Update error: " .. err) end
local function full_screen_message(msg)
term.setBackgroundColor(colors.black)
term.setTextColor(colors.white)
term.clear()
term.setCursorPos(1, 1)
print(msg)
end
while true do
local ok, err = pcall(run)
if not ok then
full_screen_message("Sandbox crashed. Press any key to restart. Error: \n" .. err)
else
full_screen_message "Sandbox exited. Press any key to restart."
end
coroutine.yield "key"
end