v0.1 Alpha, Lua
This commit is contained in:
commit
81815642a9
11 changed files with 642 additions and 0 deletions
87
src/url.lua
Normal file
87
src/url.lua
Normal file
|
@ -0,0 +1,87 @@
|
|||
ngx.req.read_body()
|
||||
local json = loadfile(string.format("%s/bytecode/jsonlib", ngx.var.document_root))()
|
||||
local arg = ngx.req.get_post_args()
|
||||
local aliasfmt = string.format("%s/aliases/", ngx.var.document_root)
|
||||
local allowwrite = true
|
||||
local function err(reason, status)
|
||||
if status == nil then status = 404 end
|
||||
ngx.status = status
|
||||
ngx.say(reason)
|
||||
allowwrite = false
|
||||
ngx.eof()
|
||||
end
|
||||
|
||||
for a, b in pairs(arg) do
|
||||
if a == "url" then
|
||||
url = b
|
||||
end if a == "alias" then
|
||||
alias = b
|
||||
end if a == "expires" then
|
||||
expires = b
|
||||
end
|
||||
end
|
||||
|
||||
if ngx.var.uri == "/" then
|
||||
ngx.header.content_type = "text/html"; local htm = io.open(string.format("%s/etc/url.htm", ngx.var.document_root)):read("*a")
|
||||
ngx.say(htm); ngx.eof()
|
||||
end
|
||||
|
||||
if ngx.var.uri == "/create" then
|
||||
if alias == "create" or alias == "etc" then ngx.say("This alias is not allowed.") ngx.eof() end
|
||||
if url:find("://") == nil then url = string.format("https://%s", url) end
|
||||
|
||||
if expires == "" then
|
||||
url = json.encode({ url = url, expires = "nil" })
|
||||
else
|
||||
url = json.encode({ url = url, expires = expires })
|
||||
end
|
||||
|
||||
local dateuri = json.decode(url)["expires"]
|
||||
if expires ~= "" then
|
||||
if dateuri:len() < 10 or dateuri:len() > 10 then
|
||||
err("Bad Data fmt.", 400)
|
||||
end
|
||||
if (expires:gsub("-", ""):gsub(":", "")) < os.date("%Y%m%d%T") then
|
||||
err("The Date less than on Server.", 400)
|
||||
end
|
||||
end
|
||||
|
||||
if (url:find("%.")) == nil then
|
||||
err("Got invalid URL.", 400)
|
||||
end
|
||||
alias = alias:gsub("%p", {["/"] = "", ["."] = ""})
|
||||
|
||||
local msg = string.format("Alias for \"%s\" is \"%s\".", json.decode(url)["url"], alias)
|
||||
if dateuri:len() ~= nil then
|
||||
msg = string.format("%s It expires at %s.", msg, dateuri)
|
||||
end
|
||||
|
||||
aliasfmt = string.format("%s%s.json", aliasfmt, alias)
|
||||
|
||||
if io.open(aliasfmt) ~= nil then
|
||||
err("Alias already exists.", 403)
|
||||
end
|
||||
|
||||
if allowwrite ~= false then
|
||||
local file = io.open(aliasfmt, "w")
|
||||
file:write(url)
|
||||
file:close()
|
||||
|
||||
ngx.say(msg)
|
||||
ngx.eof()
|
||||
end
|
||||
else
|
||||
local jfile = ""
|
||||
local opnalias = string.format("%s%s.json", aliasfmt, ngx.var.uri)
|
||||
if io.open(opnalias) == nil then
|
||||
err("The Alias was not found.")
|
||||
else
|
||||
ngx.header["Cache-Control"] = {'no-cache'}
|
||||
jfile = io.open(opnalias, "r"):read("*all")
|
||||
date = (json.decode(jfile)["expires"]:gsub("-", ""))
|
||||
if date < os.date("%Y%m%d%T") then
|
||||
os.remove(opnalias)
|
||||
end
|
||||
ngx.redirect(json.decode(jfile)["url"], 301)
|
||||
end
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue