mirror of
https://github.com/kepler155c/opus
synced 2025-04-11 01:56:38 +00:00
Added devbin.lua
I added devbin to be able to easily download stuff from devbin.
This commit is contained in:
parent
2520f53046
commit
8819a30912
109
sys/apps/devbin.lua
Normal file
109
sys/apps/devbin.lua
Normal file
@ -0,0 +1,109 @@
|
||||
local function printUsage()
|
||||
print("Usages:")
|
||||
print("devbin get <code> <filename>")
|
||||
print("devbin run <code> <arguments>")
|
||||
end
|
||||
|
||||
local tArgs = { ... }
|
||||
if #tArgs < 2 then
|
||||
printUsage()
|
||||
return
|
||||
end
|
||||
|
||||
if not http then
|
||||
printError("Devbin requires the http API")
|
||||
printError("Set http.enabled to true in CC: Tweaked's config")
|
||||
return
|
||||
end
|
||||
|
||||
--- Attempts to guess the pastebin ID from the given code or URL
|
||||
local function extractId(paste)
|
||||
local patterns = {
|
||||
"^([%a%d]+)$",
|
||||
"^https?://devbin.dev/([%a%d]+)$",
|
||||
"^devbin.dev/([%a%d]+)$",
|
||||
"^https?://devbin.dev/raw/([%a%d]+)$",
|
||||
"^devbin.dev/raw/([%a%d]+)$",
|
||||
}
|
||||
|
||||
for i = 1, #patterns do
|
||||
local code = paste:match(patterns[i])
|
||||
if code then return code end
|
||||
end
|
||||
|
||||
return nil
|
||||
end
|
||||
|
||||
local function get(url)
|
||||
local paste = extractId(url)
|
||||
if not paste then
|
||||
io.stderr:write("Invalid devbin code.\n")
|
||||
io.write("The code is the ID at the end of the pastebin.com URL.\n")
|
||||
return
|
||||
end
|
||||
|
||||
write("Connecting to devbin.dev... ")
|
||||
-- Add a cache buster so that spam protection is re-checked
|
||||
local cacheBuster = ("%x"):format(math.random(0, 2 ^ 30))
|
||||
local response, err = http.get(
|
||||
"https://devbin.dev/raw/" .. textutils.urlEncode(paste) .. "?cb=" .. cacheBuster
|
||||
)
|
||||
|
||||
if response then
|
||||
local headers = response.getResponseHeaders()
|
||||
print("Success.")
|
||||
|
||||
local sResponse = response.readAll()
|
||||
response.close()
|
||||
return sResponse
|
||||
else
|
||||
io.stderr:write("Failed.\n")
|
||||
print(err)
|
||||
end
|
||||
end
|
||||
|
||||
local sCommand = tArgs[1]
|
||||
if sCommand == "get" then
|
||||
-- Download a file from pastebin.com
|
||||
if #tArgs < 3 then
|
||||
printUsage()
|
||||
return
|
||||
end
|
||||
|
||||
-- Determine file to download
|
||||
local sCode = tArgs[2]
|
||||
local sFile = tArgs[3]
|
||||
local sPath = shell.resolve(sFile)
|
||||
if fs.exists(sPath) then
|
||||
print("File already exists")
|
||||
return
|
||||
end
|
||||
|
||||
-- GET the contents from pastebin
|
||||
local res = get(sCode)
|
||||
if res then
|
||||
local file = fs.open(sPath, "w")
|
||||
file.write(res)
|
||||
file.close()
|
||||
|
||||
print("Downloaded as " .. sFile)
|
||||
end
|
||||
elseif sCommand == "run" then
|
||||
local sCode = tArgs[2]
|
||||
|
||||
local res = get(sCode)
|
||||
if res then
|
||||
local func, err = load(res, sCode, "t", _ENV)
|
||||
if not func then
|
||||
printError(err)
|
||||
return
|
||||
end
|
||||
local success, msg = pcall(func, select(3, ...))
|
||||
if not success then
|
||||
printError(msg)
|
||||
end
|
||||
end
|
||||
else
|
||||
printUsage()
|
||||
return
|
||||
end
|
Loading…
x
Reference in New Issue
Block a user