local component = require("component") local event = require("event") local emerald = require("emerald") local fs = require("filesystem") local ser = require("serialization") local term = require("term") local data = component.data local permdata = {} -- LOG FUNCTION -- local function log(f, m) print(f..": "..m) end -- READ FUNCTION -- (Read the permissions file) local function read() if fs.exists("/home/.sectec.data") then local file = io.open(".sectec.data") local stream = file:read() file:close() return ser.unserialize(stream) else log("ERR", "No config file.") return false end end -- WRITE FUNCTION -- (Write in the permissions file) local function write() local file = io.open(".sectec.data", "w") file:write(ser.serialize(permdata)) file:close() end permdata = read() local prikey = data.deserializeKey(permdata.keys.pri, "ec-private") local pubkey = data.deserializeKey(permdata.keys.pub, "ec-public") -- ADMIN FUNCTIONS -- local function admin(user) log("ADMIN", user.name.." FROM "..user.alias) if user.cmd == "addusr" then permdata[user.who] = {} emerald.send(user.alias, data.ecdsa(data.md5(user.who), prikey)) log("ADDUSR", user.who) elseif user.cmd == "delusr" then permdata[user.who] = nil emerald.send(user.alias, "DELUSR") log("DELUSR", user.who) elseif user.cmd == "addperm" then if permdata[user.who] then permdata[user.who][user.what] = true emerald.send(user.alias, "ADDPERM") log("ADDPERM", user.what.." TO "..user.who) end elseif user.cmd == "delperm" then if permdata[user.who] then permdata[user.who][user.what] = nil emerald.send(user.alias, "DELPERM") log("DELPERM", user.what.." TO "..user.who) end elseif user.cmd == "gethash" then emerald.send(user.alias, data.ecdsa(data.md5(user.who), prikey)) log("GETHASH", user.who) end write() end term.clear() emerald.connect() while true do local _, flag, mess = event.pull("emerald") if flag == "MSG" then -- If emerald pushes a message local user = ser.unserialize(mess) if user.name == "keys" then log("ERR", "ABORT") elseif data.ecdsa(data.md5(user.name), pubkey, user.hash) then -- If the security hash is correct if permdata[user.name][user.perm] then -- Check the permission for the user if user.perm == "ADMIN" then admin(user) else emerald.send(user.alias, "GRANTED") log("GRANTED", user.name.." FROM "..user.alias) end else emerald.send(user.alias, "DENIED") log("DENIED", user.name.." FROM "..user.alias) end else emerald.send(user.alias, "SPOOF") log("SPOOF", user.name.." FROM "..user.alias) end else log(flag, mess) end end