remove json require from crypto lib
This commit is contained in:
parent
52fe63df39
commit
78b38ee544
@ -1,4 +1,3 @@
|
|||||||
local json = require("json")
|
|
||||||
local crypto = {}
|
local crypto = {}
|
||||||
|
|
||||||
-- ======================================================================
|
-- ======================================================================
|
||||||
|
@ -195,6 +195,106 @@ function Session:regenerate()
|
|||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- ======================================================================
|
||||||
|
-- ROUTER CLASS
|
||||||
|
-- ======================================================================
|
||||||
|
|
||||||
|
local Router = {}
|
||||||
|
Router.__index = Router
|
||||||
|
|
||||||
|
function Router.new()
|
||||||
|
return setmetatable({
|
||||||
|
_middleware = {},
|
||||||
|
_prefix = ""
|
||||||
|
}, Router)
|
||||||
|
end
|
||||||
|
|
||||||
|
function Router:use(...)
|
||||||
|
local args = {...}
|
||||||
|
if #args == 1 and type(args[1]) == "function" then
|
||||||
|
table.insert(self._middleware, args[1])
|
||||||
|
elseif #args == 2 and type(args[1]) == "string" and type(args[2]) == "function" then
|
||||||
|
-- Path-specific middleware for this router
|
||||||
|
table.insert(self._middleware, {path = args[1], handler = args[2]})
|
||||||
|
else
|
||||||
|
error("Invalid arguments to use()")
|
||||||
|
end
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
|
function Router:group(path_prefix, callback)
|
||||||
|
local group_router = Router.new()
|
||||||
|
group_router._prefix = self._prefix .. path_prefix
|
||||||
|
|
||||||
|
-- Inherit parent middleware
|
||||||
|
for _, mw in ipairs(self._middleware) do
|
||||||
|
table.insert(group_router._middleware, mw)
|
||||||
|
end
|
||||||
|
|
||||||
|
if callback then
|
||||||
|
callback(group_router)
|
||||||
|
end
|
||||||
|
return group_router
|
||||||
|
end
|
||||||
|
|
||||||
|
function Router:_add_route(method, path, handler)
|
||||||
|
if not string.starts_with(path, "/") then
|
||||||
|
path = "/" .. path
|
||||||
|
end
|
||||||
|
|
||||||
|
local full_path = self._prefix .. path
|
||||||
|
local segments = split_path(full_path)
|
||||||
|
|
||||||
|
-- Create middleware chain for this specific route
|
||||||
|
local route_middleware = {}
|
||||||
|
|
||||||
|
-- Add global middleware first
|
||||||
|
for _, mw in ipairs(_G._http_middleware) do
|
||||||
|
if mw.path == nil or string.starts_with(full_path, mw.path) then
|
||||||
|
table.insert(route_middleware, mw.handler)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Add router middleware
|
||||||
|
for _, mw in ipairs(self._middleware) do
|
||||||
|
if type(mw) == "function" then
|
||||||
|
table.insert(route_middleware, mw)
|
||||||
|
elseif type(mw) == "table" and mw.path then
|
||||||
|
-- Check if path-specific middleware applies
|
||||||
|
if string.starts_with(full_path, mw.path) then
|
||||||
|
table.insert(route_middleware, mw.handler)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
table.insert(_G._http_routes, {
|
||||||
|
method = method,
|
||||||
|
path = full_path,
|
||||||
|
segments = segments,
|
||||||
|
handler = handler,
|
||||||
|
middleware = route_middleware -- Store middleware per route
|
||||||
|
})
|
||||||
|
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
|
-- HTTP method helpers for Router
|
||||||
|
function Router:get(path, handler) return self:_add_route("GET", path, handler) end
|
||||||
|
function Router:post(path, handler) return self:_add_route("POST", path, handler) end
|
||||||
|
function Router:put(path, handler) return self:_add_route("PUT", path, handler) end
|
||||||
|
function Router:delete(path, handler) return self:_add_route("DELETE", path, handler) end
|
||||||
|
function Router:patch(path, handler) return self:_add_route("PATCH", path, handler) end
|
||||||
|
function Router:head(path, handler) return self:_add_route("HEAD", path, handler) end
|
||||||
|
function Router:options(path, handler) return self:_add_route("OPTIONS", path, handler) end
|
||||||
|
|
||||||
|
function Router:all(path, handler)
|
||||||
|
local methods = {"GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS"}
|
||||||
|
for _, method in ipairs(methods) do
|
||||||
|
self:_add_route(method, path, handler)
|
||||||
|
end
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
-- ======================================================================
|
-- ======================================================================
|
||||||
-- REQUEST CLASS
|
-- REQUEST CLASS
|
||||||
-- ======================================================================
|
-- ======================================================================
|
||||||
@ -491,32 +591,44 @@ local function match_route(method, path)
|
|||||||
return nil, {}
|
return nil, {}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- ======================================================================
|
||||||
|
-- OPTIMIZED REQUEST HANDLING
|
||||||
|
-- ======================================================================
|
||||||
|
|
||||||
function _http_handle_request(req_table, res_table)
|
function _http_handle_request(req_table, res_table)
|
||||||
local res = Response.new(res_table)
|
local res = Response.new(res_table)
|
||||||
local req = Request.new(req_table, res)
|
local req = Request.new(req_table, res)
|
||||||
|
|
||||||
|
-- Fast route lookup
|
||||||
|
local route, params = match_route(req.method, req.path)
|
||||||
|
req.params = params
|
||||||
|
|
||||||
|
if not route then
|
||||||
|
res:send(404)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Fast path: no middleware
|
||||||
|
if not route.middleware or #route.middleware == 0 then
|
||||||
|
route.handler(req, res)
|
||||||
|
|
||||||
|
-- Auto-save dirty sessions
|
||||||
|
if req.session._loaded and req.session._dirty then
|
||||||
|
req.session:save()
|
||||||
|
end
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Run route-specific middleware chain
|
||||||
local function run_middleware(index)
|
local function run_middleware(index)
|
||||||
if index > #_G._http_middleware then
|
if index > #route.middleware then
|
||||||
local route, params = match_route(req.method, req.path)
|
|
||||||
req.params = params
|
|
||||||
|
|
||||||
if not route then
|
|
||||||
res:send(404)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
route.handler(req, res)
|
route.handler(req, res)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local mw = _G._http_middleware[index]
|
route.middleware[index](req, res, function()
|
||||||
if mw.path == nil or string.starts_with(req.path, mw.path) then
|
|
||||||
mw.handler(req, res, function()
|
|
||||||
run_middleware(index + 1)
|
|
||||||
end)
|
|
||||||
else
|
|
||||||
run_middleware(index + 1)
|
run_middleware(index + 1)
|
||||||
end
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
run_middleware(1)
|
run_middleware(1)
|
||||||
@ -585,7 +697,18 @@ function Server:configure_sessions(options)
|
|||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function Server:group(path_prefix, callback)
|
||||||
|
local router = Router.new()
|
||||||
|
router._prefix = path_prefix
|
||||||
|
|
||||||
|
if callback then
|
||||||
|
callback(router)
|
||||||
|
end
|
||||||
|
return router
|
||||||
|
end
|
||||||
|
|
||||||
function Server:use(...)
|
function Server:use(...)
|
||||||
|
-- Global middleware - stored per route during registration
|
||||||
local args = {...}
|
local args = {...}
|
||||||
if #args == 1 and type(args[1]) == "function" then
|
if #args == 1 and type(args[1]) == "function" then
|
||||||
table.insert(_G._http_middleware, {path = nil, handler = args[1]})
|
table.insert(_G._http_middleware, {path = nil, handler = args[1]})
|
||||||
@ -594,7 +717,6 @@ function Server:use(...)
|
|||||||
else
|
else
|
||||||
error("Invalid arguments to use()")
|
error("Invalid arguments to use()")
|
||||||
end
|
end
|
||||||
|
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -605,11 +727,20 @@ function Server:_add_route(method, path, handler)
|
|||||||
|
|
||||||
local segments = split_path(path)
|
local segments = split_path(path)
|
||||||
|
|
||||||
|
-- Apply global middleware to this route
|
||||||
|
local route_middleware = {}
|
||||||
|
for _, mw in ipairs(_G._http_middleware) do
|
||||||
|
if mw.path == nil or string.starts_with(path, mw.path) then
|
||||||
|
table.insert(route_middleware, mw.handler)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
table.insert(_G._http_routes, {
|
table.insert(_G._http_routes, {
|
||||||
method = method,
|
method = method,
|
||||||
path = path,
|
path = path,
|
||||||
segments = segments,
|
segments = segments,
|
||||||
handler = handler
|
handler = handler,
|
||||||
|
middleware = route_middleware
|
||||||
})
|
})
|
||||||
|
|
||||||
return self
|
return self
|
||||||
@ -671,6 +802,10 @@ end
|
|||||||
-- MIDDLEWARE HELPERS
|
-- MIDDLEWARE HELPERS
|
||||||
-- ======================================================================
|
-- ======================================================================
|
||||||
|
|
||||||
|
function http.router()
|
||||||
|
return Router.new()
|
||||||
|
end
|
||||||
|
|
||||||
function http.cors(options)
|
function http.cors(options)
|
||||||
options = options or {}
|
options = options or {}
|
||||||
local origin = options.origin or "*"
|
local origin = options.origin or "*"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user