10local function createSecureFunction(originalFunction,
object)
11 return setmetatable({}, {
13 if not
object.
__valid(
object) then
17 return originalFunction(...)
23local function wrapFunctionsWithValidation(
tbl,
object,
visited)
28 for k,
v in pairs(
tbl)
do
29 if type(
v) ==
"function" and not k:match(
"^_") then
30 tbl[k] = createSecureFunction(
v,
object)
31 elseif
type(
v) == "table" and not k:match("^_") and not
v.__skipWrap then
32 wrapFunctionsWithValidation(
v,
object,
visited)
37local function hashObject(
object)
40 local function collect(
tbl, prefix)
41 for k,
v in pairs(
tbl)
do
42 local
keyPath = prefix ..
"." .. k
43 if type(
v) ==
"function" and not k:match(
"^_") then
45 elseif
type(
v) == "table" and not k:match("^_") and not
v.__skipWrap then
51 collect(
object,
object.Meta and
object.Meta.Name or "
object")
69 local
object = setmetatable({},
self.BaseObject)
74 Description =
"No description set.",
79 object.__valid =
self.BaseObject.__valid
80 object.__locked =
false
88 if not
object or not
object.Meta or not
object.Meta.Name then
89 error(
"Invalid object passed to LockAndLoadObject.")
93 error("Object '" ..
object.Meta.Name .. "' is already locked.")
96 local
name =
object.Meta.Name
98 wrapFunctionsWithValidation(
object,
object)
99 object.
__hash = hashObject(
object)
107 FrameworkZ.Notifications:AddToQueue("Tampering Attempt: Cannot override
plugin after locking. This has been logged.",
FrameworkZ.Notifications.Types.Danger, 60)
110 __pairs = function() return pairs(
object) end,
111 __ipairs = function() return ipairs(
object) end,
112 __len = function() return
#object end,
120 error(
"Failed to load locked object: " ..
message)
127 local
object =
self.RegisteredObjects[objectName]
129 if object and not
self.LoadedObjects[objectName] then
133 if object.Initialize then
139 return
self.
LoadedObjects[objectName], "Object '" .. objectName .. "' loaded successfully."
142 return false, "Object '" .. objectName .. "' is not registered or is already loaded."
146 if not
self.__allowUnload then
148 FrameworkZ.Notifications:AddToQueue("
Security Warning: Unload attempt blocked for '" .. objectName .. "'. This has been logged.",
FrameworkZ.Notifications.Types.Danger)
162 if not
object.Meta or not
object.Meta.Name then
163 print("Plugin missing metadata or
name.")
170 FrameworkZ.Notifications:AddToQueue("
Security Alert: Attempted to re-register locked
plugin '" ..
object.Meta.Name .. "'. This has been logged.",
FrameworkZ.Notifications.Types.Warning, 60)
176 local
name =
object.Meta.Name
181 local hasRegisteredObject = false
183 for k,
v in pairs(
self.RegisteredPlugins) do
185 hasRegisteredObject = true
void self FrameworkZ UI self nil
void FrameworkZ Security BaseObject()
void local internalObjects()
void FrameworkZ Security __index()
void FrameworkZ Security LoadedObjects()
void FrameworkZ Security RegisteredObjects()
void FrameworkZ Security()
void local lockedObject()
void return object __hash()
void FrameworkZ Foundation()
Foundation for FrameworkZ.
Notifications module for FrameworkZ. Queues and sends notifications.
void RegisterObject(object)
void GetLoadedObject(objectName)
void LockAndLoadObject(object)
void GetObject(objectName)
void LoadLockedObject(objectName, lockedObject)
void UnloadObject(objectName)