aboutsummaryrefslogtreecommitdiffstats
path: root/src/lua
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@rspamd.com>2024-04-05 17:56:15 +0100
committerVsevolod Stakhov <vsevolod@rspamd.com>2024-04-05 17:56:15 +0100
commitb2ba70cf7a187b429c613eee54251983516d9051 (patch)
treee1008cafb58ca4950b3595e05c37cf9919cdf751 /src/lua
parent2715f2453644bf833f5f33e33ad92dbb2e276270 (diff)
downloadrspamd-b2ba70cf7a187b429c613eee54251983516d9051.tar.gz
rspamd-b2ba70cf7a187b429c613eee54251983516d9051.zip
[Fix] Honor dynamic thresholds for greylisting module
Diffstat (limited to 'src/lua')
-rw-r--r--src/lua/lua_task.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/lua/lua_task.c b/src/lua/lua_task.c
index e37c6838d..edbe5b89a 100644
--- a/src/lua/lua_task.c
+++ b/src/lua/lua_task.c
@@ -872,6 +872,14 @@ LUA_FUNCTION_DEF(task, get_metric_result);
* @return {number,number} 2 numbers containing the current score and required score of the metric
*/
LUA_FUNCTION_DEF(task, get_metric_score);
+
+/***
+ * @method task:get_metric_threshold(action)
+ * Get the current threshold of the action `action` for the default metric. Should be used after settings have been applied.
+ * @param {string} action name of a action
+ * @return {number} the current threshold of the action
+ */
+LUA_FUNCTION_DEF(task, get_metric_threshold);
/***
* @method task:get_metric_action(name)
* Get the current action of metric `name` (must be nil or 'default'). Should be used in idempotent filters only.
@@ -1307,6 +1315,7 @@ static const struct luaL_reg tasklib_m[] = {
LUA_INTERFACE_DEF(task, get_metric_result),
LUA_INTERFACE_DEF(task, get_metric_score),
LUA_INTERFACE_DEF(task, get_metric_action),
+ LUA_INTERFACE_DEF(task, get_metric_threshold),
LUA_INTERFACE_DEF(task, set_metric_score),
LUA_INTERFACE_DEF(task, set_metric_subject),
LUA_INTERFACE_DEF(task, learn),
@@ -6352,6 +6361,38 @@ lua_task_get_metric_action(lua_State *L)
}
static int
+lua_task_get_metric_threshold(lua_State *L)
+{
+ LUA_TRACE_POINT;
+ struct rspamd_task *task = lua_check_task(L, 1);
+ const char *act_name = luaL_checkstring(L, 2);
+
+ if (task && act_name && task->result) {
+ struct rspamd_action *action = rspamd_config_get_action(task->cfg, act_name);
+
+ if (action == NULL) {
+ lua_pushnil(L);
+ }
+ else {
+ struct rspamd_action_config *act_config =
+ rspamd_find_action_config_for_action(task->result, action);
+
+ if (act_config) {
+ lua_pushnumber(L, act_config->cur_limit);
+ }
+ else {
+ lua_pushnil(L);
+ }
+ }
+ }
+ else {
+ return luaL_error(L, "invalid arguments");
+ }
+
+ return 1;
+}
+
+static int
lua_task_set_metric_score(lua_State *L)
{
LUA_TRACE_POINT;