1
0
mirror of https://github.com/kepler155c/opus synced 2025-06-09 01:54:10 +00:00

require improvements, remove global Util

This commit is contained in:
kepler155c@gmail.com 2017-09-05 02:09:31 -04:00
parent 2b1d96ab37
commit ae7508e89b
82 changed files with 506 additions and 455 deletions

View File

@ -1,4 +1,5 @@
local class = require('class') local class = require('class')
local Util = require('util')
local TableDB = require('tableDB') local TableDB = require('tableDB')
local JSON = require('json') local JSON = require('json')

View File

@ -1,4 +1,5 @@
local class = require('class') local class = require('class')
local Util = require('util')
local itemDB = require('itemDB') local itemDB = require('itemDB')
local Peripheral = require('peripheral') local Peripheral = require('peripheral')

View File

@ -1,3 +1,5 @@
local Util = require('util')
local Event = { local Event = {
uid = 1, -- unique id for handlers uid = 1, -- unique id for handlers
routines = { }, -- coroutines routines = { }, -- coroutines

View File

@ -1,3 +1,4 @@
local Util = require('util')
local UI = require('ui') local UI = require('ui')
return function(args) return function(args)

View File

@ -1,3 +1,5 @@
local Util = require('util')
local ramfs = { } local ramfs = { }
function ramfs.mount(dir, nodeType) function ramfs.mount(dir, nodeType)

View File

@ -1,4 +1,5 @@
local synchronized = require('sync') local synchronized = require('sync')
local Util = require('util')
local urlfs = { } local urlfs = { }

View File

@ -11,36 +11,6 @@ local DEFAULT_UPATH = 'https://raw.githubusercontent.com/kepler155c/opus/' .. br
local PASTEBIN_URL = 'http://pastebin.com/raw' local PASTEBIN_URL = 'http://pastebin.com/raw'
local GIT_URL = 'https://raw.githubusercontent.com' local GIT_URL = 'https://raw.githubusercontent.com'
local function standardSearcher(modname, env, shell)
if _G.package.loaded[modname] then
return function()
return _G.package.loaded[modname]
end
end
end
local function shellSearcher(modname, env, shell)
local fname = modname:gsub('%.', '/') .. '.lua'
if shell and type(shell.dir) == 'function' then
local path = shell.resolve(fname)
if fs.exists(path) and not fs.isDir(path) then
return loadfile(path, env)
end
end
end
local function pathSearcher(modname, env, shell)
local fname = modname:gsub('%.', '/') .. '.lua'
for dir in string.gmatch(_G.package.path, "[^:]+") do
local path = fs.combine(dir, fname)
if fs.exists(path) and not fs.isDir(path) then
return loadfile(path, env)
end
end
end
-- fix broken http get -- fix broken http get
local syncLocks = { } local syncLocks = { }
@ -81,8 +51,40 @@ local function loadUrl(url)
end end
end end
-- require('BniCQPVf') local function requireWrapper(env)
local function pastebinSearcher(modname, env, shell)
local function standardSearcher(modname, env, shell)
if package.loaded[modname] then
return function()
return package.loaded[modname]
end
end
end
local function shellSearcher(modname, env, shell)
local fname = modname:gsub('%.', '/') .. '.lua'
if shell and type(shell.dir) == 'function' then
local path = shell.resolve(fname)
if fs.exists(path) and not fs.isDir(path) then
return loadfile(path, env)
end
end
end
local function pathSearcher(modname, env, shell)
local fname = modname:gsub('%.', '/') .. '.lua'
for dir in string.gmatch(package.path, "[^:]+") do
local path = fs.combine(dir, fname)
if fs.exists(path) and not fs.isDir(path) then
return loadfile(path, env)
end
end
end
-- require('BniCQPVf')
local function pastebinSearcher(modname, env, shell)
if #modname == 8 and not modname:match('%W') then if #modname == 8 and not modname:match('%W') then
local url = PASTEBIN_URL .. '/' .. modname local url = PASTEBIN_URL .. '/' .. modname
local c = loadUrl(url) local c = loadUrl(url)
@ -90,10 +92,10 @@ local function pastebinSearcher(modname, env, shell)
return load(c, modname, nil, env) return load(c, modname, nil, env)
end end
end end
end end
-- require('kepler155c.opus.master.sys.apis.util') -- require('kepler155c.opus.master.sys.apis.util')
local function gitSearcher(modname, env, shell) local function gitSearcher(modname, env, shell)
local fname = modname:gsub('%.', '/') .. '.lua' local fname = modname:gsub('%.', '/') .. '.lua'
local _, count = fname:gsub("/", "") local _, count = fname:gsub("/", "")
if count >= 3 then if count >= 3 then
@ -103,13 +105,13 @@ local function gitSearcher(modname, env, shell)
return load(c, modname, nil, env) return load(c, modname, nil, env)
end end
end end
end end
local function urlSearcher(modname, env, shell) local function urlSearcher(modname, env, shell)
local fname = modname:gsub('%.', '/') .. '.lua' local fname = modname:gsub('%.', '/') .. '.lua'
if fname:sub(1, 1) ~= '/' then if fname:sub(1, 1) ~= '/' then
for entry in string.gmatch(_G.package.upath, "[^;]+") do for entry in string.gmatch(package.upath, "[^;]+") do
local url = entry .. '/' .. fname local url = entry .. '/' .. fname
local c = loadUrl(url) local c = loadUrl(url)
if c then if c then
@ -117,9 +119,10 @@ local function urlSearcher(modname, env, shell)
end end
end end
end end
end end
_G.package = { -- place package and require function into env
package = {
path = LUA_PATH or 'sys/apis', path = LUA_PATH or 'sys/apis',
upath = LUA_UPATH or DEFAULT_UPATH, upath = LUA_UPATH or DEFAULT_UPATH,
config = '/\n:\n?\n!\n-', config = '/\n:\n?\n!\n-',
@ -138,26 +141,18 @@ _G.package = {
gitSearcher, gitSearcher,
urlSearcher, urlSearcher,
} }
} }
local function requireWrapper(env) function require(modname)
local loaded = { } for _,searcher in ipairs(package.loaders) do
return function(modname)
if loaded[modname] then
return loaded[modname]
end
for _,searcher in ipairs(_G.package.loaders) do
local fn, msg = searcher(modname, env, shell) local fn, msg = searcher(modname, env, shell)
if fn then if fn then
local module, msg = fn(modname, env) local module, msg = fn(modname, env)
if not module then if not module then
error(msg) error(msg)
end end
loaded[modname] = module package.loaded[modname] = module
return module return module
end end
if msg then if msg then
@ -166,6 +161,8 @@ local function requireWrapper(env)
end end
error('Unable to find module ' .. modname) error('Unable to find module ' .. modname)
end end
return require -- backwards compatible
end end
return function(env) return function(env)

View File

@ -1,3 +1,4 @@
local Util = require('util')
local TableDB = require('tableDB') local TableDB = require('tableDB')
local itemDB = TableDB({ fileName = 'usr/etc/items.db' }) local itemDB = TableDB({ fileName = 'usr/etc/items.db' })

View File

@ -1,3 +1,5 @@
local Util = require('util')
local ME = { local ME = {
jobList = { } jobList = { }
} }

View File

@ -1,4 +1,5 @@
local class = require('class') local class = require('class')
local Util = require('util')
local Logger = require('logger') local Logger = require('logger')
local Peripheral = require('peripheral') local Peripheral = require('peripheral')

View File

@ -1,3 +1,5 @@
local Util = require('util')
local Peripheral = { } local Peripheral = { }
local function getDeviceList() local function getDeviceList()

View File

@ -1,3 +1,4 @@
local Util = require('util')
local Logger = require('logger') local Logger = require('logger')
local Profile = { local Profile = {

View File

@ -1,4 +1,5 @@
local class = require('class') local class = require('class')
local Util = require('util')
local Peripheral = require('peripheral') local Peripheral = require('peripheral')
local itemDB = require('itemDB') local itemDB = require('itemDB')

View File

@ -1,4 +1,5 @@
local class = require('class') local class = require('class')
local Util = require('util')
local DEFLATE = require('deflatelua') local DEFLATE = require('deflatelua')
local UI = require('ui') local UI = require('ui')
local Point = require('point') local Point = require('point')

56
sys/apis/security.lua Normal file
View File

@ -0,0 +1,56 @@
local Config = require('config')
local config = { }
local Security = { }
function Security.verifyPassword(password)
Config.load('os', config)
return config.password and password == config.password
end
function Security.getSecretKey()
Config.load('os', config)
if not config.secretKey then
config.secretKey = math.random(100000, 999999)
Config.update('os', config)
end
return config.secretKey
end
function Security.getPublicKey()
local exchange = {
base = 11,
primeMod = 625210769
}
local function modexp(base, exponent, modulo)
local remainder = base
for i = 1, exponent-1 do
remainder = remainder * remainder
if remainder >= modulo then
remainder = remainder % modulo
end
end
return remainder
end
local secretKey = Security.getSecretKey()
return modexp(exchange.base, secretKey, exchange.primeMod)
end
function Security.updatePassword(password)
Config.load('os', config)
config.password = password
Config.update('os', config)
end
function Security.getPassword()
Config.load('os', config)
return config.password
end
return Security

View File

@ -1,5 +1,7 @@
local Logger = require('logger')
local Crypto = require('crypto') local Crypto = require('crypto')
local Logger = require('logger')
local Security = require('security')
local Util = require('util')
local socketClass = { } local socketClass = { }
@ -110,7 +112,7 @@ function Socket.connect(host, port)
type = 'OPEN', type = 'OPEN',
shost = socket.shost, shost = socket.shost,
dhost = socket.dhost, dhost = socket.dhost,
t = Crypto.encrypt({ ts = os.time(), seq = socket.seq }, os.getPublicKey()), t = Crypto.encrypt({ ts = os.time(), seq = socket.seq }, Security.getPublicKey()),
rseq = socket.wseq, rseq = socket.wseq,
wseq = socket.rseq, wseq = socket.rseq,
}) })

