]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Add more methods to lua selectors
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Sun, 16 Sep 2018 08:56:42 +0000 (09:56 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Sun, 16 Sep 2018 09:06:29 +0000 (10:06 +0100)
lualib/lua_selectors.lua

index 00acc4cb249eb9ab76822b6c34a6ce8c76add2ab..3262da60e06eda1b74728147213a03ef98b0aa46 100644 (file)
@@ -32,6 +32,17 @@ local M = "lua_selectors"
 local E = {}
 
 local extractors = {
+  ['id'] = {
+    ['type'] = 'string',
+    ['get_value'] = function(_, args)
+      if args[1] then
+        return args[1]
+      end
+
+      return ''
+    end,
+    ['description'] = 'Return value from function\'s argument or an empty string',
+  },
   -- Get source IP address
   ['ip'] = {
     ['type'] = 'ip',
@@ -402,6 +413,36 @@ local transform_function = {
     end,
     ['description'] = 'Extracts substring',
   },
+  -- Regexp matching
+  ['regexp'] = {
+    ['types'] = {
+      ['string'] = true
+    },
+    ['map_type'] = 'string',
+    ['process'] = function(inp, _, args)
+      local rspamd_regexp = require "rspamd_regexp"
+
+      local re = rspamd_regexp.create_cached(args[1])
+
+      if not re then
+        logger.errx('invalid regexp: %s', args[1])
+        return nil
+      end
+
+      local res = re:search(inp, false, true)
+
+      if res then
+        if #res == 1 then
+          return res[1],'string'
+        end
+
+        return res,'string_list'
+      end
+
+      return nil
+    end,
+    ['description'] = 'Regexp matching',
+  },
   -- Drops input value and return values from function's arguments or an empty string
   ['id'] = {
     ['types'] = {