aboutsummaryrefslogtreecommitdiffstats
path: root/lualib/rspamadm
diff options
context:
space:
mode:
Diffstat (limited to 'lualib/rspamadm')
-rw-r--r--lualib/rspamadm/configwizard.lua201
1 files changed, 118 insertions, 83 deletions
diff --git a/lualib/rspamadm/configwizard.lua b/lualib/rspamadm/configwizard.lua
index 542b61552..0fa48ad9c 100644
--- a/lualib/rspamadm/configwizard.lua
+++ b/lualib/rspamadm/configwizard.lua
@@ -22,6 +22,7 @@ local lua_util = require "lua_util"
local lua_stat_tools = require "lua_stat"
local lua_redis = require "lua_redis"
local ucl = require "ucl"
+local argparse = require "argparse"
local plugins_stat = require "plugins_stats"
@@ -34,6 +35,19 @@ local rspamd_logo = [[
|_|
]]
+local parser = argparse()
+ :name "rspamadm configwizard"
+ :description "Perform guided configuration for Rspamd daemon"
+ :help_description_margin(32)
+parser:option "-c --config"
+ :description "Path to config file"
+ :argname("<file>")
+ :default(rspamd_paths["CONFDIR"] .. "/" .. "rspamd.conf")
+parser:argument "checks"
+ :description "Checks to do (or 'list')"
+ :argname("<checks>")
+ :args "*"
+
local redis_params
local function printf(fmt, ...)
@@ -578,109 +592,130 @@ end
-return function(args, cfg)
- local changes = {
- l = {}, -- local changes
- o = {}, -- override changes
- }
-
- local interactive_start = true
- local checks = {}
- local all_checks = {
- 'controller',
- 'redis',
- 'dkim',
- 'statistic',
- }
-
- if #args > 0 then
- interactive_start = false
-
- for _,arg in ipairs(args) do
- if arg == 'all' then
- checks = all_checks
- elseif arg == 'list' then
- printf(highlight(rspamd_logo))
- printf('Available modules')
- for _,c in ipairs(all_checks) do
- printf('- %s', c)
+return {
+ handler = function(cmd_args)
+ local changes = {
+ l = {}, -- local changes
+ o = {}, -- override changes
+ }
+
+ local interactive_start = true
+ local checks = {}
+ local all_checks = {
+ 'controller',
+ 'redis',
+ 'dkim',
+ 'statistic',
+ }
+
+ local opts = parser:parse(cmd_args)
+ local args = opts['checks'] or {}
+
+ local _r,err = rspamd_config:load_ucl(opts['config'])
+ local cfg = rspamd_config:get_ucl()
+
+ if not _r then
+ rspamd_logger.errx('cannot parse %s: %s', opts['config'], err)
+ os.exit(1)
+ end
+
+ _r,err = rspamd_config:parse_rcl({'logging', 'worker'})
+ if not _r then
+ logger.errx('cannot process %s: %s', opts['config'], err)
+ os.exit(1)
+ end
+
+ if #args > 0 then
+ interactive_start = false
+
+ for _,arg in ipairs(args) do
+ if arg == 'all' then
+ checks = all_checks
+ elseif arg == 'list' then
+ printf(highlight(rspamd_logo))
+ printf('Available modules')
+ for _,c in ipairs(all_checks) do
+ printf('- %s', c)
+ end
+ return
+ else
+ table.insert(checks, arg)
end
- return
- else
- table.insert(checks, arg)
end
+ else
+ checks = all_checks
end
- else
- checks = all_checks
- end
- local function has_check(check)
- for _,c in ipairs(checks) do
- if c == check then
- return true
+ local function has_check(check)
+ for _,c in ipairs(checks) do
+ if c == check then
+ return true
+ end
end
- end
- return false
- end
+ return false
+ end
- rspamd_util.umask('022')
- if interactive_start then
- printf(highlight(rspamd_logo))
- printf("Welcome to the configuration tool")
- printf("We use %s configuration file, writing results to %s",
- highlight(cfg.config_path), highlight(local_conf))
- plugins_stat(nil, nil)
- end
+ rspamd_util.umask('022')
+ if interactive_start then
+ printf(highlight(rspamd_logo))
+ printf("Welcome to the configuration tool")
+ printf("We use %s configuration file, writing results to %s",
+ highlight(opts['config']), highlight(local_conf))
+ plugins_stat(nil, nil)
+ end
- if not interactive_start or
- ask_yes_no("Do you wish to continue?", true) then
+ if not interactive_start or
+ ask_yes_no("Do you wish to continue?", true) then
- if has_check('controller') then
- local controller = find_worker(cfg, 'controller')
- if controller then
- setup_controller(controller, changes)
+ if has_check('controller') then
+ local controller = find_worker(cfg, 'controller')
+ if controller then
+ setup_controller(controller, changes)
+ end
end
- end
- if has_check('redis') then
- if not cfg.redis or (not cfg.redis.servers and not cfg.redis.read_servers) then
- setup_redis(cfg, changes)
+ if has_check('redis') then
+ if not cfg.redis or (not cfg.redis.servers and not cfg.redis.read_servers) then
+ setup_redis(cfg, changes)
+ else
+ redis_params = cfg.redis
+ end
else
redis_params = cfg.redis
end
- else
- redis_params = cfg.redis
- end
- if has_check('dkim') then
- if cfg.dkim_signing and not cfg.dkim_signing.domain then
- if ask_yes_no('Do you want to setup dkim signing feature?') then
- setup_dkim_signing(cfg, changes)
+ if has_check('dkim') then
+ if cfg.dkim_signing and not cfg.dkim_signing.domain then
+ if ask_yes_no('Do you want to setup dkim signing feature?') then
+ setup_dkim_signing(cfg, changes)
+ end
end
end
- end
-
- if has_check('statistic') or has_check('statistics') then
- setup_statistic(cfg, changes)
- end
- local nchanges = 0
- for _,_ in pairs(changes.l) do nchanges = nchanges + 1 end
- for _,_ in pairs(changes.o) do nchanges = nchanges + 1 end
+ if has_check('statistic') or has_check('statistics') then
+ setup_statistic(cfg, changes)
+ end
- if nchanges > 0 then
- print_changes(changes)
- if ask_yes_no("Apply changes?", true) then
- apply_changes(changes)
- printf("%d changes applied, the wizard is finished now", nchanges)
- printf("*** Please reload the Rspamd configuration ***")
+ local nchanges = 0
+ for _,_ in pairs(changes.l) do nchanges = nchanges + 1 end
+ for _,_ in pairs(changes.o) do nchanges = nchanges + 1 end
+
+ if nchanges > 0 then
+ print_changes(changes)
+ if ask_yes_no("Apply changes?", true) then
+ apply_changes(changes)
+ printf("%d changes applied, the wizard is finished now", nchanges)
+ printf("*** Please reload the Rspamd configuration ***")
+ else
+ printf("No changes applied, the wizard is finished now")
+ end
else
- printf("No changes applied, the wizard is finished now")
+ printf("No changes found, the wizard is finished now")
end
- else
- printf("No changes found, the wizard is finished now")
end
- end
-end
+ end,
+ name = 'configwizard',
+ description = parser._description,
+}