From a82483224b4ad25756c56bb3badb51f0fe8d3618 Mon Sep 17 00:00:00 2001 From: Thomas Lynch Date: Sun, 6 Aug 2023 17:45:52 +1000 Subject: [PATCH] Fix issue with pplet.qs taking whole query but not parsing the path out of it for the map loopup, caused issues with selecting captcha mode --- src/lua/libs/url.lua | 10 +++++++++- src/lua/scripts/bot-check.lua | 2 +- src/lua/scripts/register-bot-check.lua | 14 +++++++------- 3 files changed, 17 insertions(+), 9 deletions(-) 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)