]> source.dussan.org Git - rspamd.git/commitdiff
[Feature] Add `thresholds` field to the scan result
authorVsevolod Stakhov <vsevolod@rspamd.com>
Mon, 23 Jan 2023 21:52:00 +0000 (21:52 +0000)
committerVsevolod Stakhov <vsevolod@rspamd.com>
Mon, 23 Jan 2023 21:52:00 +0000 (21:52 +0000)
src/libserver/protocol.c

index 380d801349020d1161701c43261bebd449f55113..3708d823fd84240fd92d9ed5c92e56e55961dc4b 100644 (file)
@@ -1213,7 +1213,7 @@ rspamd_scan_result_ucl (struct rspamd_task *task,
 
        if (pr) {
                if (pr->message && !(pr->flags & RSPAMD_PASSTHROUGH_NO_SMTP_MESSAGE)) {
-                       /* Add smtp message if it does not exists: see #3269 for details */
+                       /* Add smtp message if it does not exist: see #3269 for details */
                        if (ucl_object_lookup(task->messages, "smtp_message") == NULL) {
                                ucl_object_insert_key(task->messages,
                                        ucl_object_fromstring_common(pr->message, 0, UCL_STRING_RAW),
@@ -1268,6 +1268,21 @@ rspamd_scan_result_ucl (struct rspamd_task *task,
 
        /* Now handle symbols */
        if (task->cmd != CMD_CHECK) {
+               /* Insert actions thresholds */
+               ucl_object_t *actions_obj = ucl_object_typed_new (UCL_OBJECT);
+
+               for (int i = task->result->nactions - 1; i >= 0; i --) {
+                       struct rspamd_action_config *action_lim = &task->result->actions_config[i];
+
+                       if (!isnan (action_lim->cur_limit) &&
+                               !(action_lim->action->flags & (RSPAMD_ACTION_NO_THRESHOLD|RSPAMD_ACTION_HAM))) {
+                               ucl_object_insert_key(actions_obj, ucl_object_fromdouble(action_lim->cur_limit),
+                                       action_lim->action->name, 0, true);
+                       }
+               }
+
+               ucl_object_insert_key(obj, actions_obj, "thresholds", 0, false);
+
                /* For checkv2 we insert symbols as a separate object */
                obj = ucl_object_typed_new (UCL_OBJECT);
        }