1
0
mirror of https://github.com/SquidDev-CC/CC-Tweaked synced 2024-12-12 11:10:29 +00:00

Allow running pastebin with the URL

For instance, `pastebin run https://pastebin.com/LYAxmSby` will now
extract the code and download appropriately. Also add an error message
when we received something which is not a valid pastebin code.

See #134.
This commit is contained in:
SquidDev 2019-03-10 11:11:49 +00:00
parent 35ce0974cd
commit 47721bf76b
2 changed files with 30 additions and 5 deletions

View File

@ -18,7 +18,32 @@ if not http then
return return
end end
local function get(paste) --- Attempts to guess the pastebin ID from the given code or URL
local function extractId(paste)
local patterns = {
"^([%a%d]+)$",
"^https?://pastebin.com/([%a%d]+)$",
"^pastebin.com/([%a%d]+)$",
"^https?://pastebin.com/raw/([%a%d]+)$",
"^pastebin.com/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 pastebin code.\n" )
io.write( "The code is the ID at the end of the pastebin.com URL.\n" )
return
end
write( "Connecting to pastebin.com... " ) write( "Connecting to pastebin.com... " )
-- Add a cache buster so that spam protection is re-checked -- Add a cache buster so that spam protection is re-checked
local cacheBuster = ("%x"):format(math.random(0, 2^30)) local cacheBuster = ("%x"):format(math.random(0, 2^30))

View File

@ -1,17 +1,17 @@
describe("The http library", function() describe("The http library", function()
describe("http.checkURL", function() describe("http.checkURL", function()
it("Accepts well formed domains", function() it("accepts well formed domains", function()
expect({ http.checkURL("https://google.com")}):same({ true }) expect({ http.checkURL("https://google.com")}):same({ true })
end) end)
it("Rejects malformed URLs", function() it("rejects malformed URLs", function()
expect({ http.checkURL("google.com")}):same({ false, "Must specify http or https" }) expect({ http.checkURL("google.com")}):same({ false, "Must specify http or https" })
expect({ http.checkURL("https:google.com")}):same({ false, "URL malformed" }) expect({ http.checkURL("https:google.com")}):same({ false, "URL malformed" })
expect({ http.checkURL("https:/google.com")}):same({ false, "URL malformed" }) expect({ http.checkURL("https:/google.com")}):same({ false, "URL malformed" })
expect({ http.checkURL("wss://google.com")}):same({ false, "Invalid protocol 'wss'" }) expect({ http.checkURL("wss://google.com")}):same({ false, "Invalid protocol 'wss'" })
end) end)
it("Rejects local domains", function() it("rejects local domains", function()
expect({ http.checkURL("http://localhost")}):same({ false, "Domain not permitted" }) expect({ http.checkURL("http://localhost")}):same({ false, "Domain not permitted" })
expect({ http.checkURL("http://127.0.0.1")}):same({ false, "Domain not permitted" }) expect({ http.checkURL("http://127.0.0.1")}):same({ false, "Domain not permitted" })
end) end)