Browse Source

[Project] Lua_mime: Add lua_mime.modify_headers routine

tags/3.0
Vsevolod Stakhov 3 years ago
parent
commit
f2fce8e6ea
1 changed files with 44 additions and 0 deletions
  1. 44
    0
      lualib/lua_mime.lua

+ 44
- 0
lualib/lua_mime.lua View File

@@ -510,5 +510,49 @@ exports.multipattern_text_replace = function(task, mp, replacements)
return state
end

--[[[
-- @function lua_mime.modify_headers(task, {add = {hname = {value = 'value', order = 1}}, remove = {hname = {1,2}}})
-- Adds/removes headers both internal and in the milter reply
--]]
exports.modify_headers = function(task, hdr_alterations)
local add = hdr_alterations.add or {}
local remove = hdr_alterations.remove or {}

local hdr_flattened = {} -- For C API
for hname,hdr in pairs(add) do
if not hdr_flattened[hname] then
hdr_flattened[hname] = {add = {}}
end
local add_tbl = hdr_flattened[hname].add
if hdr.value then
table.insert(add_tbl, {hdr.order or -1, hdr.value})
else
table.insert(add_tbl, {-1, hdr})
end
end

for hname,hdr in pairs(remove) do
if not hdr_flattened[hname] then
hdr_flattened[hname] = {remove = {}}
end
local remove_tbl = hdr_flattened[hname].remove
if type(hdr) == 'number' then
table.insert(remove_tbl, hdr)
else
for _,num in ipairs(hdr) do
table.insert(remove_tbl, num)
end
end
end

task:set_milter_reply({
add_headers = add,
remove_headers = remove
})

for hname,flat_rules in pairs(hdr_flattened) do
task:modify_header(hname, flat_rules)
end
end

return exports

Loading…
Cancel
Save