]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] selectors: cleaner symbol extractor 3336/head
authorrm-minus-rf <rm.minus.rf@protonmail.com>
Fri, 17 Apr 2020 22:17:29 +0000 (00:17 +0200)
committerrm-minus-rf <rm.minus.rf@protonmail.com>
Fri, 17 Apr 2020 22:17:29 +0000 (00:17 +0200)
'symbol' extractor returns a table
'to_ascii' transform can handle tables

lualib/lua_selectors/extractors.lua
lualib/lua_selectors/transforms.lua
src/plugins/lua/force_actions.lua

index 6359722269909ac4beff53290c2d0be709f9fc54..695371e79b94aab0e2ab955bcb9889f182eb2d37 100644 (file)
@@ -419,21 +419,12 @@ The first argument must be header name.]],
   ['symbol'] = {
     ['get_value'] = function(task, args)
       local symbol = task:get_symbol(args[1])
-      if args[2] and symbol then
-       if args[2] == 'options' then
-         -- concat options tables to avoid table representation strings produced by implicit conversion
-          return fun.map(function(r) return table.concat(r[args[2]], ', ') end, symbol), 'string_list'
-       elseif args[2] == 'score' then
-         -- only userdata_list seems to work for scores
-          return fun.map(function(r) return r[args[2]] end, symbol), 'userdata_list'
-       else
-          return fun.map(function(r) return r[args[2]] end, symbol), 'string_list'
-       end
+      if symbol then
+        return symbol[1],'table'
       end
-      return symbol,'table_list'
     end,
-    ['description'] = [[Get specific symbol. The first argument must be the symbol name. If no second argument is specified, returns a list of symbol tables. Otherwise the second argument specifies the attribute which is returned as list (`options`, `score` or `group`)]],
-    ['args_schema'] = {ts.string, ts.one_of{'options','score','group'}:is_optional()}
+    ['description'] = [[Get specific symbol. The first argument must be the symbol name. Returns the symbol table. See task:get_symbol()]],
+    ['args_schema'] = {ts.string}
   },
 
 }
index be896126df92fe81b8bda7912b738f4b9fc3ca55..b1088aa759f556cdf96ffff516d88550657c8010 100644 (file)
@@ -413,16 +413,23 @@ Empty string comes the first argument or 'true', non-empty string comes nil]],
     ['args_schema'] = {(ts.number + ts.string / tonumber),
                        (ts.number + ts.string / tonumber):is_optional()}
   },
-  -- Returns the string with all non ascii chars replaced
+  -- Returns the string(s) with all non ascii chars replaced
   ['to_ascii'] = {
     ['types'] = {
       ['string'] = true,
+      ['list'] = true,
     },
     ['map_type'] = 'string',
-    ['process'] = function(inp, _)
-      return string.gsub(inp, '[\128-\255]', '?'), 'string'
+    ['process'] = function(inp, _, args)
+      if type(inp) == 'table' then
+        return fun.map( function(s) return string.gsub(tostring(s), '[\128-\255]', args[1] or '?') end , inp), 'string_list'
+      else 
+        return string.gsub(tostring(inp), '[\128-\255]', '?'), 'string'
+      end
+         
     end,
-    ['description'] = 'Returns the string with all non-ascii bytes replaced with `?`',
+    ['description'] = 'Returns the string with all non-ascii bytes replaced with the character given as second argument or `?`',
+    ['args_schema'] = {ts.string:is_optional()}
   },
 
 }
index e86892f6a9c945dedb0c8b29e9ac490bcf81c310..eda87ead093cc404a27123dbe5dae33f776c488f 100644 (file)
@@ -111,7 +111,6 @@ local function gen_cb(expr, act, pool, message, subject, raction, honor, limit,
         -- process selector expressions in the message
         message = string.gsub(message, '(${(.-)})', process_message_selectors)
         task:set_pre_result(act, message, N, nil, nil, flags)
-
       else
         task:set_pre_result(act, nil, N, nil, nil, flags)
       end