Files
StargateControl/utils.lua

140 lines
3.3 KiB
Lua

--[[
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