3 changed files with 142 additions and 0 deletions
@ -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, |
|||
} |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue