TableHandler = {"table": {"columns": [], "rows": []}, "undefined": "?"}
TableHandler.add_column = function(title)
self.table["columns"].push(title)
for row_data in self.table["rows"]
row_data[title] = self.undefined
end for
end function
TableHandler.add_columns = function(title_list)
for title in title_list
self.add_column(title)
end for
end function
TableHandler.add_row = function(row_map)
data = {}
for column in self.table["columns"]
if row_map.hasIndex(column) then
data[column] = str(row_map[column])
else
data[column] = self.undefined
end if
end for
self.table["rows"].push(data)
end function
TableHandler.add_rows = function(rows_list)
for row_map in rows_list
self.add_row(row_map)
end for
end function
TableHandler.print_data = function(indent, title_color)
output_data = ""
columns = self.table["columns"]
rows = self.table["rows"]
title_indents = {}
for column in columns
output_data = output_data + "<color=" + title_color + ">" + column
title_indent = self.get_max_length(column) + indent - column.len
if title_indent < indent then title_indent = indent
title_indents[column] = title_indent
if columns.indexOf(column) != columns.len - 1 then output_data = output_data + " " * title_indent
end for
output_data = output_data + "</color>\n"
for row in rows
for column in columns
output_data = output_data + row[column]
row_indent = title_indents[column] + self.raw_string(column).len - self.raw_string(row[column]).len
if row_indent < indent then row_indent = indent
if columns.indexOf(column) != columns.len - 1 then output_data = output_data + " " * row_indent
end for
if rows.indexOf(row) != rows.len - 1 then output_data = output_data + "\n"
end for
print(output_data)
end function
TableHandler.get_max_length = function(column)
max_length = 0
for row in self.table["rows"]
length = self.raw_string(row[column]).len
if max_length < length then max_length = length
end for
return max_length
end function
TableHandler.raw_string = function(string)
if string.indexOf("<color=") != null then
string = string.split(">")[1].split("<")[0]
end if
return string
end function
TableHandler.clear = function()
self.table["columns"] = []
self.table["rows"] = []
end function
LibHandler = {"path_to_libs": "/lib", "metalibs_list": [], "libs_files": {}, "required_update": []}
LibHandler._init_ = function(libs_path)
if libs_path then
self.path_to_libs = libs_path
self.metalibs_list = []
self.libs_files = {}
self.required_update = []
self.libs_directory = get_shell.host_computer.File(self.path_to_libs)
if not self.libs_directory then self.error("Folder ""<b>" + self.path_to_libs + "</b>"" was not found!")
self.metaxploit = self.include("metaxploit.so")
self.apt_client = self.include("aptclient.so")
self.get_libs()
end function
LibHandler.get_libs = function()
self.metalibs_list = []
self.libs_files = {}
self.required_update = []
for file in self.libs_directory.get_files
if not file.is_binary or file.name.split(".")[-1] != "so" then continue
lib = self.load_lib(file.name)
self.metalibs_list.push(lib)
self.libs_files[lib.lib_name] = file
self.get_update(lib)
end for
end function
LibHandler.load_lib = function(file_name)
lib = self.metaxploit.load(self.path_to_libs + "/" + file_name)
if not lib then self.error("File ""<b>" + self.path_to_libs + "/" + file_name + "</b>"" was not loaded!")
return lib
end function
LibHandler.include = function(file_name)
lib = include_lib(self.path_to_libs + "/" + file_name)
if not lib then self.error("File ""<b>" + self.path_to_libs + "/" + file_name + "</b>"" was not found!")
return lib
end function
LibHandler.error = function(content)
exit("<color=red>" + content + "</color>")
end function
LibHandler.print_data = function()
data_table = new TableHandler
data_table.add_columns(["NAME", "VERSION", "UPDATE"])
for lib in self.metalibs_list
data_table.add_row({"NAME": lib.lib_name, "VERSION": lib.version, "UPDATE": self.get_update(lib)})
end for
data_table.print_data(5, "orange")
data_table.clear()
end function
LibHandler.add_to_required = function(lib_name_string)
if self.required_update.indexOf(lib_name_string) == null then self.required_update.push(lib_name_string)
end function
LibHandler.get_update = function(lib)
output = ""
update_state = self.apt_client.check_upgrade(self.libs_files[lib.lib_name].path)
if update_state == 0 then
output = "<color=green>RECEIVED</color>"
else if update_state == 1 then
output = "<color=red>REQUIRED</color>"
self.add_to_required(lib.lib_name)
else
output = "<color=yellow>UNDEFINED</color>"
end if
return output
end function
LibHandler.update = function(lib)
if typeof(lib) == "string" then lib = self.load_lib(lib)
print("Downloading update for ""<b>" + lib.lib_name + "</b>""...")
old_version = lib.version
wait(0.5)
self.apt_client.install(lib.lib_name, self.path_to_libs)
print("Update for ""<b>" + lib.lib_name + "</b>"" installed <color=green>successfully</color>! [<b>" + old_version + "</b>-><b>" + lib.version + "</b>]")
end function
LibHandler.update_required = function()
if self.required_update.len == 0 then
for lib in self.metalibs_list
self.get_update(lib)
end for
end if
for lib_name_string in self.required_update
self.update(self.load_lib(lib_name_string))
end for
self.get_libs()
end function
parse_parameters = function(parameters, allowed_flags, data_flags, optional_data_flags)
is_flag = function(parameter)
if parameter[0] == "-" then
return true
else
return false
end if
end function
is_allowed = function(flag)
if allowed_flags.indexOf(flag) != null then
return true
else
return false
end if
end function
is_data = function(flag)
return data_flags.hasIndex(flag)
end function
is_optional_data = function(flag)
return optional_data_flags.hasIndex(flag)
end function
invalid_option = function(flag, flag_help)
exit("<color=red>Wrong argument. Usage: ""<b>" + flag + " " + flag_help + "</b>""")
end function
output = []
if parameters.len == 0 then return []
for i in range(0, parameters.len - 1)
parameter = parameters[i]
if is_flag(parameter) then
if not is_allowed(parameter) then exit("<color=red>Flag ""<b>" + parameter + "</b>"" is not allowed!")
if not is_data(parameter) and not is_optional_data(parameter) then
output.push({"data_flag": false, "flag": parameter})
else if is_data(parameter) and not is_optional_data(parameter) then
if not parameters.hasIndex(i+1) or is_flag(parameters[i+1]) then invalid_option(parameter, data_flags[parameter])
output.push({"data_flag": true, "flag": parameter, "data": parameters[i+1]})
else
if parameters.hasIndex(i+1) and not is_flag(parameters[i+1]) then
output.push({"data_flag": true, "flag": parameter, "data": parameters[i+1]})
else
output.push({"data_flag": false, "flag": parameter})
end if
end if
end if
end for
return output
end function
help = function(close)
info = "Additional parameters:\nParameter ""<b>-p</b>"" is required to set path to libs folder. \nExample: <b>" + program_path.split("/")[-1] + " -p /bin/libs</b>\nParameter ""<b>-u</b> optional:[library_name]"" is required to update libs.\nExample: <b>" + program_path.split("/")[-1] + " -u init.so</b>\nParameter ""<b>-s</b>"" is required to show libs info.\nExample: <b>" + program_path.split("/")[-1] + " -s </b>"
if close then
exit(info)
else
print(info)
end function
find_any = function(parameters, flags)
for parameter in parameters
for flag in flags
if parameter["flag"] == flag then return true
end for
end for
return false
end function
main = function()
libs_path = "/lib"
lib_handler = new LibHandler
lib_handler._init_(libs_path)
parameters = parse_parameters(params, ["-h", "-help", "-p", "-path", "-u", "-update", "-s", "-show"], {"-p": "[path]", "-path": "[path]"}, {"-u": "[library_name]", "-update": "[library_name]"})
for parameter in parameters
if parameter["flag"] == "-s" or parameter["flag"] == "-show" then lib_handler.print_data()
if parameter["flag"] == "-h" or parameter["flag"] == "-help" then help(false)
if parameter["flag"] == "-p" or parameter["flag"] == "-path" then
libs_path = parameter["data"]
lib_handler._init_(libs_path)
end if
if parameter["flag"] == "-u" or parameter["flag"] == "-update" then
if parameter["data_flag"] then lib_handler.update(parameter["data"])
if not parameter["data_flag"] then lib_handler.update_required()
end if
end for
if parameters.len == 0 or not find_any(parameters, ["-h", "-help", "-s", "-show"]) then lib_handler.print_data()
end function
main()