Browse Source

[Feature] Improve dkim part in configwizard

pull/2788/head
Vsevolod Stakhov 7 years ago
parent
commit
4f14063dcf
  1. 90
      lualib/rspamadm/configwizard.lua

90
lualib/rspamadm/configwizard.lua

@ -23,6 +23,7 @@ local lua_stat_tools = require "lua_stat"
local lua_redis = require "lua_redis"
local ucl = require "ucl"
local argparse = require "argparse"
local fun = require "fun"
local plugins_stat = require "plugins_stats"
@ -51,7 +52,9 @@ parser:argument "checks"
local redis_params
local function printf(fmt, ...)
io.write(string.format(fmt, ...))
if fmt then
io.write(string.format(fmt, ...))
end
io.write('\n')
end
@ -264,6 +267,70 @@ local function setup_dkim_signing(cfg, changes)
return string.sub(path, 1, string.len(path) - 1)
end
printf('How would you like to set up DKIM signing?')
printf('1. Use domain from %s for sign', highlight('mime from header'))
printf('2. Use domain from %s for sign', highlight('SMTP envelope from'))
printf('3. Use domain from %s for sign', highlight('authenticated user'))
printf('4. Sign all mail from %s', highlight('specific networks'))
printf()
local sign_type = readline_default('Enter your choice (1, 2, 3, 4) [default: 1]: ', '1')
local sign_networks
local allow_mismatch
local auth_only
local use_esld
local sign_domain
local defined_auth_types = {'header', 'envelope', 'auth', 'recipient'}
if sign_type == '4' then
repeat
sign_networks = readline_default('Enter list of networks to perform dkim signing: ',
'')
until #sign_networks ~= 0
sign_networks = fun.totable(fun.map(lua_util.rspamd_str_trim,
lua_util.str_split(sign_networks, ',; ')))
printf('What domain would you like to use for signing?')
printf('* %s to use mime from domain', highlight('header'))
printf('* %s to use SMTP from domain', highlight('envelope'))
printf('* %s to use domain from SMTP auth', highlight('auth'))
printf('* %s to use domain from SMTP recipient', highlight('recipient'))
printf('* anything else to use as a %s domain (e.g. `example.com`)', highlight('static'))
printf()
sign_domain = readline_default('Enter your choice [default: header]: ', 'header')
else
if sign_type == '1' then
sign_domain = 'header'
elseif sign_domain == '2' then
sign_domain = 'envelope'
else
sign_domain = 'auth'
end
end
if sign_type ~= '3' then
auth_only = ask_yes_no(
string.format('Do you want to sign mail from %s only? ',
highlight('authenticated users')), true)
else
auth_only = true
end
if fun.any(function(s) return s == sign_domain end, defined_auth_types) then
-- Allow mismatch
allow_mismatch = ask_yes_no(
string.format('Allow data %s, e.g. if mime from domain is not equal to authenticated user domain? ',
highlight('mismatch')), true)
-- ESLD check
use_esld = ask_yes_no(
string.format('Do you want to use %s domain (e.g. example.com instead of foo.example.com)? ',
highlight('effective')), true)
else
allow_mismatch = true
end
local domains = {}
local has_domains = false
@ -281,12 +348,12 @@ local function setup_dkim_signing(cfg, changes)
end
local function print_domains()
print("Domains configured:")
printf("Domains configured:")
for k,v in pairs(domains) do
printf("Domain: %s, selector: %s, privkey: %s", highlight(k),
v.selector, v.privkey)
end
print("--")
printf("--")
end
repeat
@ -333,6 +400,23 @@ local function setup_dkim_signing(cfg, changes)
until not ask_yes_no("Do you wish to add another DKIM domain?")
changes.l['dkim_signing.conf'] = {domain = domains}
local res_tbl = changes.l['dkim_signing.conf']
if sign_networks then
res_tbl.sign_networks = sign_networks
res_tbl.use_domain_sign_networks = sign_domain
else
res_tbl.use_domain = sign_domain
end
if allow_mismatch then
res_tbl.allow_hdrfrom_mismatch = true
res_tbl.allow_hdrfrom_mismatch_sign_networks = true
res_tbl.allow_username_mismatch = true
end
res_tbl.use_esld = use_esld
res_tbl.auth_only = auth_only
end
local function check_redis_classifier(cls, changes)

Loading…
Cancel
Save