View File

@ -1,4 +1,5 @@
local class = require('class') local class = require('class')
local Util = require('util')
local TableDB = class() local TableDB = class()
function TableDB:init(args) function TableDB:init(args)

View File

@ -1,3 +1,5 @@
local Util = require('util')
local Terminal = { } local Terminal = { }
function Terminal.scrollable(ct, size) function Terminal.scrollable(ct, size)

View File

@ -3425,7 +3425,7 @@ function UI.NftImage:setImage(image)
end end
UI:loadTheme('usr/config/ui.theme') UI:loadTheme('usr/config/ui.theme')
if os.getVersion and os.getVersion() >= 1.79 then if Util.getVersion() >= 1.79 then
UI:loadTheme('sys/etc/ext.theme') UI:loadTheme('sys/etc/ext.theme')
end end

View File

@ -69,6 +69,19 @@ function Util.print(pattern, ...)
print(Util.tostring(pattern, ...)) print(Util.tostring(pattern, ...))
end end
function Util.getVersion()
local version
if _CC_VERSION then
version = tonumber(_CC_VERSION:gmatch('[%d]+%.?[%d][%d]', '%1')())
end
if not version and _HOST then
version = tonumber(_HOST:gmatch('[%d]+%.?[%d][%d]', '%1')())
end
return version or 1.7
end
function Util.runFunction(env, fn, ...) function Util.runFunction(env, fn, ...)
setfenv(fn, env) setfenv(fn, env)
setmetatable(env, { __index = _G }) setmetatable(env, { __index = _G })

