87 lines
2.6 KiB
Lua
87 lines
2.6 KiB
Lua
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 |