From: Vsevolod Stakhov Date: Tue, 18 Nov 2025 10:15:14 +0000 (+0000) Subject: [Minor] Migrate src/plugins/lua/milter_headers.lua to lua_shape X-Git-Tag: 3.14.1~11^2~28 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=88c90fdc9d06ba41c9fd447d41e84f407d6c7653;p=thirdparty%2Frspamd.git [Minor] Migrate src/plugins/lua/milter_headers.lua to lua_shape Replace tableshape with lua_shape in milter_headers plugin. Changes: - ts.shape({...}) → T.table({...}) - ts.array_of(x) → T.array(x) - ts.string + ts.string / fn → T.one_of({T.array(), T.transform(T.string(), fn)}) - ts.map_of(k, v) → T.table({}, {open=true, extra=v}) - :is_optional() → :optional() - extra_fields option → open=true table option - Added comprehensive documentation to all fields Schema: config_schema with flexible 'use' field accepting string or array, optional flags, header lists, map schema, and custom headers. --- diff --git a/src/plugins/lua/milter_headers.lua b/src/plugins/lua/milter_headers.lua index 2c20d3206c..bc1c4f5d8d 100644 --- a/src/plugins/lua/milter_headers.lua +++ b/src/plugins/lua/milter_headers.lua @@ -27,7 +27,7 @@ local N = 'milter_headers' local lua_util = require "lua_util" local lua_maps = require "lua_maps" local lua_mime = require "lua_mime" -local ts = require("tableshape").types +local T = require "lua_shape.core" local E = {} local HOSTNAME = rspamd_util.get_hostname() @@ -638,21 +638,24 @@ local function milter_headers(task) end end -local config_schema = ts.shape({ - use = ts.array_of(ts.string) + ts.string / function(s) - return { s } - end, - remove_upstream_spam_flag = ts.boolean:is_optional(), - extended_spam_headers = ts.boolean:is_optional(), - skip_local = ts.boolean:is_optional(), - skip_authenticated = ts.boolean:is_optional(), - local_headers = ts.array_of(ts.string):is_optional(), - authenticated_headers = ts.array_of(ts.string):is_optional(), - extended_headers_rcpt = lua_maps.map_schema:is_optional(), - custom = ts.map_of(ts.string, ts.string):is_optional(), +local config_schema = T.table({ + use = T.one_of({ + T.array(T.string()), + T.transform(T.string(), function(s) + return { s } + end) + }):doc({ summary = "List of routines to activate" }), + remove_upstream_spam_flag = T.boolean():optional():doc({ summary = "Remove upstream spam flag" }), + extended_spam_headers = T.boolean():optional():doc({ summary = "Add extended spam headers" }), + skip_local = T.boolean():optional():doc({ summary = "Skip local connections" }), + skip_authenticated = T.boolean():optional():doc({ summary = "Skip authenticated users" }), + local_headers = T.array(T.string()):optional():doc({ summary = "Headers for local connections" }), + authenticated_headers = T.array(T.string()):optional():doc({ summary = "Headers for authenticated users" }), + extended_headers_rcpt = lua_maps.map_schema:optional():doc({ summary = "Recipients for extended headers" }), + custom = T.table({}, { open = true, extra = T.string() }):optional():doc({ summary = "Custom header definitions" }), }, { - extra_fields = ts.map_of(ts.string, ts.any) -}) + open = true +}):doc({ summary = "Milter headers plugin configuration" }) local opts = rspamd_config:get_all_opt(N) or rspamd_config:get_all_opt('rmilter_headers')