]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Move emails normalization to the lua library
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 29 Jun 2017 07:05:54 +0000 (08:05 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 29 Jun 2017 07:59:21 +0000 (08:59 +0100)
lualib/lua_util.lua
rules/misc.lua

index 1f53d51edf4148e4b8e815460de2b7d051c3038c..bdb0045d536ee6f2eb7185cf17bb6b521c2d7d05 100644 (file)
@@ -40,4 +40,44 @@ exports.template = function(tmpl, keys)
   return lpeg.match(template_grammar, tmpl)
 end
 
+exports.remove_email_aliases = function(addr)
+  local function check_address(addr)
+    if addr.user then
+      local cap, pluses = string.match(addr.user, '^([^%+][^%+]*)(%+.*)$')
+      if cap then
+        return cap, rspamd_str_split(pluses, '+')
+      end
+    end
+
+    return nil
+  end
+
+  local function set_addr(addr, new_user)
+    addr.user = new_user
+
+    if addr.domain then
+      addr.addr = string.format('%s@%s', addr.user, addr.domain)
+    else
+      addr.addr = string.format('%s@', addr.user)
+    end
+
+    if addr.name and #addr.name > 0 then
+      addr.raw = string.format('"%s" <%s>', addr.name, addr.addr)
+    else
+      addr.raw = string.format('<%s>', addr.addr)
+    end
+  end
+
+  if addr then
+    local nu, tags = check_address(addr)
+    if nu then
+      set_addr(addr, nu)
+
+      return nu, tags
+    end
+
+    return nil
+  end
+end
+
 return exports
index 1814be8abe976d721cd069155e4596d4df56d0b2..bc9b044eb20f473262b2c8e6c8f8886cd4e957e7 100644 (file)
@@ -20,6 +20,7 @@ local E = {}
 local fun = require "fun"
 local util = require "rspamd_util"
 local rspamd_regexp = require "rspamd_regexp"
+local rspamd_lua_utils = require "lua_util"
 
 -- Different text parts
 rspamd_config.R_PARTS_DIFFER = {
@@ -409,39 +410,11 @@ local aliases_id = rspamd_config:register_symbol{
   type = 'prefilter',
   name = 'EMAIL_PLUS_ALIASES',
   callback = function(task)
-    local function check_address(addr)
-      if addr.user then
-        local cap, pluses = string.match(addr.user, '^([^%+][^%+]*)(%+.*)$')
-        if cap then
-          return cap, rspamd_str_split(pluses, '+')
-        end
-      end
-
-      return nil
-    end
-
-    local function set_addr(addr, new_user)
-      addr.user = new_user
-
-      if addr.domain then
-        addr.addr = string.format('%s@%s', addr.user, addr.domain)
-      else
-        addr.addr = string.format('%s@', addr.user)
-      end
-
-      if addr.name and #addr.name > 0 then
-        addr.raw = string.format('"%s" <%s>', addr.name, addr.addr)
-      else
-        addr.raw = string.format('<%s>', addr.addr)
-      end
-    end
-
     local function check_from(type)
       if task:has_from(type) then
         local addr = task:get_from(type)[1]
-        local na,tags = check_address(addr)
+        local na,tags = rspamd_lua_utils.remove_email_aliases(addr)
         if na then
-          set_addr(addr, na)
           task:set_from(type, addr)
           task:insert_result('TAGGED_FROM', 1.0, fun.totable(
             fun.filter(function(t) return t and #t > 0 end, tags)))
@@ -459,9 +432,8 @@ local aliases_id = rspamd_config:register_symbol{
         local addrs = task:get_recipients(type)
 
         for _, addr in ipairs(addrs) do
-          local na,tags = check_address(addr)
+          local na,tags = rspamd_lua_utils.remove_email_aliases(addr)
           if na then
-            set_addr(addr, na)
             modified = true
             fun.each(function(t) table.insert(all_tags, t) end,
               fun.filter(function(t) return t and #t > 0 end, tags))