View File

@ -1,6 +1,32 @@
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local Util = require('util')
local Config = require('config')
local SHA1 = require('sha1')
local UI = require('ui') local UI = require('ui')
local Util = require('util')
-- scrap this entire file. don't muck with standard apis
local REGISTRY_DIR = 'usr/.registry'
-- FIX SOMEDAY
function os.registerApp(app, key)
app.key = SHA1.sha1(key)
Util.writeTable(fs.combine(REGISTRY_DIR, app.key), app)
os.queueEvent('os_register_app')
end
function os.unregisterApp(key)
local filename = fs.combine(REGISTRY_DIR, SHA1.sha1(key))
if fs.exists(filename) then
fs.delete(filename)
os.queueEvent('os_register_app')
end
end
local sandboxEnv = Util.shallowCopy(getfenv(1)) local sandboxEnv = Util.shallowCopy(getfenv(1))
setmetatable(sandboxEnv, { __index = _G }) setmetatable(sandboxEnv, { __index = _G })
@ -149,7 +175,7 @@ end
local appPage = UI.Page({ local appPage = UI.Page({
backgroundColor = UI.ViewportWindow.defaults.backgroundColor, backgroundColor = UI.ViewportWindow.defaults.backgroundColor,
menuBar = UI.MenuBar({ menuBar = UI.MenuBar({
showBackButton = not os.isPocket(), showBackButton = not pocket,
buttons = { buttons = {
{ text = 'Install', event = 'install' }, { text = 'Install', event = 'install' },
{ text = 'Run', event = 'run' }, { text = 'Run', event = 'run' },

View File

@ -1,6 +1,8 @@
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local Event = require('event') local Event = require('event')
local UI = require('ui') local UI = require('ui')
local Util = require('util')
multishell.setTitle(multishell.getCurrent(), 'Events') multishell.setTitle(multishell.getCurrent(), 'Events')
UI:configure('Events', ...) UI:configure('Events', ...)

View File

@ -1,8 +1,9 @@
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local Util = require('util')
local Config = require('config')
local Event = require('event') local Event = require('event')
local UI = require('ui') local UI = require('ui')
local Config = require('config') local Util = require('util')
local cleanEnv = Util.shallowCopy(getfenv(1)) local cleanEnv = Util.shallowCopy(getfenv(1))
cleanEnv.require = nil cleanEnv.require = nil

View File

@ -1,4 +1,5 @@
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local Event = require('event') local Event = require('event')
local UI = require('ui') local UI = require('ui')

View File

@ -1,14 +1,15 @@
local injector = requireInjector or load(http.get('http://pastebin.com/raw/c0TWsScv').readAll())() local injector = requireInjector or load(http.get('http://pastebin.com/raw/c0TWsScv').readAll())()
require = injector(getfenv(1)) injector(getfenv(1))
local Util = require('util')
local UI = require('ui')
local Event = require('event') local Event = require('event')
local History = require('history') local History = require('history')
local UI = require('ui')
local Util = require('util')
local sandboxEnv = Util.shallowCopy(getfenv(1)) local sandboxEnv = Util.shallowCopy(getfenv(1))
sandboxEnv.exit = function() Event.exitPullEvents() end
sandboxEnv.require = injector(sandboxEnv)
setmetatable(sandboxEnv, { __index = _G }) setmetatable(sandboxEnv, { __index = _G })
sandboxEnv.exit = function() Event.exitPullEvents() end
injector(sandboxEnv)
multishell.setTitle(multishell.getCurrent(), 'Lua') multishell.setTitle(multishell.getCurrent(), 'Lua')
UI:configure('Lua', ...) UI:configure('Lua', ...)

View File

@ -1,7 +1,9 @@
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local Event = require('event') local Event = require('event')
local UI = require('ui')
local Socket = require('socket') local Socket = require('socket')
local UI = require('ui')
local Util = require('util')
multishell.setTitle(multishell.getCurrent(), 'Network') multishell.setTitle(multishell.getCurrent(), 'Network')
UI:configure('Network', ...) UI:configure('Network', ...)

View File

@ -1,13 +1,14 @@
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local Util = require('util')
local Event = require('event')
local UI = require('ui')
local Config = require('config')
local NFT = require('nft')
local class = require('class') local class = require('class')
local Config = require('config')
local Event = require('event')
local FileUI = require('fileui') local FileUI = require('fileui')
local Tween = require('tween') local NFT = require('nft')
local SHA1 = require('sha1') local SHA1 = require('sha1')
local Tween = require('tween')
local UI = require('ui')
local Util = require('util')
local REGISTRY_DIR = 'usr/.registry' local REGISTRY_DIR = 'usr/.registry'

View File

@ -1,8 +1,8 @@
local injector = requireInjector or load(http.get('http://pastebin.com/raw/c0TWsScv').readAll())() requireInjector(getfenv(1))
require = injector(getfenv(1))
local Util = require('util')
local Event = require('event') local Event = require('event')
local UI = require('ui') local UI = require('ui')
local Util = require('util')
multishell.setTitle(multishell.getCurrent(), 'Devices') multishell.setTitle(multishell.getCurrent(), 'Devices')

View File

@ -1,7 +1,9 @@
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local Config = require('config')
local Event = require('event') local Event = require('event')
local UI = require('ui') local UI = require('ui')
local Config = require('config') local Util = require('util')
multishell.setTitle(multishell.getCurrent(), 'PIM') multishell.setTitle(multishell.getCurrent(), 'PIM')

View File

@ -1,8 +1,10 @@
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local Event = require('event')
local UI = require('ui')
local Socket = require('socket')
local Config = require('config') local Config = require('config')
local Event = require('event')
local Socket = require('socket')
local UI = require('ui')
local Util = require('util')
local GROUPS_PATH = 'usr/groups' local GROUPS_PATH = 'usr/groups'
local SCRIPTS_PATH = 'sys/etc/scripts' local SCRIPTS_PATH = 'sys/etc/scripts'

View File

@ -1,7 +1,9 @@
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local Config = require('config')
local Event = require('event') local Event = require('event')
local UI = require('ui') local UI = require('ui')
local Config = require('config') local Util = require('util')
multishell.setTitle(multishell.getCurrent(), 'System') multishell.setTitle(multishell.getCurrent(), 'System')
UI:configure('System', ...) UI:configure('System', ...)
@ -86,7 +88,7 @@ local systemPage = UI.Page {
grid = UI.ScrollingGrid { grid = UI.ScrollingGrid {
y = 4, y = 4,
values = { values = {
{ name = 'CC version', value = os.getVersion() }, { name = 'CC version', value = Util.getVersion() },
{ name = 'Lua version', value = _VERSION }, { name = 'Lua version', value = _VERSION },
{ name = 'MC version', value = _MC_VERSION or 'unknown' }, { name = 'MC version', value = _MC_VERSION or 'unknown' },
{ name = 'Disk free', value = Util.toBytes(fs.getFreeSpace('/')) }, { name = 'Disk free', value = Util.toBytes(fs.getFreeSpace('/')) },

View File

@ -1,6 +1,8 @@
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local UI = require('ui')
local Event = require('event') local Event = require('event')
local UI = require('ui')
local Util = require('util')
multishell.setTitle(multishell.getCurrent(), 'Tabs') multishell.setTitle(multishell.getCurrent(), 'Tabs')
UI:configure('Tabs', ...) UI:configure('Tabs', ...)

View File

@ -1,9 +1,11 @@
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local Event = require('event') local Event = require('event')
local UI = require('ui') local itemDB = require('itemDB')
local Socket = require('socket') local Socket = require('socket')
local Terminal = require('terminal') local Terminal = require('terminal')
local itemDB = require('itemDB') local UI = require('ui')
local Util = require('util')
multishell.setTitle(multishell.getCurrent(), 'Turtles') multishell.setTitle(multishell.getCurrent(), 'Turtles')
UI.Button.defaults.focusIndicator = ' ' UI.Button.defaults.focusIndicator = ' '

View File

@ -1,4 +1,5 @@
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
Base64 = require('base64') Base64 = require('base64')
local args = { ... } local args = { ... }

View File

@ -2,19 +2,21 @@ if not turtle and not commands then
error('Must be run on a turtle or a command computer') error('Must be run on a turtle or a command computer')
end end
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local Blocks = require('blocks')
local class = require('class') local class = require('class')
local Event = require('event') local Event = require('event')
local MEProvider = require('meProvider')
local Message = require('message') local Message = require('message')
local UI = require('ui') local Point = require('point')
local Schematic = require('schematic') local Schematic = require('schematic')
local TableDB = require('tableDB') local TableDB = require('tableDB')
local MEProvider = require('meProvider') local UI = require('ui')
local Blocks = require('blocks') local Util = require('util')
local Point = require('point')
local ChestProvider = require('chestProvider') local ChestProvider = require('chestProvider')
if os.getVersion() == 1.8 then if Util.getVersion() == 1.8 then
ChestProvider = require('chestProvider18') ChestProvider = require('chestProvider18')
end end
@ -685,7 +687,7 @@ end
-- figure out our orientation in the world -- figure out our orientation in the world
function Builder:getTurtleFacing() function Builder:getTurtleFacing()
if os.getVersion() == 1.8 then if Util.getVersion() == 1.8 then
local directions = { -- reversed directions local directions = { -- reversed directions
[5] = 'west', [5] = 'west',
@ -935,7 +937,7 @@ function Builder:placeDirectionalBlock(b, slot, travelPlane)
local isSouth = (turtle.getHeadingInfo(Builder.facing).heading + local isSouth = (turtle.getHeadingInfo(Builder.facing).heading +
turtle.getHeadingInfo(stairUpDirections[d]).heading) % 4 == 1 turtle.getHeadingInfo(stairUpDirections[d]).heading) % 4 == 1
if os.getVersion() == 1.8 then if Util.getVersion() == 1.8 then
isSouth = false -- no stair bug in this version isSouth = false -- no stair bug in this version
end end

View File

@ -1,12 +1,14 @@
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local UI = require('ui')
local Event = require('event')
local Config = require('config')
local ChestProvider = require('chestProvider18') local ChestProvider = require('chestProvider18')
local RefinedProvider = require('refinedProvider') local Config = require('config')
local Event = require('event')
local itemDB = require('itemDB') local itemDB = require('itemDB')
local Terminal = require('terminal')
local Peripheral = require('peripheral') local Peripheral = require('peripheral')
local RefinedProvider = require('refinedProvider')
local Terminal = require('terminal')
local UI = require('ui')
local Util = require('util')
multishell.setTitle(multishell.getCurrent(), 'Resource Manager') multishell.setTitle(multishell.getCurrent(), 'Resource Manager')

View File

@ -46,7 +46,7 @@ if not clipboard then
function clipboard.getText() function clipboard.getText()
if clipboard.data then if clipboard.data then
return Util.tostring(clipboard.data) return tostring(clipboard.data)
end end
end end

View File

@ -1,5 +1,4 @@
local injector = requireInjector or load(http.get('http://pastebin.com/raw/c0TWsScv').readAll())() requireInjector(getfenv(1))
require = injector(getfenv(1))
local RefinedProvider = require('refinedProvider') local RefinedProvider = require('refinedProvider')
local TableDB = require('tableDB') local TableDB = require('tableDB')

View File

@ -1,7 +1,9 @@
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local Event = require('event') local Event = require('event')
local Message = require('message') local Message = require('message')
local UI = require('ui') local UI = require('ui')
local Util = require('util')
multishell.setTitle(multishell.getCurrent(), 'Log Monitor') multishell.setTitle(multishell.getCurrent(), 'Log Monitor')

View File

@ -1,4 +1,5 @@
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local Terminal = require('terminal') local Terminal = require('terminal')
local args = { ... } local args = { ... }

View File

@ -1,8 +1,10 @@
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local Event = require('event')
local Logger = require('logger')
local Socket = require('socket') local Socket = require('socket')
local Terminal = require('terminal') local Terminal = require('terminal')
local Logger = require('logger') local Util = require('util')
local Event = require('event')
Logger.setScreenLogging() Logger.setScreenLogging()

View File

@ -1,7 +1,8 @@
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local Event = require('event') local Event = require('event')
local Socket = require('socket')
local Logger = require('logger') local Logger = require('logger')
local Socket = require('socket')
Logger.setScreenLogging() Logger.setScreenLogging()

6
sys/apps/mount.lua Normal file
View File

@ -0,0 +1,6 @@
local args = { ... }
local target = table.remove(args, 1)
target = shell.resolve(target)
fs.mount(target, unpack(args))

View File

@ -14,10 +14,15 @@ end
multishell.term = term.current() multishell.term = term.current()
local defaultEnv = Util.shallowCopy(getfenv(1)) local defaultEnv = { }
for k,v in pairs(getfenv(1)) do
defaultEnv[k] = v
end
requireInjector(getfenv(1))
require = requireInjector(getfenv(1))
local Config = require('config') local Config = require('config')
local Util = require('util')
-- Begin multishell -- Begin multishell
local parentTerm = term.current() local parentTerm = term.current()
@ -557,9 +562,7 @@ while true do
elseif sEvent == "mouse_click" then elseif sEvent == "mouse_click" then
local button, x, y = tEventData[1], tEventData[2], tEventData[3] local button, x, y = tEventData[1], tEventData[2], tEventData[3]
lastClicked = nil lastClicked = nil
if y == 1 and os.locked then if y == 1 then
-- ignore
elseif y == 1 then
-- Switch process -- Switch process
local w, h = parentTerm.getSize() local w, h = parentTerm.getSize()
if x == 1 then if x == 1 then

View File

@ -1,10 +1,12 @@
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local Security = require('security')
local SHA1 = require('sha1') local SHA1 = require('sha1')
local Terminal = require('terminal') local Terminal = require('terminal')
local password = Terminal.readPassword('Enter new password: ') local password = Terminal.readPassword('Enter new password: ')
if password then if password then
os.updatePassword(SHA1.sha1(password)) Security.updatePassword(SHA1.sha1(password))
print('Password updated') print('Password updated')
end end

View File

@ -1,10 +1,12 @@
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local GPS = require('gps')
local Socket = require('socket')
local MEProvider = require('meProvider')
local Logger = require('logger')
local Point = require('point')
local Event = require('event') local Event = require('event')
local GPS = require('gps')
local Logger = require('logger')
local MEProvider = require('meProvider')
local Point = require('point')
local Socket = require('socket')
local Util = require('util')
if not device.wireless_modem then if not device.wireless_modem then
error('Modem is required') error('Modem is required')

View File

@ -2,11 +2,13 @@ if not device.wireless_modem then
error('Wireless modem is required') error('Wireless modem is required')
end end
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local GPS = require('gps')
local Event = require('event') local Event = require('event')
local UI = require('ui') local GPS = require('gps')
local Socket = require('socket') local Socket = require('socket')
local UI = require('ui')
local Util = require('util')
multishell.setTitle(multishell.getCurrent(), 'Pickup Remote') multishell.setTitle(multishell.getCurrent(), 'Pickup Remote')

View File

@ -14,6 +14,10 @@ local version = "Version 1.1.6"
-- Original code by Bomb Bloke -- Original code by Bomb Bloke
-- Modified to integrate with opus os -- Modified to integrate with opus os
requireInjector(getfenv(1))
local Util = require('util')
local recTerm, oldTerm, arg, showInput, skipLast, lastDelay, curInput = {}, Util.shallowCopy(multishell.term), {...}, false, false, 2, "" local recTerm, oldTerm, arg, showInput, skipLast, lastDelay, curInput = {}, Util.shallowCopy(multishell.term), {...}, false, false, 2, ""
local curBlink, oldBlink, tTerm, buffer, colourNum, xPos, yPos, oldXPos, oldYPos, tCol, bCol, xSize, ySize = false, false, {}, {}, {}, 1, 1, 1, 1, colours.white, colours.black, oldTerm.getSize() local curBlink, oldBlink, tTerm, buffer, colourNum, xPos, yPos, oldXPos, oldYPos, tCol, bCol, xSize, ySize = false, false, {}, {}, {}, 1, 1, 1, 1, colours.white, colours.black, oldTerm.getSize()
local greys, buttons = {["0"] = true, ["7"] = true, ["8"] = true, ["f"] = true}, {"l", "r", "m"} local greys, buttons = {["0"] = true, ["7"] = true, ["8"] = true, ["f"] = true}, {"l", "r", "m"}

View File

@ -1,10 +1,10 @@
local injector = requireInjector or load(http.get('http://pastebin.com/raw/c0TWsScv').readAll())() requireInjector(getfenv(1))
require = injector(getfenv(1))
local UI = require('ui') local Peripheral = require('peripheral')
local RefinedProvider = require('refinedProvider') local RefinedProvider = require('refinedProvider')
local Terminal = require('terminal') local Terminal = require('terminal')
local Peripheral = require('peripheral') local UI = require('ui')
local Util = require('util')
local controller = RefinedProvider() local controller = RefinedProvider()
if not controller:isValid() then if not controller:isValid() then

View File

@ -1,7 +1,9 @@
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local UI = require('ui')
local GPS = require('gps') local GPS = require('gps')
local Socket = require('socket') local Socket = require('socket')
local UI = require('ui')
local Util = require('util')
multishell.setTitle(multishell.getCurrent(), 'Shapes') multishell.setTitle(multishell.getCurrent(), 'Shapes')
@ -11,10 +13,12 @@ turtleId = tonumber(turtleId)
local script = [[ local script = [[
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local GPS = require('gps') local GPS = require('gps')
local ChestProvider = require('chestProvider18') local ChestProvider = require('chestProvider18')
local Point = require('point') local Point = require('point')
local Util = require('util')
local itemProvider local itemProvider
@ -245,8 +249,10 @@ end)
local levelScript = [[ local levelScript = [[
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local Point = require('point') local Point = require('point')
local Util = require('util')
local checkedNodes = { } local checkedNodes = { }
local nodes = { } local nodes = { }

View File

@ -1,9 +1,16 @@
local parentShell = shell local parentShell = shell
shell = { } shell = { }
local sandboxEnv = Util.shallowCopy(getfenv(1)) local sandboxEnv = { }
for k,v in pairs(getfenv(1)) do
sandboxEnv[k] = v
end
setmetatable(sandboxEnv, { __index = _G }) setmetatable(sandboxEnv, { __index = _G })
requireInjector(getfenv(1))
local Util = require('util')
local DIR = (parentShell and parentShell.dir()) or "" local DIR = (parentShell and parentShell.dir()) or ""
local PATH = (parentShell and parentShell.path()) or ".:/rom/programs" local PATH = (parentShell and parentShell.path()) or ".:/rom/programs"
local ALIASES = (parentShell and parentShell.aliases()) or {} local ALIASES = (parentShell and parentShell.aliases()) or {}
@ -223,7 +230,6 @@ if #tArgs > 0 then
return s, m return s, m
end end
require = requireInjector(getfenv(1))
local Config = require('config') local Config = require('config')
local History = require('history') local History = require('history')

View File

@ -1,6 +1,8 @@
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local Point = require('point')
local Logger = require('logger') local Logger = require('logger')
local Point = require('point')
local Util = require('util')
if device and device.wireless_modem then if device and device.wireless_modem then
Logger.setWirelessLogging() Logger.setWirelessLogging()

View File

@ -1,10 +1,11 @@
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local Util = require('util')
local Event = require('event')
local UI = require('ui')
local RefinedProvider = require('refinedProvider')
local MEProvider = require('meProvider')
local ChestProvider = require('chestProvider18') local ChestProvider = require('chestProvider18')
local Event = require('event')
local MEProvider = require('meProvider')
local RefinedProvider = require('refinedProvider')
local UI = require('ui')
local Util = require('util')
local storage = RefinedProvider() local storage = RefinedProvider()
if not storage:isValid() then if not storage:isValid() then

View File

@ -1,9 +1,11 @@
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local Event = require('event')
local UI = require('ui')
local ME = require('me')
local Config = require('config') local Config = require('config')
local Event = require('event')
local Logger = require('logger') local Logger = require('logger')
local ME = require('me')
local UI = require('ui')
local Util = require('util')
-- Must be a crafty turtle with duck antenna ! -- Must be a crafty turtle with duck antenna !
-- 3 wide monitor (any side of turtle) -- 3 wide monitor (any side of turtle)

View File

@ -1,10 +1,12 @@
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local Logger = require('logger')
local Message = require('message')
local Event = require('event') local Event = require('event')
local Logger = require('logger')
local MEProvider = require('meProvider')
local Message = require('message')
local Point = require('point') local Point = require('point')
local TableDB = require('tableDB') local TableDB = require('tableDB')
local MEProvider = require('meProvider') local Util = require('util')
--[[ --[[
A supplier turtle for the builder turtle. For larger builds, use A supplier turtle for the builder turtle. For larger builds, use
@ -19,7 +21,7 @@ local MEProvider = require('meProvider')
]]-- ]]--
local ChestProvider = require('chestProvider') local ChestProvider = require('chestProvider')
if os.getVersion() == 1.8 then if Util.getVersion() == 1.8 then
ChestProvider = require('chestProvider18') ChestProvider = require('chestProvider18')
end end

View File

@ -1,7 +1,9 @@
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local Event = require('event') local Event = require('event')
local Socket = require('socket') local Socket = require('socket')
local Terminal = require('terminal') local Terminal = require('terminal')
local Util = require('util')
local remoteId local remoteId
local args = { ... } local args = { ... }
@ -69,7 +71,7 @@ while true do
print() print()
print('Connection lost') print('Connection lost')
print('Press enter to exit') print('Press enter to exit')
read() pcall(read)
break break
end end
end end

View File

@ -1,8 +1,10 @@
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local Socket = require('socket')
local SHA1 = require('sha1')
local Terminal = require('terminal')
local Crypto = require('crypto') local Crypto = require('crypto')
local Security = require('security')
local SHA1 = require('sha1')
local Socket = require('socket')
local Terminal = require('terminal')
local remoteId local remoteId
local args = { ... } local args = { ... }
@ -31,7 +33,7 @@ if not socket then
error('Unable to connect to ' .. remoteId .. ' on port 19') error('Unable to connect to ' .. remoteId .. ' on port 19')
end end
local publicKey = os.getPublicKey() local publicKey = Security.getPublicKey()
local password = SHA1.sha1(password) local password = SHA1.sha1(password)
socket:write(Crypto.encrypt({ pk = publicKey, dh = os.getComputerID() }, password)) socket:write(Crypto.encrypt({ pk = publicKey, dh = os.getComputerID() }, password))

View File

@ -1,7 +1,9 @@
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local Event = require('event') local Event = require('event')
local Socket = require('socket') local Socket = require('socket')
local Terminal = require('terminal') local Terminal = require('terminal')
local Util = require('util')
local remoteId local remoteId
local args = { ... } local args = { ... }

View File

@ -5,7 +5,8 @@ if turtle and device.wireless_modem then
if homePt then if homePt then
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local Config = require('config') local Config = require('config')
local config = { local config = {
destructive = false, destructive = false,

View File

@ -2,7 +2,7 @@ print('\nStarting Opus..')
LUA_PATH = '/sys/apis' LUA_PATH = '/sys/apis'
_G.Util = dofile('sys/apis/util.lua') local Util = dofile('sys/apis/util.lua')
_G.debug = function(...) Util.print(...) end _G.debug = function(...) Util.print(...) end
_G.requireInjector = dofile('sys/apis/injector.lua') _G.requireInjector = dofile('sys/apis/injector.lua')

View File

@ -1,9 +1,10 @@
local function follow(id) local function follow(id)
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local Socket = require('socket')
local Point = require('point')
local Event = require('event') local Event = require('event')
local Point = require('point')
local Socket = require('socket')
turtle.status = 'follow ' .. id turtle.status = 'follow ' .. id

View File

@ -1,5 +1,7 @@
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local Point = require('point') local Point = require('point')
local Util = require('util')
local checkedNodes = { } local checkedNodes = { }
local nodes = { } local nodes = { }

View File

@ -1,5 +1,7 @@
turtle.run(function() turtle.run(function()
require = requireInjector(getfenv(1))
requireInjector(getfenv(1))
local GPS = require('gps') local GPS = require('gps')
local Socket = require('socket') local Socket = require('socket')

View File

@ -1,5 +1,7 @@
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local Point = require('point') local Point = require('point')
local Util = require('util')
local checkedNodes, nodes local checkedNodes, nodes

View File

@ -1,9 +1,10 @@
local function summon(id) local function summon(id)
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local GPS = require('gps') local GPS = require('gps')
local Socket = require('socket')
local Point = require('point') local Point = require('point')
local Socket = require('socket')
turtle.status = 'GPSing' turtle.status = 'GPSing'
turtle.setPoint({ x = 0, y = 0, z = 0, heading = 0 }) turtle.setPoint({ x = 0, y = 0, z = 0, heading = 0 })

View File

@ -1,3 +1,7 @@
requireInjector(getfenv(1))
local Util = require('util')
_G.clipboard = { internal, data } _G.clipboard = { internal, data }
function clipboard.getData() function clipboard.getData()

View File

@ -1,8 +1,9 @@
_G.device = { } requireInjector(getfenv(1))
require = requireInjector(getfenv(1))
local Peripheral = require('peripheral') local Peripheral = require('peripheral')
_G.device = { }
for _,side in pairs(peripheral.getNames()) do for _,side in pairs(peripheral.getNames()) do
Peripheral.addDevice(device, side) Peripheral.addDevice(device, side)
end end

View File

@ -1,172 +0,0 @@
require = requireInjector(getfenv(1))
local Config = require('config')
local SHA1 = require('sha1')
local REGISTRY_DIR = 'usr/.registry'
local config = {
enable = false,
pocketId = 10,
distance = 8,
}
local lockId
function lockScreen()
require = requireInjector(getfenv(1))
local UI = require('ui')
local Event = require('event')
local center = math.floor(UI.term.width / 2)
local page = UI.Page({
backgroundColor = colors.blue,
prompt = UI.Text({
x = center - 9,
y = math.floor(UI.term.height / 2),
value = 'Password',
}),
password = UI.TextEntry({
x = center,
y = math.floor(UI.term.height / 2),
width = 8,
limit = 8
}),
statusBar = UI.StatusBar(),
accelerators = {
q = 'back',
},
})
function page:eventHandler(event)
if event.type == 'key' and event.key == 'enter' then
Config.load('os', config)
if SHA1.sha1(self.password.value) == config.password then
os.locked = false
Event.exitPullEvents()
lockId = false
return true
else
self.statusBar:timedStatus('Invalid Password', 3)
end
end
UI.Page.eventHandler(self, event)
end
UI:setPage(page)
Event.pullEvents()
end
function os.verifyPassword(password)
Config.load('os', config)
return config.password and password == config.password
end
function os.getSecretKey()
Config.load('os', config)
if not config.secretKey then
config.secretKey = math.random(100000, 999999)
Config.update('os', config)
end
return config.secretKey
end
function os.getPublicKey()
local exchange = {
base = 11,
primeMod = 625210769
}
local function modexp(base, exponent, modulo)
local remainder = base
for i = 1, exponent-1 do
remainder = remainder * remainder
if remainder >= modulo then
remainder = remainder % modulo
end
end
return remainder
end
local secretKey = os.getSecretKey()
return modexp(exchange.base, secretKey, exchange.primeMod)
end
function os.updatePassword(password)
Config.load('os', config)
config.password = password
Config.update('os', config)
end
function os.getPassword()
Config.load('os', config)
return config.password
end
os.lock = function()
--os.locked = true
if not lockId then
lockId = multishell.openTab({
title = 'Lock',
env = getfenv(1),
fn = lockScreen,
focused = true,
})
end
end
os.unlock = function()
os.locked = false
if lockId then
multishell.terminate(lockId)
lockId = nil
end
end
function os.isTurtle()
return not not turtle
end
function os.isAdvanced()
return term.native().isColor()
end
function os.isPocket()
return not not pocket
end
function os.getVersion()
local version
if _CC_VERSION then
version = tonumber(_CC_VERSION:gmatch('[%d]+%.?[%d][%d]', '%1')())
end
if not version and _HOST then
version = tonumber(_HOST:gmatch('[%d]+%.?[%d][%d]', '%1')())
end
return version or 1.7
end
-- move completely into overview
-- just post event from appstore
function os.registerApp(app, key)
app.key = SHA1.sha1(key)
Util.writeTable(fs.combine(REGISTRY_DIR, app.key), app)
os.queueEvent('os_register_app')
end
function os.unregisterApp(key)
local filename = fs.combine(REGISTRY_DIR, SHA1.sha1(key))
if fs.exists(filename) then
fs.delete(filename)
os.queueEvent('os_register_app')
end
end

View File

@ -2,7 +2,8 @@ if not turtle then
return return
end end
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local Grid = require ("jumper.grid") local Grid = require ("jumper.grid")
local Pathfinder = require ("jumper.pathfinder") local Pathfinder = require ("jumper.pathfinder")
local Point = require('point') local Point = require('point')

View File

@ -2,6 +2,10 @@ if not turtle then
return return
end end
requireInjector(getfenv(1))
local Util = require('util')
local Scheduler = { local Scheduler = {
uid = 0, uid = 0,
queue = { }, queue = { },

View File

@ -2,7 +2,7 @@ if not turtle then
return return
end end
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local GPS = require('gps') local GPS = require('gps')
function turtle.enableGPS(timeout) function turtle.enableGPS(timeout)

View File

@ -2,6 +2,10 @@ if not turtle then
return return
end end
requireInjector(getfenv(1))
local Util = require('util')
local function noop() end local function noop() end
turtle.point = { x = 0, y = 0, z = 0, heading = 0 } turtle.point = { x = 0, y = 0, z = 0, heading = 0 }

View File

@ -2,7 +2,9 @@ if fs.native then
return return
end end
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local Util = require('util')
fs.native = Util.shallowCopy(fs) fs.native = Util.shallowCopy(fs)
local fstypes = { } local fstypes = { }

View File

@ -1,5 +1,5 @@
local Socket = require('socket')
local Event = require('event') local Event = require('event')
local Socket = require('socket')
local fileUid = 0 local fileUid = 0
local fileHandles = { } local fileHandles = { }

View File

@ -1,6 +1,7 @@
local Socket = require('socket')
local GPS = require('gps')
local Event = require('event') local Event = require('event')
local GPS = require('gps')
local Socket = require('socket')
local Util = require('util')
-- move this into gps api -- move this into gps api
local gpsRequested local gpsRequested

View File

@ -1,10 +1,13 @@
local Socket = require('socket')
local Event = require('event') local Event = require('event')
local Socket = require('socket')
local Util = require('util')
local function telnetHost(socket) local function telnetHost(socket)
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local Event = require('event') local Event = require('event')
local methods = { 'clear', 'clearLine', 'setCursorPos', 'write', 'blit', local methods = { 'clear', 'clearLine', 'setCursorPos', 'write', 'blit',
'setTextColor', 'setTextColour', 'setBackgroundColor', 'setTextColor', 'setTextColour', 'setBackgroundColor',
'setBackgroundColour', 'scroll', 'setCursorBlink', } 'setBackgroundColour', 'scroll', 'setCursorBlink', }

View File

@ -1,6 +1,8 @@
local Socket = require('socket')
local Event = require('event')
local Crypto = require('crypto') local Crypto = require('crypto')
local Event = require('event')
local Security = require('security')
local Socket = require('socket')
local Util = require('util')
Event.addRoutine(function() Event.addRoutine(function()
@ -12,7 +14,7 @@ Event.addRoutine(function()
local data = socket:read(2) local data = socket:read(2)
if data then if data then
local password = os.getPassword() local password = Security.getPassword()
if not password then if not password then
socket:write({ msg = 'No password has been set' }) socket:write({ msg = 'No password has been set' })
else else

View File

@ -1,5 +1,6 @@
local Socket = require('socket')
local Event = require('event') local Event = require('event')
local Socket = require('socket')
local Util = require('util')
local function wrapTerm(socket, termInfo) local function wrapTerm(socket, termInfo)
local methods = { 'blit', 'clear', 'clearLine', 'setCursorPos', 'write', local methods = { 'blit', 'clear', 'clearLine', 'setCursorPos', 'write',

View File

@ -1,6 +1,8 @@
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local Event = require('event') local Event = require('event')
local Peripheral = require('peripheral') local Peripheral = require('peripheral')
local Util = require('util')
multishell.setTitle(multishell.getCurrent(), 'Devices') multishell.setTitle(multishell.getCurrent(), 'Devices')

View File

@ -1,6 +1,6 @@
if device.wireless_modem then if device.wireless_modem then
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local Config = require('config') local Config = require('config')
local config = { local config = {
host = false, host = false,

View File

@ -1,5 +1,7 @@
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local Terminal = require('terminal') local Terminal = require('terminal')
local Util = require('util')
multishell.setTitle(multishell.getCurrent(), 'Debug') multishell.setTitle(multishell.getCurrent(), 'Debug')

View File

@ -1,4 +1,5 @@
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local Util = require('util') local Util = require('util')
multishell.setTitle(multishell.getCurrent(), 'Net Daemon') multishell.setTitle(multishell.getCurrent(), 'Net Daemon')
@ -6,7 +7,7 @@ multishell.setTitle(multishell.getCurrent(), 'Net Daemon')
_G.network = { } _G.network = { }
local function netUp() local function netUp()
require = requireInjector(getfenv(1)) requireInjector(getfenv(1))
local Event = require('event') local Event = require('event')
local files = fs.list('/sys/network') local files = fs.list('/sys/network')