增加sql的waf功能
This commit is contained in:
159
resty/core/time.lua
Normal file
159
resty/core/time.lua
Normal file
@@ -0,0 +1,159 @@
|
||||
-- Copyright (C) Yichun Zhang (agentzh)
|
||||
|
||||
|
||||
local ffi = require 'ffi'
|
||||
local base = require "resty.core.base"
|
||||
|
||||
|
||||
local error = error
|
||||
local tonumber = tonumber
|
||||
local type = type
|
||||
local C = ffi.C
|
||||
local ffi_new = ffi.new
|
||||
local ffi_str = ffi.string
|
||||
local time_val = ffi_new("long[1]")
|
||||
local get_string_buf = base.get_string_buf
|
||||
local ngx = ngx
|
||||
local FFI_ERROR = base.FFI_ERROR
|
||||
local subsystem = ngx.config.subsystem
|
||||
|
||||
|
||||
local ngx_lua_ffi_now
|
||||
local ngx_lua_ffi_time
|
||||
local ngx_lua_ffi_today
|
||||
local ngx_lua_ffi_localtime
|
||||
local ngx_lua_ffi_utctime
|
||||
local ngx_lua_ffi_update_time
|
||||
|
||||
|
||||
if subsystem == 'http' then
|
||||
ffi.cdef[[
|
||||
double ngx_http_lua_ffi_now(void);
|
||||
long ngx_http_lua_ffi_time(void);
|
||||
void ngx_http_lua_ffi_today(unsigned char *buf);
|
||||
void ngx_http_lua_ffi_localtime(unsigned char *buf);
|
||||
void ngx_http_lua_ffi_utctime(unsigned char *buf);
|
||||
void ngx_http_lua_ffi_update_time(void);
|
||||
int ngx_http_lua_ffi_cookie_time(unsigned char *buf, long t);
|
||||
void ngx_http_lua_ffi_http_time(unsigned char *buf, long t);
|
||||
void ngx_http_lua_ffi_parse_http_time(const unsigned char *str, size_t len,
|
||||
long *time);
|
||||
]]
|
||||
|
||||
ngx_lua_ffi_now = C.ngx_http_lua_ffi_now
|
||||
ngx_lua_ffi_time = C.ngx_http_lua_ffi_time
|
||||
ngx_lua_ffi_today = C.ngx_http_lua_ffi_today
|
||||
ngx_lua_ffi_localtime = C.ngx_http_lua_ffi_localtime
|
||||
ngx_lua_ffi_utctime = C.ngx_http_lua_ffi_utctime
|
||||
ngx_lua_ffi_update_time = C.ngx_http_lua_ffi_update_time
|
||||
|
||||
elseif subsystem == 'stream' then
|
||||
ffi.cdef[[
|
||||
double ngx_stream_lua_ffi_now(void);
|
||||
long ngx_stream_lua_ffi_time(void);
|
||||
void ngx_stream_lua_ffi_today(unsigned char *buf);
|
||||
void ngx_stream_lua_ffi_localtime(unsigned char *buf);
|
||||
void ngx_stream_lua_ffi_utctime(unsigned char *buf);
|
||||
void ngx_stream_lua_ffi_update_time(void);
|
||||
]]
|
||||
|
||||
ngx_lua_ffi_now = C.ngx_stream_lua_ffi_now
|
||||
ngx_lua_ffi_time = C.ngx_stream_lua_ffi_time
|
||||
ngx_lua_ffi_today = C.ngx_stream_lua_ffi_today
|
||||
ngx_lua_ffi_localtime = C.ngx_stream_lua_ffi_localtime
|
||||
ngx_lua_ffi_utctime = C.ngx_stream_lua_ffi_utctime
|
||||
ngx_lua_ffi_update_time = C.ngx_stream_lua_ffi_update_time
|
||||
end
|
||||
|
||||
|
||||
function ngx.now()
|
||||
return tonumber(ngx_lua_ffi_now())
|
||||
end
|
||||
|
||||
|
||||
function ngx.time()
|
||||
return tonumber(ngx_lua_ffi_time())
|
||||
end
|
||||
|
||||
|
||||
function ngx.update_time()
|
||||
ngx_lua_ffi_update_time()
|
||||
end
|
||||
|
||||
|
||||
function ngx.today()
|
||||
-- the format of today is 2010-11-19
|
||||
local today_buf_size = 10
|
||||
local buf = get_string_buf(today_buf_size)
|
||||
ngx_lua_ffi_today(buf)
|
||||
return ffi_str(buf, today_buf_size)
|
||||
end
|
||||
|
||||
|
||||
function ngx.localtime()
|
||||
-- the format of localtime is 2010-11-19 20:56:31
|
||||
local localtime_buf_size = 19
|
||||
local buf = get_string_buf(localtime_buf_size)
|
||||
ngx_lua_ffi_localtime(buf)
|
||||
return ffi_str(buf, localtime_buf_size)
|
||||
end
|
||||
|
||||
|
||||
function ngx.utctime()
|
||||
-- the format of utctime is 2010-11-19 20:56:31
|
||||
local utctime_buf_size = 19
|
||||
local buf = get_string_buf(utctime_buf_size)
|
||||
ngx_lua_ffi_utctime(buf)
|
||||
return ffi_str(buf, utctime_buf_size)
|
||||
end
|
||||
|
||||
|
||||
if subsystem == 'http' then
|
||||
|
||||
function ngx.cookie_time(sec)
|
||||
if type(sec) ~= "number" then
|
||||
error("number argument only", 2)
|
||||
end
|
||||
|
||||
-- the format of cookie time is Mon, 28-Sep-2038 06:00:00 GMT
|
||||
-- or Mon, 28-Sep-18 06:00:00 GMT
|
||||
local cookie_time_buf_size = 29
|
||||
local buf = get_string_buf(cookie_time_buf_size)
|
||||
local used_size = C.ngx_http_lua_ffi_cookie_time(buf, sec)
|
||||
return ffi_str(buf, used_size)
|
||||
end
|
||||
|
||||
|
||||
function ngx.http_time(sec)
|
||||
if type(sec) ~= "number" then
|
||||
error("number argument only", 2)
|
||||
end
|
||||
|
||||
-- the format of http time is Mon, 28 Sep 1970 06:00:00 GMT
|
||||
local http_time_buf_size = 29
|
||||
local buf = get_string_buf(http_time_buf_size)
|
||||
C.ngx_http_lua_ffi_http_time(buf, sec)
|
||||
return ffi_str(buf, http_time_buf_size)
|
||||
end
|
||||
|
||||
|
||||
function ngx.parse_http_time(time_str)
|
||||
if type(time_str) ~= "string" then
|
||||
error("string argument only", 2)
|
||||
end
|
||||
|
||||
C.ngx_http_lua_ffi_parse_http_time(time_str, #time_str, time_val)
|
||||
|
||||
local res = time_val[0]
|
||||
if res == FFI_ERROR then
|
||||
return nil
|
||||
end
|
||||
|
||||
return tonumber(res)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
return {
|
||||
version = base.version
|
||||
}
|
||||
Reference in New Issue
Block a user