Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local pkg={["servers"]={["googol.com"]={["asdf"]={},["logo"]="bbbbbb e \
- b e \
- b e \
- b bbb eeeee 44444 bbbbb 55555 e \
- b b e e 4 4 b b 5 5 e \
- b b e e 4 4 b b 5 5 e \
- bbbbbb eeeee 44444 bbbbb 55555 eee \
- b \
- bbbbb",["test"]={["asdf"]="print(\"hi\")",},["home"]="local w, h = term.getSize()\
- local img = loadImageFromServer(\"logo\")\
- \
- term.setBackgroundColor(colors.white)\
- term.clear()\
- paintutils.drawImage(img, w/2-35/2, 3)",},["freewebhost.com"]={["servapi"]="function urlenc(s)\
- return s:gsub(\"([\\\"\\'%s%$;&%?])\", function(c) return \"$\"..string.byte(c)..\";\" end)\
- end\
- ",["api"]={["create"]="!SERVER\
- os.queueEvent(\"update_ids\")\
- if not _GET.name then\
- return \"redirect('freewebhost.com/error?t=Name$32;required')\"\
- elseif _GET.name:find(\"%.%.\") or _GET.name:find(\"[/%s]\") then\
- return \"redirect('freewebhost.com/error?t=Name$32;contains$32;invalid$32;characters!')\"\
- elseif fs.exists(\"/servers/\".._GET.name) then\
- return \"redirect('freewebhost.com/error?t=Server$32;already$32;exists!')\"\
- elseif not _GET.pass then\
- return \"redirect('freewebhost.com/error?t=Password$32;required')\"\
- else\
- fs.makeDir(\"/servers/\".._GET.name)\
- local f = io.open(\"/pass/\".._GET.name, \"w\")\
- if f then\
- f:write(_GET.pass)\
- f:close()\
- else\
- return \"redirect('freewebhost.com/error?t=Server$32;Error')\"\
- end\
- return \"redirect('freewebhost.com/\"..(_GET.from or \"\")..\"')\"\
- end",},["help"]="term.setBackgroundColor(colors.white)\
- term.setTextColor(colors.black)\
- term.clear()\
- term.setCursorPos(1, 3)\
- cPrint(\"freewebhost Site Kit Documentation\")\
- print(\"\")\
- cPrint(\"Run the file downloaded to extract the files\")\
- cPrint(\"It contains 2 programs:\")\
- print(\"\")\
- cPrint(\"fwh/sync folder sitename\")\
- cPrint(\"Replaces all files on [sitename] with those\")\
- cPrint(\"in [folder]\")\
- print(\"\")\
- cPrint(\"fwh/download sitename folder\")\
- cPrint(\"Downloads all the files on [sitename] to [folder]\")",["create"]="term.setBackgroundColor(colors.white)\
- term.setTextColor(colors.black)\
- term.clear()\
- term.setCursorPos(1, 3)\
- cPrint(\"Create a new server\")\
- term.setCursorPos(3, 6)\
- print(\"Site Name:\")\
- term.setCursorPos(3, 8)\
- print(\"Password:\")\
- term.setCursorPos(14, 6)\
- local name = read()\
- term.setCursorPos(13, 8)\
- local pass = read(\"*\")\
- \
- function urlenc(str)\
- return str:gsub(\"([&%?%s;%$\\\"\\'])\", function(c) return \"$\"..string.byte(c)..\";\" end)\
- end\
- \
- redirect(\"freewebhost.com/api/create?name=\"..urlenc(name)..\"&pass=\"..urlenc(pass)..\"&from=\"..urlenc(\"created?sitename=\"..urlenc(name)))",["error"]="!SERVER\
- return [[term.setTextColor(colors.red) print('') cPrint('Error:') cPrint(']].._GET.t:gsub(\"([\\\"\\'])\", \"\\\\%1\")..[[')]]",["download"]="term.setBackgroundColor(colors.white)\
- term.setTextColor(colors.black)\
- term.clear()\
- term.setCursorPos(1, 3)\
- cPrint(\"Downloading...\")\
- pastebinDownload(\"hxRGshGH\")\
- cPrint(\"Downloading Complete\")\
- sleep(1)\
- redirect(\"freewebhost.com/help\")\
- ",["created"]="!SERVER\
- return [[\
- term.setBackgroundColor(colors.white)\
- term.setTextColor(colors.black)\
- term.clear()\
- term.setCursorPos(1, 3)\
- cPrint(\"Your webiste (]].._GET.sitename..[[) has been created\")\
- cPrint(\"Click anywhere to continue\")\
- os.pullEvent(\"mouse_click\")\
- redirect(\"freewebhost.com\")\
- ]]",["home"]="term.setBackgroundColor(colors.white)\
- term.clear()\
- term.setCursorPos(1, 3)\
- \
- local w, h = term.getSize()\
- \
- term.setTextColor(colors.red)\
- cPrint(\"Free Firewolf Site Hosting\")\
- cPrint(\"By Googol\")\
- local result = prompt({\
- {\"Create Server\", (w/2 - 13/2)-2, 7},\
- {\"Download Site Kit\", (w/2 - 17/2)-2, 9},\
- }, \"vertical\")\
- \
- if result == \"Create Server\" then\
- redirect(\"freewebhost.com/create\")\
- elseif result == \"Download Site Kit\" then\
- redirect(\"freewebhost.com/download\")\
- else\
- print(\"YOU BROKE FIREWOLF!11!!ELEVEN!!1ONE!!!\")\
- end",["test"]="!SERVER\
- return \"cPrint('\"..(_GET.text or \"???\")..\"')\"",},},["pass"]={["googol.com"]="googol",},["startup"]="local modem\
- for i,v in pairs(rs.getSides()) do \
- if peripheral.getType(v) == \"modem\" then\
- modem = peripheral.wrap(v)\
- end\
- end\
- --modem.open(os.computerID())\
- modem.open(rednet.CHANNEL_BROADCAST)\
- \
- local serverIDs = {}\
- \
- function sendAs(id, nRecipient, sMessage )\
- id = (tonumber(id) or os.computerID())\
- modem.transmit( nRecipient, id, sMessage )\
- end\
- \
- function send(nRecipient, sMessage)\
- modem.transmit(nRecipient, os.computerID(), sMessage)\
- end\
- \
- local serverdir = \"/servers/\"\
- local notfounddata = [[print(\"\") cPrint(\"404\") cPrint(\"Page Not Found\")]]\
- \
- local ss_whitelist = {\
- [\"googol.com\"] = true,\
- [\"freewebhost.com\"] = true,\
- }\
- \
- local function updateIDs()\
- serverIDs = {}\
- local id = 62000\
- local c = 0\
- modem.open(id)\
- print(\"opened \"..id)\
- for i,v in pairs(fs.list(serverdir)) do\
- serverIDs[v] = id\
- c = c + 1\
- if c == 3 then \
- c = 0 \
- id = id + 1 \
- modem.open(id)\
- print(\"opened \"..id)\
- end\
- end\
- end\
- updateIDs()\
- \
- local function firewolf_server()\
- while true do\
- local event = {os.pullEvent()}\
- if event[1] == \"rednet_message\" then\
- --print(event[3])\
- if event[3] == \"firewolf.broadcast.dns.list\" then\
- for i,v in pairs(fs.list(serverdir)) do\
- --if fs.isDir(serverdir..v) then\
- sendAs(serverIDs[v], event[2], \"firewolf-site:\"..v)\
- --end\
- end\
- else\
- local url = event[3]\
- _GET = {}\
- local site, path\
- if url:find(\"%?\") then\
- local getdata\
- url, getdata = url:match(\"(.-)(%?.+)\")\
- for key, val in getdata:gmatch(\"[%?&](.-)=([^&]+)\") do\
- _GET[key] = val:gsub(\"$(%d-);\", function(n) return string.char(tonumber(n)) end)\
- --print(key..\"=\"..val)\
- end\
- end\
- if url:find(\"/\") then\
- site, path = url:match(\"(.-)(/.*)\")\
- if path == \"/\" then path = \"/home\" end\
- else\
- site, path = url, \"/home\"\
- end\
- if fs.exists(serverdir..site) then\
- if fs.exists(serverdir..site..path) then\
- local f = io.open(serverdir..site..path, \"r\")\
- local data = f:read(\"*a\")\
- f:close()\
- \
- if data:find(\"^!SERVER\") and ss_whitelist[site] then\
- local func, err = loadstring(data:sub(8))\
- local env = {_GET=_GET}\
- for i,v in pairs(_G) do\
- if i~=\"os.pullEventRaw\" then\
- env[i] = v\
- end\
- end\
- setfenv(func, env)\
- if func then\
- local ok, d = pcall(func)\
- if not ok then print(\"ERROR: \"..d) end\
- data = (ok and d) or \"cPrint('Server Error') cPrint('\"..d:gsub(\"([\\\"\\'])\", \"\\\\%1\")..\"')\"\
- else\
- data = \"cPrint('Server Error') cPrint('\"..err:gsub(\"([\\\"\\'])\", \"\\\\%1\")..\"')\"\
- end\
- end\
- sendAs(serverIDs[site], event[2], data)\
- else\
- sendAs(serverIDs[site], event[2], notfounddata)\
- end\
- end\
- end\
- elseif event[1] == \"update_ids\" then\
- updateIDs()\
- end\
- end\
- end\
- \
- local function urldec(str)\
- return str:gsub(\"%$([^;]+);\", function(n) return tonumber(n) and string.char(tonumber(n)) end)\
- end\
- \
- local function file_server()\
- while true do\
- local event = {os.pullEvent()}\
- if event[1] == \"rednet_message\" then\
- if event[3]:find(\"^fwh:\") then\
- local msg = event[3]:match(\"fwh:(.+)\")\
- local arg = {}\
- for match in msg:gmatch(\"[^&]+\") do\
- local key, val = match:match(\"([^=]+)=(.+)\")\
- if key and val then\
- --print(key..\"=\"..val)\
- if key == \"name\" or key == \"dir\" then\
- val = urldec(val):match(\"^/?(.+)$\")\
- end\
- arg[urldec(key)] = urldec(val)\
- --print(urldec(key)..\"=\"..urldec(val))\
- end\
- end\
- \
- if (arg.name and arg.name:find(\"%.%.\")) or (arg.dir and arg.dir:find(\"%.%.\")) then\
- send(event[2], \"0Paths can not contain '..'\")\
- \
- elseif arg.cmd == \"upload\" then\
- if not (arg.site and arg.pass and arg.contents and arg.name) then\
- send(event[2], \"0Site name, password, file name, and file contents required\")\
- else\
- local f = io.open(\"/pass/\"..arg.site, \"r\")\
- if f then\
- local ok = f:read(\"*a\") == arg.pass\
- f:close()\
- \
- \
- if not ok then\
- send(event[2], \"0Invalid password\")\
- else\
- --print(\"/servers/\"..arg.site..\"/\"..arg.name)\
- local f = io.open(serverdir..arg.site..\"/\"..arg.name, \"w\")\
- if f then\
- --print(arg.contents)\
- f:write(arg.contents)\
- f:close()\
- send(event[2], \"1Success\")\
- else\
- send(event[2], \"0Filesystem Error\")\
- end\
- end\
- else\
- send(event[2], \"0Invalid Site\")\
- end\
- end\
- elseif arg.cmd == \"delete\" then\
- if not (arg.site and arg.pass and arg.name) then\
- send(event[2], \"0Site name, password, and file name required\")\
- else\
- local f = io.open(\"/pass/\"..arg.site, \"r\")\
- if f then\
- local ok = f:read(\"*a\") == arg.pass\
- f:close()\
- if ok then\
- fs.delete(serverdir..arg.site..\"/\"..arg.name)\
- send(event[2], \"1Success\")\
- else\
- send(event[2], \"0Invalid password\")\
- end\
- else\
- send(event[2], \"0Invalid site\")\
- end\
- end\
- elseif arg.cmd == \"get\" then\
- if not (arg.site and arg.pass and arg.name) then\
- send(event[2], \"0Site name, password, and file name required\")\
- else\
- local f = io.open(\"/pass/\"..arg.site, \"r\")\
- if f then\
- local ok = f:read(\"*a\") == arg.pass\
- f:close()\
- if ok then\
- local f = io.open(serverdir..arg.site..\"/\"..arg.name, \"r\")\
- if f then\
- send(event[2], \"1\"..f:read(\"*a\"))\
- f:close()\
- else\
- send(event[2], \"0File does not exist\")\
- end\
- else\
- send(event[2], \"0Invalid password\")\
- end\
- else\
- send(event[2], \"0Invalid site\")\
- end\
- end\
- elseif arg.cmd == \"list\" then\
- arg.dir = arg.dir or \"\"\
- if not (arg.site and arg.pass) then\
- send(event[2], \"0Site name and password required\")\
- else\
- local f = io.open(\"/pass/\"..arg.site, \"r\")\
- if f then\
- local ok = f:read(\"*a\") == arg.pass\
- f:close()\
- if ok then\
- if fs.exists(serverdir..arg.site..\"/\"..arg.dir) and fs.isDir(serverdir..arg.site..\"/\"..arg.dir) then\
- send(event[2], \"1\"..textutils.serialize(fs.list(serverdir..arg.site..\"/\"..arg.dir)))\
- else\
- send(event[2], \"0Invalid directory\")\
- end\
- else\
- send(event[2], \"0Invalid password\")\
- end\
- else\
- send(event[2], \"0Invalid site\")\
- end\
- end\
- elseif arg.cmd == \"mkdir\" then\
- if not (arg.site and arg.pass and arg.name) then\
- send(event[2], \"0Site name, password, and directory name required\")\
- else\
- local f = io.open(\"/pass/\"..arg.site, \"r\")\
- if f then\
- local ok = f:read(\"*a\") == arg.pass\
- f:close()\
- if ok then\
- if not fs.exists(serverdir..arg.site..\"/\"..arg.name) then\
- fs.makeDir(serverdir..arg.site..\"/\"..arg.name)\
- send(event[2], \"1Success\")\
- else\
- send(event[2], \"0File exists\")\
- end\
- else\
- send(event[2], \"0Invalid password\")\
- end\
- else\
- send(event[2], \"0Invalid site\")\
- end\
- end\
- elseif arg.cmd == \"verify\" then\
- local f = io.open(\"/pass/\"..arg.site, \"r\")\
- if f then\
- local ok = f:read(\"*a\") == arg.pass\
- f:close()\
- if ok then\
- send(event[2], \"1Valid\")\
- else\
- send(event[2], \"0Invalid password\")\
- end\
- else\
- send(event[2], \"0Invalid site\")\
- end\
- elseif arg.cmd == \"isdir\" then\
- if not (arg.site and arg.name and arg.pass) then\
- send(event[2], \"0Site name, password, and name required\")\
- else\
- local f = io.open(\"/pass/\"..arg.site, \"r\")\
- if f then\
- local ok = f:read(\"*a\") == arg.pass\
- f:close()\
- if ok then\
- send(event[2], \"1\"..tostring(fs.isDir(serverdir..arg.site..\"/\"..arg.name)))\
- else\
- send(event[2], \"0Invalid password\")\
- end\
- else\
- send(event[2], \"0Invalid site\")\
- end\
- end\
- end\
- end\
- end\
- end\
- end\
- \
- function sh()\
- shell.run(\"rom/programs/shell\")\
- end\
- \
- function rednet_modrun()\
- while true do\
- local sEvent, sSide, sChannel, sReplyChannel, sMessage, nDistance = os.pullEventRaw( \"modem_message\" )\
- os.queueEvent( \"rednet_message\", sReplyChannel, sMessage, nDistance )\
- end\
- end\
- \
- parallel.waitForAny(sh, firewolf_server, file_server, rednet_modrun)\
- modem.close(rednet.CHANNEL_BROADCAST)\
- --modem.close(os.computerID())\
- for i,v in pairs(serverIDs) do\
- modem.close(v)\
- end",["PkgMake"]="sPackage=[[local pkg=%@1\
- local function makeFile(_path,_content)\
- local file=fs.open(_path,\"w\")\
- file.write(_content)\
- file.close()\
- end\
- local function makeFolder(_path,_content)\
- fs.makeDir(_path)\
- for k,v in pairs(_content) do\
- if type(v)==\"table\" then\
- makeFolder(_path..\"/\"..k,v)\
- else\
- makeFile(_path..\"/\"..k,v)\
- end\
- end\
- end\
- local sDest=shell.resolve(\"%@2\") or \"/\"\
- if sDest==\"root\" then\
- sDest=\"/\"\
- end\
- local tPackage=pkg\
- makeFolder(sDest,tPackage)\
- print(\"Package Extracted to '\"..sDest..\"'!\")\
- ]]\
- \
- function addFile(_package,_path)\
- if fs.getName(_path)==\".DS_Store\" then\
- return _package\
- end\
- local file,err=fs.open(_path,\"r\")\
- local content=file.readAll()\
- content=content:gsub(\"%%\",\"%%%%\")\
- _package[fs.getName(_path)]=content\
- file.close()\
- print(\"Added file '\".._path..\"'\")\
- return _package\
- end\
- \
- function addFolder(_package,_path)\
- if string.sub(_path,1,string.len(\"rom\"))==\"rom\" or string.sub(_path,1,string.len(\"/rom\"))==\"/rom\" then\
- print(\"Ignored 'rom' folder. (\".._path..\")\")\
- return\
- end\
- _package=_package or {}\
- for _,f in ipairs(fs.list(_path)) do\
- local path=_path..\"/\"..f\
- if fs.isDir(path) then\
- _package[fs.getName(f)]=addFolder(_package[fs.getName(f)],path)\
- else\
- _package=addFile(_package,path)\
- end\
- end\
- return _package\
- end\
- \
- local tArgs={...}\
- if #tArgs<2 then\
- print(\"Usage: PkgMake <source> <destination>\")\
- return\
- end\
- \
- local sSource=shell.resolve(tArgs[1])\
- local sDest=shell.resolve(tArgs[2])\
- \
- if fs.isDir(sDest) then\
- error(\"Destination must not be a folder.\")\
- end\
- \
- if sSource==sDest then\
- error(\"Source can not be equal to destination.\")\
- end\
- \
- if fs.exists(sSource) and fs.isDir(sSource) then\
- tPackage={}\
- tPackage=addFolder(tPackage,sSource)\
- fPackage=fs.open(sDest,\"w\")\
- \
- sPackage=string.gsub(sPackage,\"%%@2\",fs.getName(sSource))\
- sPackage=string.gsub(sPackage,\"%%@1\",textutils.serialize(tPackage))\
- fPackage.write(sPackage)\
- fPackage.close()\
- print(\"Package Done! ('\"..sDest..\"')\")\
- print(\"Type '\"..sDest..\"' to run it.\")\
- else\
- error(\"Source does not exist or is not a folder.\")\
- end",}
- local function makeFile(_path,_content)
- local file=fs.open(_path,"w")
- file.write(_content)
- file.close()
- end
- local function makeFolder(_path,_content)
- fs.makeDir(_path)
- for k,v in pairs(_content) do
- if type(v)=="table" then
- makeFolder(_path.."/"..k,v)
- else
- makeFile(_path.."/"..k,v)
- end
- end
- end
- local sDest=shell.resolve("root") or "/"
- if sDest=="root" then
- sDest="/"
- end
- local tPackage=pkg
- makeFolder(sDest,tPackage)
- print("Package Extracted to '"..sDest.."'!")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement