]> source.dussan.org Git - rspamd.git/commitdiff
[Feature] Allow to select settings by id in HTTP query
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 29 Mar 2016 14:29:51 +0000 (15:29 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 29 Mar 2016 14:29:51 +0000 (15:29 +0100)
src/plugins/lua/settings.lua

index 621e33a2bc51a3597cbb4a489aa41085890ae323..5b27d4b667e7b765fd03f7c4fc75f3c9d69ab110 100644 (file)
@@ -25,6 +25,7 @@ local settings = {
   [2] = {},
   [3] = {}
 }
+local settings_ids = {}
 local settings_initialized = false
 local max_pri = 0
 local rspamd_logger = require "rspamd_logger"
@@ -73,6 +74,16 @@ local function check_query_settings(task)
     end
   end
 
+  local settings_id = task:get_request_header('settings-id')
+  if settings_id and settings_initialized then
+    local elt = settings_ids[settings_id]
+    if elt and elt['apply'] then
+      task:set_settings(elt['apply'])
+
+      return true
+    end
+  end
+
   return false
 end
 
@@ -398,6 +409,11 @@ local function process_settings_table(tbl)
 
     -- Now we must process actions
     if elt['symbols'] then out['symbols'] = elt['symbols'] end
+    if elt['id'] then
+      out['id'] = elt['id']
+      settings[elt['id']] = out
+    end
+
     if elt['apply'] then
       -- Just insert all metric results to the action key
       out['apply'] = elt['apply']
@@ -424,6 +440,7 @@ local function process_settings_table(tbl)
   -- clear all settings
   max_pri = 0
   local nrules = 0
+  settings_ids = {}
   for k,v in pairs(settings) do settings[k]={} end
   -- fill new settings by priority
   for_each(function(k, v)