mirror of
https://github.com/osmarks/random-stuff
synced 2024-10-31 19:06:15 +00:00
84 lines
2.3 KiB
Lua
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
|