mirror of https://github.com/1Panel-dev/1Panel
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
122 lines
2.8 KiB
122 lines
2.8 KiB
local cjson = require "cjson"
|
|
local pairs = pairs
|
|
local insert_table = table.insert
|
|
local lower_str = string.lower
|
|
local open_file = io.open
|
|
local gsub_str = string.gsub
|
|
local decode = cjson.decode
|
|
|
|
local _M = {}
|
|
|
|
function _M.read_rule(file_path, file_name, read_all)
|
|
local file, err = open_file(file_path .. file_name .. ".json", "r")
|
|
if not file then
|
|
ngx.log(ngx.ERR, "Failed to open file ", err)
|
|
return
|
|
end
|
|
|
|
local rules_table = {}
|
|
local other_table = {}
|
|
local text = file:read('*a')
|
|
|
|
file:close()
|
|
|
|
if #text > 0 then
|
|
local result = decode(text)
|
|
|
|
if result then
|
|
for key, value in pairs(result) do
|
|
if key == "rules" then
|
|
for _, r in pairs(value) do
|
|
if read_all then
|
|
r.hits = 0
|
|
r.totalHits = 0
|
|
insert_table(rules_table, r)
|
|
else
|
|
if lower_str(r.state) == 'on' then
|
|
r.hits = 0
|
|
r.totalHits = 0
|
|
insert_table(rules_table, r)
|
|
end
|
|
end
|
|
end
|
|
else
|
|
other_table[key] = value
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
return rules_table, other_table
|
|
end
|
|
|
|
function _M.read_file2table(file_path)
|
|
local file = open_file(file_path, 'r')
|
|
if file == nil then
|
|
return nil
|
|
end
|
|
local str = file:read("*a")
|
|
file:close()
|
|
return decode(str)
|
|
end
|
|
|
|
function _M.read_list2table(filePath)
|
|
local file, err = open_file(filePath, "r")
|
|
if not file then
|
|
ngx.log(ngx.ERR, "Failed to open file ", err)
|
|
return
|
|
end
|
|
|
|
local t = {}
|
|
for line in file:lines() do
|
|
line = gsub_str(line, "[\r\n]", "")
|
|
insert_table(t, line)
|
|
end
|
|
file:close()
|
|
return t
|
|
end
|
|
|
|
function _M.set_content_to_file(data, file_path)
|
|
if data == nil or file_path == nil then
|
|
return
|
|
end
|
|
local file = open_file(file_path, "w")
|
|
if file then
|
|
file:write(data)
|
|
file:close()
|
|
end
|
|
end
|
|
|
|
|
|
function _M.read_file2string(file_path, binary)
|
|
if not file_path then
|
|
ngx.log(ngx.ERR, "No file found ", file_path)
|
|
return
|
|
end
|
|
|
|
local mode = "r"
|
|
if binary == true then
|
|
mode = "rb"
|
|
end
|
|
|
|
local file, err = open_file(file_path, mode)
|
|
if not file then
|
|
ngx.log(ngx.ERR, "Failed to open file ", err)
|
|
return
|
|
end
|
|
|
|
local content = ""
|
|
repeat
|
|
local chunk = file:read(8192) -- 读取 8KB 的块
|
|
if chunk then
|
|
content = content .. chunk
|
|
else
|
|
break
|
|
end
|
|
until not chunk
|
|
|
|
file:close()
|
|
return content
|
|
end
|
|
|
|
return _M |