]> source.dussan.org Git - rspamd.git/commitdiff
[Feature] Selectors: Add `specific_urls` extractor
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 19 Aug 2019 15:21:42 +0000 (16:21 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 19 Aug 2019 15:21:42 +0000 (16:21 +0100)
lualib/lua_selectors/extractors.lua
test/lua/unit/selectors.lua

index a3fda891d2eee21c37c580fb6ebc9dd148deb561..99316970857c2cd1a9c50cf10d59f2c1c46709fb 100644 (file)
@@ -278,6 +278,23 @@ e.g. `by_hostname`]],
 If no arguments specified, returns list of url objects. Otherwise, calls a specific method,
 e.g. `get_tld`]],
   },
+  -- Get specific urls
+  ['specific_urls'] = {
+    ['get_value'] = function(task, args)
+      local params = args[1] or {}
+      params.task = task
+      local urls = lua_util.extract_specific_urls(params)
+      return urls,'userdata_list'
+    end,
+    ['description'] = [[Get most specific urls. Arguments are equal to the Lua API function]],
+    ['args_schema'] = {ts.shape{
+      limit = ts.number + ts.string / tonumber,
+      esld_limit = (ts.number + ts.string / tonumber):is_optional(),
+      prefix = ts.string:is_optional(),
+      need_emails = (ts.boolean + ts.string / lua_util.toboolean):is_optional(),
+      ignore_redirected = (ts.boolean + ts.string / lua_util.toboolean):is_optional(),
+    }}
+  },
   -- Get all emails
   ['emails'] = {
     ['get_value'] = function(task, args)
index f1a06af304df496d611ead215d369bf8f6ea946c..924c94c485cd7ebc4fe73cc44896495b3db83871 100644 (file)
@@ -151,6 +151,18 @@ context("Selectors test", function()
                 selector = "emails",
                 expect = {{"mailto://test@example.net"}}},
 
+    ["specific_urls"] = {
+      selector = "specific_urls({limit = 1})",
+      expect = {{"http://example.net"}}},
+
+    ["specific_urls + emails"] = {
+      selector = "specific_urls({need_emails = true, limit = 2})",
+      expect = {{"http://example.net", "mailto://test@example.net"}}},
+
+    ["specific_urls + emails limit"] = {
+      selector = "specific_urls({need_emails = true, limit = 1})",
+      expect = {{"http://example.net"}}},
+
     ["pool_var str, default type"] = {
                 selector = [[pool_var("str_var")]],
                 expect = {"str 1"}},