aboutsummaryrefslogtreecommitdiffstats
path: root/lualib/rspamadm
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2018-06-16 14:19:10 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2018-06-16 14:19:10 +0100
commit8bdc6fa55d56eb01cd70b11f783db60319209b11 (patch)
treed39332c867501c7aec10531974b4d5bfc5fa5fa1 /lualib/rspamadm
parentedcd7d0f3e309a2a23ae9c607c7b62ff30578770 (diff)
downloadrspamd-8bdc6fa55d56eb01cd70b11f783db60319209b11.tar.gz
rspamd-8bdc6fa55d56eb01cd70b11f783db60319209b11.zip
[Feature] Add preliminary mime stat command
Diffstat (limited to 'lualib/rspamadm')
-rw-r--r--lualib/rspamadm/mime.lua47
1 files changed, 46 insertions, 1 deletions
diff --git a/lualib/rspamadm/mime.lua b/lualib/rspamadm/mime.lua
index cf9276e81..8fe345a72 100644
--- a/lualib/rspamadm/mime.lua
+++ b/lualib/rspamadm/mime.lua
@@ -18,6 +18,7 @@ local argparse = require "argparse"
local rspamd_util = require "rspamd_util"
local rspamd_task = require "rspamd_task"
local rspamd_logger = require "rspamd_logger"
+local lua_meta = require "lua_meta"
-- Define command line options
local parser = argparse()
@@ -27,7 +28,7 @@ local parser = argparse()
:command_target("command")
:require_command(true)
--- Generate subcommand
+-- Extract subcommand
local extract = parser:command "extract ex e"
:description "Extracts data from MIME messages"
extract:argument "file"
@@ -53,6 +54,21 @@ extract:option "-o --output"
}
:default "content"
+local stat = parser:command "stat st s"
+ :description "Extracts statistical data from MIME messages"
+stat:argument "file"
+ :description "File to process"
+ :argname "<file>"
+ :args "1"
+stat:mutex(
+ stat:flag "-m --meta"
+ :description "Lua metatokens",
+ stat:flag "-b --bayes"
+ :description "Bayes tokens",
+ stat:flag "-F --fuzzy"
+ :description "Fuzzy hashes"
+)
+
local function extract_handler(opts)
if not opts.file then
parser:error('no file specified')
@@ -88,6 +104,33 @@ local function extract_handler(opts)
task:destroy() -- No automatic dtor
end
+local function stat_handler(opts)
+ if not opts.file then
+ parser:error('no file specified')
+ end
+
+ local res,task = rspamd_task.load_from_file(opts.file)
+
+ if not res then
+ parser:error(string.format('cannot read message from %s: %s', opts.file,
+ task))
+ end
+
+ if not task:process_message() then
+ parser:error(string.format('cannot read message from %s: %s', opts.file,
+ 'failed to parse'))
+ end
+
+ if opts.meta then
+ local mt = lua_meta.gen_metatokens_table(task)
+ for k,v in pairs(mt) do
+ rspamd_logger.messagex('%s = %s', k, v)
+ end
+ end
+
+ task:destroy() -- No automatic dtor
+end
+
local function handler(args)
local opts = parser:parse(args)
@@ -95,6 +138,8 @@ local function handler(args)
if command == 'extract' then
extract_handler(opts)
+ elseif command == 'stat' then
+ stat_handler(opts)
else
parser:error('command %s is not implemented', command)
end