]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Selectors: support extracting task cache variables 3574/head
authorAndrew Lewis <nerf@judo.za.org>
Wed, 9 Dec 2020 14:46:31 +0000 (16:46 +0200)
committerAndrew Lewis <nerf@judo.za.org>
Wed, 9 Dec 2020 14:46:31 +0000 (16:46 +0200)
lualib/lua_selectors/extractors.lua
test/lua/unit/selectors.lua

index 3f6dc61ee47a0f436c46deaba32cf971c4281dc1..0c82d1499ae79ab052c0ebd1d043bad7fe3f41db 100644 (file)
@@ -363,6 +363,25 @@ e.g. `get_user`]],
 the second argument is optional and defines the type (string by default)]],
     ['args_schema'] = {ts.string, ts.string:is_optional()}
   },
+  -- Get value of specific key from task cache
+  ['task_cache'] = {
+    ['get_value'] = function(task, args)
+      local val = task:cache_get(args[1])
+      if not val then
+        return
+      end
+      if type(val) == 'table' then
+        if not val[1] then
+          return
+        end
+        return val, 'string_list'
+      end
+      return val, 'string'
+    end,
+    ['description'] = [[Get value of specific key from task cache. The first argument must be
+the key name]],
+    ['args_schema'] = {ts.string}
+  },
   -- Get specific HTTP request header. The first argument must be header name.
   ['request_header'] = {
     ['get_value'] = function(task, args)
index 1f7252a773d98f6da825bd3db953e6b7ba90dbe4..270d06941d3946c672c79cf2ec983a8635915469 100644 (file)
@@ -27,6 +27,8 @@ context("Selectors test", function()
     task:process_message()
     task:get_mempool():set_variable("int_var", 1)
     task:get_mempool():set_variable("str_var", "str 1")
+    task:cache_set('cachevar1', 'hello\x00world')
+    task:cache_set('cachevar2', {'hello', 'world'})
     if not res then
       assert_true(false, "failed to load message")
     end
@@ -358,6 +360,15 @@ context("Selectors test", function()
       selector = "header('Subject').regexp('.*').first",
       expect = {"Second, lower-cased header subject"}
     },
+
+    ["task cache string"] = {
+      selector = "task_cache('cachevar1')",
+      expect = {"hello\x00world"}
+    },
+    ["task cache table"] = {
+      selector = "task_cache('cachevar2')",
+      expect = {{"hello", "world"}}
+    },
   }
 
   for case_name, case in lua_util.spairs(cases) do