]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Minor] Migrate src/plugins/lua/milter_headers.lua to lua_shape
authorVsevolod Stakhov <vsevolod@rspamd.com>
Tue, 18 Nov 2025 10:15:14 +0000 (10:15 +0000)
committerVsevolod Stakhov <vsevolod@rspamd.com>
Tue, 18 Nov 2025 10:15:14 +0000 (10:15 +0000)
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.

src/plugins/lua/milter_headers.lua

index 2c20d3206c2a7a5acc7797e289e6a9c3bacc656e..bc1c4f5d8d324a124cb487a5f87e94949200f748 100644 (file)
@@ -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')