Astra.http.middleware = {}
local function middleware_template(next_handler)
return function(request, response, ctx)
if "something wrong" then
return "Waaait a minute."
end
local result = next_handler(request, response, ctx)
if "you came up with a use case" then
local things = "Do some on-Leave logic"
end
return result
end
end
function Astra.http.middleware.chain(chain)
return function(handler)
assert(type(handler) == "function",
"Handler must be a function, got " .. type(handler))
assert(#chain >= 2, "Chain must have at least 2 middlewares")
for i = #chain, 1, -1 do
local middleware = chain[i]
assert(type(middleware) == "function",
"Middleware must be a function, got " .. type(middleware))
handler = middleware(handler)
end
return handler
end
end
function Astra.http.middleware.context(next_handler)
return function(request, response)
local ctx = {}
return next_handler(request, response, ctx)
end
end
function Astra.http.middleware.console_logger(next_handler)
return function(request, response, ctx)
print("Request:", request:method(), request:uri())
return next_handler(request, response, ctx)
end
end
function Astra.http.middleware.file_logger(file_handler, flush_interval)
local flush_interval = flush_interval or 1
local flush_countdown = flush_interval
return function(next_handler)
return function(request, response, ctx)
local str = string.format("[New Request %s] %s %s\n", os.date(), request:method(), request:uri())
file_handler:write(str)
flush_countdown = flush_countdown - 1
if flush_countdown == 0 then
file_handler:flush()
flush_countdown = flush_interval
end
return next_handler(request, response, ctx)
end
end
end
function Astra.http.middleware.html(next_handler)
return function(request, response, ctx)
result = next_handler(request, response, ctx)
response:set_header("Content-Type", "text/html")
return result
end
end