divided everything
This commit is contained in:
139
utils.lua
Normal file
139
utils.lua
Normal file
@ -0,0 +1,139 @@
|
||||
--[[
|
||||
Utility Functions
|
||||
Helper functions for logging, address handling, and iris control
|
||||
]]
|
||||
|
||||
local utils = {}
|
||||
|
||||
-- Import config (set by startup.lua)
|
||||
local config
|
||||
local gate
|
||||
|
||||
function utils.init(cfg, gateInterface)
|
||||
config = cfg
|
||||
gate = gateInterface
|
||||
end
|
||||
|
||||
---------------------------------------------
|
||||
-- LOGGING
|
||||
---------------------------------------------
|
||||
|
||||
function utils.log(message)
|
||||
if config.enableLogging then
|
||||
local timestamp = os.date("%Y-%m-%d %H:%M:%S")
|
||||
local logEntry = "[" .. timestamp .. "] " .. message
|
||||
|
||||
-- Write to console
|
||||
print(logEntry)
|
||||
|
||||
-- Write to file
|
||||
local file = fs.open(config.logFile, "a")
|
||||
if file then
|
||||
file.writeLine(logEntry)
|
||||
file.close()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------
|
||||
-- ADDRESS UTILITIES
|
||||
---------------------------------------------
|
||||
|
||||
function utils.addressToTable(address)
|
||||
if type(address) == "table" then
|
||||
return address
|
||||
end
|
||||
return {}
|
||||
end
|
||||
|
||||
function utils.compareAddresses(addr1, addr2)
|
||||
addr1 = gate.addressToString(addr1)
|
||||
addr2 = gate.addressToString(addr2)
|
||||
return addr1 == addr2
|
||||
end
|
||||
|
||||
function utils.deepcopy(orig)
|
||||
local orig_type = type(orig)
|
||||
local copy
|
||||
if orig_type == 'table' then
|
||||
copy = {}
|
||||
for orig_key, orig_value in next, orig, nil do
|
||||
copy[utils.deepcopy(orig_key)] = utils.deepcopy(orig_value)
|
||||
end
|
||||
setmetatable(copy, utils.deepcopy(getmetatable(orig)))
|
||||
else
|
||||
copy = orig
|
||||
end
|
||||
return copy
|
||||
end
|
||||
|
||||
function utils.isAddressInList(address, list)
|
||||
for _, entry in ipairs(list) do
|
||||
local listAddr = entry[2]
|
||||
local tmp = utils.deepcopy(listAddr)
|
||||
table.remove(tmp) -- Remove point of origin
|
||||
if utils.compareAddresses(address, tmp) then
|
||||
return true, entry[1]
|
||||
end
|
||||
end
|
||||
return false, nil
|
||||
end
|
||||
|
||||
function utils.isAddressAllowed(address)
|
||||
-- Check blacklist first
|
||||
local isBlacklisted, blackName = utils.isAddressInList(address, config.blacklist)
|
||||
if isBlacklisted then
|
||||
return false, "Blacklisted: " .. blackName
|
||||
end
|
||||
|
||||
-- If whitelist is not empty, check whitelist
|
||||
if #config.whitelist > 0 then
|
||||
local isWhitelisted, whiteName = utils.isAddressInList(address, config.whitelist)
|
||||
if isWhitelisted then
|
||||
return true, "Whitelisted: " .. whiteName
|
||||
else
|
||||
return false, "Not on whitelist"
|
||||
end
|
||||
end
|
||||
|
||||
-- If no whitelist, allow all non-blacklisted
|
||||
return true, "Allowed"
|
||||
end
|
||||
|
||||
---------------------------------------------
|
||||
-- IRIS CONTROL
|
||||
---------------------------------------------
|
||||
|
||||
function utils.closeIris()
|
||||
if config.irisEnabled then
|
||||
gate.closeIris()
|
||||
utils.log("Iris closed")
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function utils.openIris()
|
||||
if config.irisEnabled then
|
||||
gate.openIris()
|
||||
utils.log("Iris opened")
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function utils.getIrisState()
|
||||
if config.irisEnabled then
|
||||
local progress = gate.getIrisProgressPercentage()
|
||||
if progress == 0 then
|
||||
return "OPEN"
|
||||
elseif progress == 100 then
|
||||
return "CLOSED"
|
||||
else
|
||||
return "MOVING"
|
||||
end
|
||||
end
|
||||
return "NO IRIS"
|
||||
end
|
||||
|
||||
return utils
|
||||
Reference in New Issue
Block a user