]> git.ipfire.org Git - thirdparty/rspamd.git/commit
[Feature] Add combinator option for multimap selector rules 5766/head
authorVsevolod Stakhov <vsevolod@rspamd.com>
Thu, 27 Nov 2025 15:37:47 +0000 (15:37 +0000)
committerVsevolod Stakhov <vsevolod@rspamd.com>
Thu, 27 Nov 2025 15:37:47 +0000 (15:37 +0000)
commit90f58ac488757463ba93e9c637323e933e6d4a27
tree9952dcec26533fc52106962c065611689d6e9a59
parent03dd4de97f328ba2f67204075ba8d20ad3a6144f
[Feature] Add combinator option for multimap selector rules

This change adds support for structured data output from selectors in
multimap rules. Previously, selectors always produced concatenated
strings which made it impossible to send structured JSON data to
external map services.

New 'combinator' option for selector-type multimap rules:
- 'string' (default): concatenate results with delimiter (existing behavior)
- 'array': flatten all results into a flat array
- 'object': convert pairs of selectors into key-value object

Example configuration for external JSON API:
  multimap {
    MY_EXTERNAL_CHECK {
      type = "selector";
      selector = "id('from');from('smtp'):addr;id('ip');ip";
      combinator = "object";  # produces {"from": "...", "ip": "..."}
      map = {
        external = true;
        backend = "http://api.example.com/check";
        method = "body";
        encode = "json";
      };
    }
  }

Changes:
- lua_selectors: Added combinator registry and helper functions
  - get_combinator(name): returns combinator function by name
  - list_combinators(): returns available combinator names
  - create_selector_closure_with_combinator(): creates closure with named combinator
- multimap: Added 'combinator' option support for selector and redis+selector maps
lualib/lua_selectors/init.lua
src/plugins/lua/multimap.lua