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()
: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"
}
: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')
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)
if command == 'extract' then
extract_handler(opts)
+ elseif command == 'stat' then
+ stat_handler(opts)
else
parser:error('command %s is not implemented', command)
end