diff --git a/src/lua/libs/url.lua b/src/lua/libs/url.lua index ed2832c..c7ed680 100644 --- a/src/lua/libs/url.lua +++ b/src/lua/libs/url.lua @@ -394,7 +394,6 @@ function M.parse(url) M.setAuthority(comp, v) return '' end) - comp.path = url:gsub("([^/]+)", function (s) return encode(decode(s), M.options.legal_in_path) end) setmetatable(comp, { @@ -406,6 +405,15 @@ function M.parse(url) return comp end +--- Parse and return just the path from applet.qs +-- @param qs string +-- @return path string +function M.getpath(qs) + qs = qs:gsub('%?(.*)', '') + local path = qs:gsub("([^/]+)", function (s) return encode(decode(s), M.options.legal_in_path) end) + return path or "" +end + --- removes dots and slashes in urls when possible -- This function will also remove multiple slashes -- @param path The string representing the path to clean diff --git a/src/lua/scripts/bot-check.lua b/src/lua/scripts/bot-check.lua index 5b7d4ad..73484bd 100644 --- a/src/lua/scripts/bot-check.lua +++ b/src/lua/scripts/bot-check.lua @@ -154,7 +154,7 @@ function _M.view(applet) -- check if captcha is enabled, path+domain priority, then just domain, and 0 otherwise local captcha_enabled = false - local path = applet.qs; --because on /.basedflare/bot-check?/whatever, .qs (query string) holds the "path" + local path = url.getpath(applet.qs); --because on /.basedflare/bot-check?/whatever, .qs (query string) holds the old path local ddos_map_lookup = ddos_map:lookup(host..path) or ddos_map:lookup(host) if ddos_map_lookup ~= nil then diff --git a/src/lua/scripts/register-bot-check.lua b/src/lua/scripts/register-bot-check.lua index 0c46f01..be69307 100644 --- a/src/lua/scripts/register-bot-check.lua +++ b/src/lua/scripts/register-bot-check.lua @@ -2,13 +2,6 @@ package.path = package.path .. "./?.lua;/etc/haproxy/scripts/?.lua;/etc/haproxy local bot_check = require("bot-check") -core.register_service("bot-check", "http", bot_check.view) -core.register_action("captcha-check", { 'http-req', }, bot_check.check_captcha_status) -core.register_action("pow-check", { 'http-req', }, bot_check.check_pow_status) -core.register_action("decide-checks-necessary", { 'http-req', }, bot_check.decide_checks_necessary) -core.register_action("kill-tor-circuit", { 'http-req', }, bot_check.kill_tor_circuit) -core.register_action("set-lang-json", { 'http-req', }, bot_check.set_lang_json) - local backends_map = Map.new('/etc/haproxy/map/backends.map', Map._str) function get_server_names(txn) local key = txn.sf:hdr("Host") @@ -21,3 +14,10 @@ function get_server_names(txn) end core.register_fetches("get_server_names", get_server_names) + +core.register_service("bot-check", "http", bot_check.view) +core.register_action("captcha-check", { 'http-req', }, bot_check.check_captcha_status) +core.register_action("pow-check", { 'http-req', }, bot_check.check_pow_status) +core.register_action("decide-checks-necessary", { 'http-req', }, bot_check.decide_checks_necessary) +core.register_action("kill-tor-circuit", { 'http-req', }, bot_check.kill_tor_circuit) +core.register_action("set-lang-json", { 'http-req', }, bot_check.set_lang_json)