@@ -0,0 +1,64 @@ | |||
--[[ | |||
Copyright (c) 2020, Vsevolod Stakhov <vsevolod@highsecure.ru> | |||
Licensed under the Apache License, Version 2.0 (the "License"); | |||
you may not use this file except in compliance with the License. | |||
You may obtain a copy of the License at | |||
http://www.apache.org/licenses/LICENSE-2.0 | |||
Unless required by applicable law or agreed to in writing, software | |||
distributed under the License is distributed on an "AS IS" BASIS, | |||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
See the License for the specific language governing permissions and | |||
limitations under the License. | |||
]]-- | |||
-- Controller endpoints | |||
local local_conf = rspamd_paths['LOCAL_CONFDIR'] | |||
local local_rules = rspamd_paths['RULESDIR'] | |||
local rspamd_util = require "rspamd_util" | |||
local lua_util = require "lua_util" | |||
local rspamd_logger = require "rspamd_logger" | |||
-- Define default controller paths, could be overridden in local.d/controller.lua | |||
local controller_plugin_paths = { | |||
selectors = dofile(local_rules .. "/controller/selectors.lua") | |||
} | |||
if rspamd_util.file_exists(local_conf .. '/controller.lua') then | |||
local controller_overrides = dofile(local_conf .. '/controller.lua') | |||
if controller_overrides and type(controller_overrides) == 'table' then | |||
controller_plugin_paths = lua_util.override_defaults(controller_plugin_paths, controller_overrides) | |||
end | |||
end | |||
for plug,paths in pairs(controller_plugin_paths) do | |||
if not rspamd_plugins[plug] then | |||
rspamd_plugins[plug] = {} | |||
end | |||
if not rspamd_plugins[plug].webui then | |||
rspamd_plugins[plug].webui = {} | |||
end | |||
local webui = rspamd_plugins[plug].webui | |||
for path,attrs in pairs(paths) do | |||
if type(attrs) == 'table' then | |||
if type(attrs.handler) ~= 'function' then | |||
rspamd_logger.infox(rspamd_config, 'controller plugin %s; webui path %s has invalid handler: %s; ignore it', | |||
plug, path, type(attrs.handler)) | |||
else | |||
webui[path] = lua_util.shallowcopy(attrs) | |||
rspamd_logger.infox(rspamd_config, 'controller plugin %s; register webui path %s', | |||
plug, path) | |||
end | |||
else | |||
rspamd_logger.infox(rspamd_config, 'controller plugin %s; webui path %s has invalid type: %s; ignore it', | |||
plug, path, type(attrs)) | |||
end | |||
end | |||
end |
@@ -0,0 +1,77 @@ | |||
--[[ | |||
Copyright (c) 2020, Vsevolod Stakhov <vsevolod@highsecure.ru> | |||
Licensed under the Apache License, Version 2.0 (the "License"); | |||
you may not use this file except in compliance with the License. | |||
You may obtain a copy of the License at | |||
http://www.apache.org/licenses/LICENSE-2.0 | |||
Unless required by applicable law or agreed to in writing, software | |||
distributed under the License is distributed on an "AS IS" BASIS, | |||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
See the License for the specific language governing permissions and | |||
limitations under the License. | |||
]]-- | |||
local lua_selectors = require "lua_selectors" | |||
-- Controller selectors plugin | |||
local function handle_list_transforms(_, conn) | |||
conn:send_ucl(lua_selectors.list_transforms()) | |||
end | |||
local function handle_list_extractors(_, conn) | |||
conn:send_ucl(lua_selectors.list_extractors()) | |||
end | |||
local function handle_check_selector(_, conn, req_params) | |||
if req_params.selector then | |||
local selector = lua_selectors.create_selector_closure(rspamd_config, | |||
req_params.selector, '', true) | |||
if not selector then | |||
conn:send_error(500, 'invalid selector') | |||
else | |||
conn:send_ucl({success = true}) | |||
end | |||
else | |||
conn:send_error(404, 'missing selector') | |||
end | |||
end | |||
local function handle_check_message(task, conn, req_params) | |||
if req_params.selector then | |||
local selector = lua_selectors.create_selector_closure(rspamd_config, | |||
req_params.selector, '', true) | |||
if not selector then | |||
conn:send_error(500, 'invalid selector') | |||
else | |||
task:process_message() | |||
local elts = selector(task) | |||
conn:send_ucl({success = true, data = elts}) | |||
end | |||
else | |||
conn:send_error(404, 'missing selector') | |||
end | |||
end | |||
return { | |||
list_extractors = { | |||
handler = handle_list_extractors, | |||
enable = true, | |||
}, | |||
list_transforms = { | |||
handler = handle_list_transforms, | |||
enable = true, | |||
}, | |||
check_selector = { | |||
handler = handle_check_selector, | |||
enable = true, | |||
}, | |||
check_message = { | |||
handler = handle_check_message, | |||
enable = true, | |||
need_task = true, | |||
} | |||
} |
@@ -38,6 +38,7 @@ dofile(local_rules .. '/forwarding.lua') | |||
dofile(local_rules .. '/mid.lua') | |||
dofile(local_rules .. '/bitcoin.lua') | |||
dofile(local_rules .. '/content.lua') | |||
dofile(local_rules .. '/controller/init.lua') | |||
if rspamd_util.file_exists(local_conf .. '/rspamd.local.lua') then | |||
dofile(local_conf .. '/rspamd.local.lua') |