From 2e5c5ef5b9176084123548aafee6be949689adab Mon Sep 17 00:00:00 2001 From: midoks Date: Sun, 13 Aug 2023 18:32:30 +0800 Subject: [PATCH] update --- plugins/op_waf/index.py | 83 ++++++++++++++++++++------------- plugins/op_waf/install.sh | 2 +- plugins/op_waf/waf/lua/init.lua | 36 ++++++++++++++ 3 files changed, 88 insertions(+), 33 deletions(-) diff --git a/plugins/op_waf/index.py b/plugins/op_waf/index.py index be8475ffa..85bb755ad 100755 --- a/plugins/op_waf/index.py +++ b/plugins/op_waf/index.py @@ -104,8 +104,6 @@ def pSqliteDb(dbname='logs'): def initDomainInfo(conf_reload=False): data = [] path_domains = getJsonPath('domains') - if not os.path.exists(path_domains) and not conf_reload: - return True _list = mw.M('sites').field('id,name,path').where( 'status=?', ('1',)).order('id desc').select() @@ -301,8 +299,6 @@ def autoMakeLuaConf(conf_reload=False, cp_reload=False): import_list = ['config', 'site', 'domains'] for x in import_list: - if cp_reload: - autoCpImport(x) autoMakeLuaImportSingle(x, conf_reload) html_list = ['get', 'post', 'safe_js', 'user_agent', 'cookie', 'other'] @@ -314,10 +310,12 @@ def autoMakeLuaConf(conf_reload=False, cp_reload=False): def initDefaultInfo(conf_reload=False): path = getServerDir() - djson = path + "/waf/domains.json" - default_json = path + "/waf/default.json" - - content = mw.readFile(djson) + dst_path = path + "/waf/default.pl" + default_site = '' + if os.path.exists(dst_path): + return True + source_path = path + "/waf/domains.json" + content = mw.readFile(source_path) content = json.loads(content) ddata = {} @@ -328,11 +326,43 @@ def initDefaultInfo(conf_reload=False): dlist.append('unset') ddata["list"] = dlist if len(ddata["list"]) < 1: - ddata["default"] = "unset" + default_site = "unset" else: - ddata["default"] = dlist[0] + default_site = dlist[0] + + mw.writeFile(dst_path, default_site) + + +def getSiteListData(): + path = getServerDir() + source_path = path + "/waf/domains.json" + dst_path = path + "/waf/default.pl" + + content = mw.readFile(source_path) + content = json.loads(content) + dlist = [] + for i in content: + dlist.append(i["name"]) + dlist.append('unset') + + default_site = mw.readFile(dst_path) + + data = {} + data['list'] = dlist + data['default'] = default_site + return data + + +def setDefaultSite(name): + path = getServerDir() + dst_path = path + "/waf/default.pl" + mw.writeFile(dst_path, name) + return mw.returnJson(True, 'OK') + - mw.writeFile(default_json, json.dumps(ddata)) +def getDefaultSite(): + data = getSiteListData() + return mw.returnJson(True, 'OK', data) def autoMakeConfig(conf_reload=False, cp_reload=False): @@ -385,9 +415,18 @@ def makeOpDstRunLua(conf_reload=False): access_file_dst = root_access_dir + '/opwaf_init.lua' if not os.path.exists(access_file_dst) or conf_reload: access_file_tpl = path_tpl + "/waf/lua/init.lua" + access_file_dst_s = path + "/waf/lua/init.lua" content = mw.readFile(access_file_tpl) content = contentReplace(content) mw.writeFile(access_file_dst, content) + mw.writeFile(access_file_dst_s, content) + + waf_mmdb_dst = path + "/waf/lua/waf_maxminddb.lua" + if not os.path.exists(waf_mmdb_dst) or conf_reload: + waf_mmdb_tpl = path_tpl + "/waf/lua/waf_maxminddb.lua" + content = mw.readFile(waf_mmdb_tpl) + content = contentReplace(content) + mw.writeFile(waf_mmdb_dst, content) mw.opLuaMakeAll() return True @@ -498,7 +537,7 @@ def reload(): mw.opWeb('stop') makeOpDstRunLua(True) - autoMakeConfig(True, False) + autoMakeConfig(True, True) elog = mw.getServerDir() + "/openresty/nginx/logs/error.log" if os.path.exists(elog): @@ -1014,26 +1053,6 @@ def getSiteConfig(): return mw.returnJson(True, 'ok!', content) -def getSiteListData(): - path = getServerDir() + "/waf/default.json" - data = mw.readFile(path) - return json.loads(data) - - -def setDefaultSite(name): - path = getServerDir() + "/waf/default.json" - data = mw.readFile(path) - data = json.loads(data) - data['default'] = name - mw.writeFile(path, json.dumps(data)) - return mw.returnJson(True, 'OK') - - -def getDefaultSite(): - data = getSiteListData() - return mw.returnJson(True, 'OK', data) - - def getSiteConfigByName(): args = getArgs() data = checkArgs(args, ['siteName']) diff --git a/plugins/op_waf/install.sh b/plugins/op_waf/install.sh index d5faae297..b0af9d2ac 100755 --- a/plugins/op_waf/install.sh +++ b/plugins/op_waf/install.sh @@ -117,7 +117,7 @@ Install_App(){ echo 'install ok' > $install_tmp cd ${rootPath} && python3 ${rootPath}/plugins/op_waf/index.py start - # cd ${rootPath} && python3 ${rootPath}/plugins/op_waf/index.py restart + echo "cd ${rootPath} && python3 ${rootPath}/plugins/op_waf/index.py start" } Uninstall_App(){ diff --git a/plugins/op_waf/waf/lua/init.lua b/plugins/op_waf/waf/lua/init.lua index d1e3337e4..a71517dff 100644 --- a/plugins/op_waf/waf/lua/init.lua +++ b/plugins/op_waf/waf/lua/init.lua @@ -549,11 +549,47 @@ local function waf_cookie() return false end +local function initmaxminddb() + if geo ==nil then + maxminddb ,geo = pcall(function() return require 'waf_maxminddb' end) + if not maxminddb then + return nil + end + end + if type(geo)=='number' then return nil end + local ok2,data=pcall(function() + if not geo.initted() then + geo.init("{$WAF_ROOT}/GeoLite2-City.mmdb") + end + end ) + if not ok2 then + geo=nil + end +end + + + +local function get_ip_Country() + initmaxminddb() + if type(geo)=='number' then return "21" end + if geo==nil then return "22" end + if geo.lookup==nil then return "23" end + local res,err=geo.lookup(param['ip'] or ngx.var.remote_addr) + if not res then + return "2" + else + return res + end +end + function waf() if server_name == "unset" then ngx.exit(403) end min_route() -- C:D("min_route") + + overcon = get_ip_Country() + C:D(tostring(overcon)) if site_config[server_name] and site_config[server_name]['open'] then -- white ip