Compare commits

...

14 Commits
main ... keypad

Author SHA1 Message Date
9e633867da
:3 2024-08-26 00:16:13 +03:00
79c5654247
:3 2024-08-26 00:13:01 +03:00
6b864b43be
:3 2024-08-26 00:09:32 +03:00
5fa92ae0c4
:3 2024-08-26 00:08:40 +03:00
4ccc4b07da
:3 2024-08-26 00:07:19 +03:00
b0c5b756b1
:3 2024-08-26 00:05:54 +03:00
a3ca65a458
:3 2024-08-26 00:04:22 +03:00
d07a35f360
:3 2024-08-26 00:03:08 +03:00
b88ca058fa
:3 2024-08-25 23:58:57 +03:00
df5e544347
:3 2024-08-25 23:56:01 +03:00
7c78db3620
:3 2024-08-25 23:53:40 +03:00
7ed9f76f15
:3 2024-08-25 23:47:51 +03:00
2a8932a19f
:3 2024-08-25 23:36:03 +03:00
28ceac8643
:3 2024-08-25 22:00:12 +03:00
5 changed files with 65 additions and 136 deletions

View File

@ -3,64 +3,17 @@ local __DEFAULT_IMPORT = require
local require = function(path) local require = function(path)
if __BUNDLER_FILES[path] then if __BUNDLER_FILES[path] then
return __BUNDLER_FILES[path]() return __BUNDLER_FILES[path]()
elseif __BUNDLER_FILES[path .. ".lua"] then
return __BUNDLER_FILES[path .. ".lua"]()
else else
return __DEFAULT_IMPORT(path) return __DEFAULT_IMPORT(path)
end end
end end
local __UPDATE_HASH = "56dffe1d3654b028310d4c9dc976b7c7cc8c9d5a" local __UPDATE_HASH = "5e1c10aba96c3f9ded6aecb030f2774577c005af"
rawset(__BUNDLER_FILES, "updater.lua", function () rawset(__BUNDLER_FILES, "updater.lua", function ()
local utils = require("utils.lua") local utils = require("utils.lua")
local config = require("config.lua") local config = require("config.lua")
local LAST_USED = os.time()
local mod = {} local mod = {}
if not __UPDATE_HASH then
__UPDATE_HASH = "WHATTHEFUCK";
end
local function checkForUpdate()
local current_time = os.time()
local difference = math.abs(current_time - LAST_USED)
if difference > .5 then
print("INFO: Updating! (diff: " .. tostring(difference) .. ")")
local update_code_request = http.get(config.release_url .. "?x=" .. tostring(math.random(11111111, 99999999))) -- I HATE CACHE REEEEEEEEEEEEEEEEE
if update_code_request then
local update_code_text = update_code_request.readAll()
if update_code_text then
if string.find(update_code_text, "^local __BUNDLER_FILES = {}") then
if fs.exists("backup.lua") then
fs.delete("backup.lua")
end
fs.copy("startup.lua", "backup.lua")
if not string.find(update_code_text, __UPDATE_HASH) then
http.post(config.ntfy_url, "Computer #" .. tostring( os.getComputerID() ) .. " updating")
local file = fs.open("startup.lua", "w")
file.write(update_code_text)
file.close()
os.reboot()
else
print("Nothing changed, not updating.")
LAST_USED = os.time()
return
end
else
print("Bad file download (core)")
end
else
print("Bad mem read (core)")
end
else
print("Bad download (core)")
end
end
end
function mod.UpdateChecker()
while true do
local status, err = pcall(checkForUpdate)
if not status and err ~= "Terminated" then
http.post(config.ntfy_url, err, {Priority = "urgent"})
end
sleep(1)
end
end
function mod.GetBasalt() function mod.GetBasalt()
if fs.exists("basalt.lua") then if fs.exists("basalt.lua") then
utils.MonPrint("Basalt found!") utils.MonPrint("Basalt found!")
@ -126,8 +79,8 @@ rawset(__BUNDLER_FILES, "ui.lua", function ()
drive:ejectDisk() drive:ejectDisk()
end end
end end
basalt.debug("test")
if ui.pin == config.correctPin then if ui.pin == config.correctPin then
blibs.notifier.notify("5", "Unlocked door :3 love u");
ui.enterButton:setBackground(colors.green) ui.enterButton:setBackground(colors.green)
ui.pinLabel:setText("Welcome") ui.pinLabel:setText("Welcome")
redstone.setOutput("front", true) redstone.setOutput("front", true)
@ -194,11 +147,11 @@ rawset(__BUNDLER_FILES, "ui.lua", function ()
end end
end end
local status, err = pcall(function () local status, err = pcall(function ()
parallel.waitForAll(basalt.autoUpdate, updater.UpdateChecker) parallel.waitForAll(basalt.autoUpdate)
end) end)
if not status and err ~= "Terminated" then if not status and err ~= "Terminated" then
print("Error detected: " .. err) log.error("Error detected: " .. err)
http.post(config.ntfy_url, err, {Priority = "urgent"}) --exposed ntfy url no spam me pls blibs.notifier.notify("5", err); --exposed ntfy url no spam me pls
sleep(5) sleep(5)
utils.MonReset(0.5) utils.MonReset(0.5)
fs.delete("basalt.lua") fs.delete("basalt.lua")
@ -230,15 +183,17 @@ end)
rawset(__BUNDLER_FILES, "main.lua", function () rawset(__BUNDLER_FILES, "main.lua", function ()
local utils = require("utils.lua") local utils = require("utils.lua")
local updater = require("updater.lua") local updater = require("updater.lua")
local main = {} local mod = {}
KEYPADOS_VERSION = "4.0" KEYPADOS_VERSION = "4.0"
function main.Main() function mod.main(blibs)
_G.log = blibs.log;
_G.blibs = blibs;
utils.MonReset(0.5) utils.MonReset(0.5)
updater.GetBasalt() updater.GetBasalt()
utils.MonPrint("keypadOS v" .. KEYPADOS_VERSION) utils.MonPrint("keypadOS v" .. KEYPADOS_VERSION)
utils.MonReset(1) utils.MonReset(1)
require("ui.lua").InitUi() require("ui.lua").InitUi()
end end
return main return mod;
end) end)
require("main.lua").Main() return require("main.lua")

View File

@ -1,13 +1,37 @@
-- keycardOS "bootloader", has no access to basalt
-- intended for checking for updates, and automatically updating basalt if it is missing
local utils = require("utils.lua") local utils = require("utils.lua")
local updater = require("updater.lua") local updater = require("updater.lua")
local main = {}
local mod = {}
KEYPADOS_VERSION = "4.0" KEYPADOS_VERSION = "4.0"
function main.Main() --- @class BootloaderLibs
--- @field log Logger
--- @field updater Updater
--- @field notifier Notifier
--- @field json JsonParser
--- @class Logger
--- @field error fun(...)
--- @field warn fun(...)
--- @field info fun(...)
--- @field debug fun(...)
--- @class Updater
--- @field addEntry fun(path: string, branch: string, url: string)
--- @class JsonParser
--- @field decode fun(s: string): table
--- @field encode fun(s: table): string
--- @class Notifier
--- @field notify fun(priority: "1"|"2"|"3"|"4"|"5", body: string)
---@param blibs BootloaderLibs
function mod.main(blibs)
_G.log = blibs.log;
_G.blibs = blibs;
utils.MonReset(0.5) utils.MonReset(0.5)
updater.GetBasalt() updater.GetBasalt()
utils.MonPrint("keypadOS v" .. KEYPADOS_VERSION) utils.MonPrint("keypadOS v" .. KEYPADOS_VERSION)
@ -16,5 +40,5 @@ function main.Main()
end end
return main return mod;

View File

@ -2,6 +2,7 @@ local utils = require("utils.lua")
local basalt = require("basalt") local basalt = require("basalt")
local config = require("config.lua") local config = require("config.lua")
local updater = require("updater.lua") local updater = require("updater.lua")
--- @type Monitor --- @type Monitor
local monitor = utils.Cast(peripheral.find("monitor")) local monitor = utils.Cast(peripheral.find("monitor"))
--- @type drive --- @type drive
@ -36,8 +37,8 @@ local function unlockDoor(ui)
end end
end end
basalt.debug("test")
if ui.pin == config.correctPin then if ui.pin == config.correctPin then
blibs.notifier.notify("5", "Unlocked door :3 love u");
ui.enterButton:setBackground(colors.green) ui.enterButton:setBackground(colors.green)
ui.pinLabel:setText("Welcome") ui.pinLabel:setText("Welcome")
redstone.setOutput("front", true) redstone.setOutput("front", true)
@ -117,12 +118,12 @@ function mod.InitUi()
end end
local status, err = pcall(function () local status, err = pcall(function ()
parallel.waitForAll(basalt.autoUpdate, updater.UpdateChecker) parallel.waitForAll(basalt.autoUpdate)
end) end)
if not status and err ~= "Terminated" then if not status and err ~= "Terminated" then
print("Error detected: " .. err) log.error("Error detected: " .. err)
http.post(config.ntfy_url, err, {Priority = "urgent"}) --exposed ntfy url no spam me pls blibs.notifier.notify("5", err); --exposed ntfy url no spam me pls
sleep(5) sleep(5)
utils.MonReset(0.5) utils.MonReset(0.5)
fs.delete("basalt.lua") fs.delete("basalt.lua")

View File

@ -1,65 +1,8 @@
local utils = require("utils.lua") local utils = require("utils.lua")
local config = require("config.lua") local config = require("config.lua")
local LAST_USED = os.time()
local mod = {} local mod = {}
-- For lsp, shouldnt ever be check for true
if not __UPDATE_HASH then
__UPDATE_HASH = "WHATTHEFUCK";
end
local function checkForUpdate()
local current_time = os.time()
local difference = math.abs(current_time - LAST_USED)
-- print("INFO: Checking for update... difference: " .. tostring(difference))
--its been considerable time since the keypad was interacted with
--therefore it's time to force an update down the users throat (microsoft moment)
if difference > .5 then
print("INFO: Updating! (diff: " .. tostring(difference) .. ")")
local update_code_request = http.get(config.release_url .. "?x=" .. tostring(math.random(11111111, 99999999))) -- I HATE CACHE REEEEEEEEEEEEEEEEE
if update_code_request then
local update_code_text = update_code_request.readAll()
if update_code_text then
if string.find(update_code_text, "^local __BUNDLER_FILES = {}") then
-- Make backup
if fs.exists("backup.lua") then
fs.delete("backup.lua")
end
fs.copy("startup.lua", "backup.lua")
if not string.find(update_code_text, __UPDATE_HASH) then
http.post(config.ntfy_url, "Computer #" .. tostring( os.getComputerID() ) .. " updating")
local file = fs.open("startup.lua", "w")
file.write(update_code_text)
file.close()
os.reboot()
else
print("Nothing changed, not updating.")
LAST_USED = os.time()
return
end
else
print("Bad file download (core)")
end
else
print("Bad mem read (core)")
end
else
print("Bad download (core)")
end
end
end
function mod.UpdateChecker()
while true do
local status, err = pcall(checkForUpdate)
if not status and err ~= "Terminated" then
http.post(config.ntfy_url, err, {Priority = "urgent"})
end
sleep(1)
end
end
function mod.GetBasalt() function mod.GetBasalt()
if fs.exists("basalt.lua") then if fs.exists("basalt.lua") then

30
x.py
View File

@ -40,23 +40,29 @@ def get_hash(buf: str) -> str:
hasher.update(bytes(buf, "utf-8")); hasher.update(bytes(buf, "utf-8"));
return hasher.hexdigest(); return hasher.hexdigest();
REQ_HEADER = """
local __BUNDLER_FILES = {}
local __DEFAULT_IMPORT = require
local require = function(path)
if __BUNDLER_FILES[path] then
return __BUNDLER_FILES[path]()
elseif __BUNDLER_FILES[path .. ".lua"] then
return __BUNDLER_FILES[path .. ".lua"]()
else
return __DEFAULT_IMPORT(path)
end
end
local __UPDATE_HASH = __BUNDLER_REPLACE_HASH__
"""
def main(): def main():
buf = "" buf = ""
buf += "local __BUNDLER_FILES = {}\n"; buf += REQ_HEADER;
buf += "local __DEFAULT_IMPORT = require\n";
buf += "local require = function(path)\n";
buf += " if __BUNDLER_FILES[path] then\n";
buf += " return __BUNDLER_FILES[path]()\n";
buf += " else\n";
buf += " return __DEFAULT_IMPORT(path)\n";
buf += " end\n";
buf += "end\n";
buf += "local __UPDATE_HASH = __BUNDLER_REPLACE_HASH__\n";
for file in FILES: for file in FILES:
print(f"=== FILE: {file}"); print(f"=== FILE: {file}");
buf += read_file(file); buf += read_file(file);
buf += "require(\"main.lua\").Main()\n"; buf += "return require(\"main.lua\")";
if MINIMISE: if MINIMISE:
buf = minimise(buf); buf = minimise(buf);