diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2018-06-16 14:19:10 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2018-06-16 14:19:10 +0100 |
commit | 8bdc6fa55d56eb01cd70b11f783db60319209b11 (patch) | |
tree | d39332c867501c7aec10531974b4d5bfc5fa5fa1 /lualib/rspamadm | |
parent | edcd7d0f3e309a2a23ae9c607c7b62ff30578770 (diff) | |
download | rspamd-8bdc6fa55d56eb01cd70b11f783db60319209b11.tar.gz rspamd-8bdc6fa55d56eb01cd70b11f783db60319209b11.zip |
[Feature] Add preliminary mime stat command
Diffstat (limited to 'lualib/rspamadm')
-rw-r--r-- | lualib/rspamadm/mime.lua | 47 |
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 |