]> source.dussan.org Git - rspamd.git/commitdiff
Add documentation for lua_config.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 30 Aug 2014 17:37:42 +0000 (10:37 -0700)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 30 Aug 2014 17:37:42 +0000 (10:37 -0700)
doc/Makefile
src/lua/lua_config.c

index 0849e406faf25d82fc74f0212a1b3a41d41a3168..55947cb19e39518ac0b0565092353f41d785eaab 100644 (file)
@@ -12,9 +12,11 @@ rspamd.8: rspamd.8.md
 rspamc.1: rspamc.1.md
        $(PANDOC) -s -f markdown -t man -o rspamc.1 rspamc.1.md 
        
-lua-doc: lua_regexp lua_ip
+lua-doc: lua_regexp lua_ip lua_config
 
 lua_regexp: ../src/lua/lua_regexp.c
        $(LUADOC) < ../src/lua/lua_regexp.c > markdown/lua/regexp.md
 lua_ip: ../src/lua/lua_ip.c
        $(LUADOC) < ../src/lua/lua_ip.c > markdown/lua/ip.md
+lua_config: ../src/lua/lua_config.c
+       $(LUADOC) < ../src/lua/lua_config.c > markdown/lua/config.md
index d0bc53d99a5a7368f07f4bc541f03675d5ba1c7b..e1b0b4f385aacbac7f9a1f3eee1001075589548d 100644 (file)
 #include "trie.h"
 #include "classifiers/classifiers.h"
 
+/***
+ * This module is used to configure rspamd and is normally available as global
+ * variable named `rspamd_config`. Unlike other modules, it is not necessary to
+ * require it before usage.
+ * @module rspamd_config
+ * @example
+-- Register some callback symbol
+local function foo(task)
+    -- do something
+end
+rspamd_config:register_symbol('SYMBOL', 1.0, foo)
+
+-- Get configuration
+local tab = rspamd_config:get_all_opt('module') -- get table for module's options
+local opts = rspamd_config:get_key('options') -- get content of the specified key in rspamd configuration
+ */
+
 /* Config file methods */
+/***
+ * @method rspamd_config:get_module_opt(mname, optname)
+ * Returns value of specified option `optname` for a module `mname`,
+ * @param {string} mname name of module
+ * @param {string} optname option to get
+ * @return {string or table} value of the option or `nil` if option is not found
+ */
 LUA_FUNCTION_DEF (config, get_module_opt);
+/***
+ * @method rspamd_config:get_all_opt(mname)
+ * Returns value of all options for a module `mname`,
+ * @param {string} mname name of module
+ * @return {table} table of all options for `mname` or `nil` if a module's configuration is not found
+ */
 LUA_FUNCTION_DEF (config, get_all_opt);
+/***
+ * @method rspamd_config:get_mempool()
+ * Returns static configuration memory pool.
+ * @return {mempool} [memory pool](mempool.md) object
+ */
 LUA_FUNCTION_DEF (config, get_mempool);
+/***
+ * @method rspamd_config:register_function(name, callback)
+ * Registers new rspamd function that could be used in symbols expressions
+ * @param {string} name name of function
+ * @param {function} callback callback to be called
+ * @example
+
+local function lua_header_exists(task, hname)
+       if task:get_raw_header(hname) then
+               return true
+       end
+
+       return false
+end
+
+rspamd_config:register_function('lua_header_exists', lua_header_exists)
+
+-- Further in configuration it would be possible to define symbols like:
+-- HAS_CONTENT_TYPE = 'lua_header_exists(Content-Type)'
+ */
 LUA_FUNCTION_DEF (config, register_function);
+/***
+ * @method rspamd_config:add_radix_map(mapline[, description])
+ * Creates new dynamic map of IP/mask addresses.
+ * @param {string} mapline URL for a map
+ * @param {string} description optional map description
+ * @return {radix} radix tree object
+ * @example
+local ip_map = rspamd_config:add_radix_map ('file:///path/to/file', 'my radix map')
+...
+local function foo(task)
+       local ip = task:get_from_ip()
+       if ip_map:get_key(ip) then
+               return true
+       end
+       return false
+end
+ */
 LUA_FUNCTION_DEF (config, add_radix_map);
+/***
+ * @method rspamd_config:add_hash_map(mapline[, description])
+ * Creates new dynamic map string objects.
+ * @param {string} mapline URL for a map
+ * @param {string} description optional map description
+ * @return {hash} hash set object
+ * @example
+local hash_map = rspamd_config:add_hash_map ('file:///path/to/file', 'my hash map')
+...
+local function foo(task)
+       local from = task:get_from()
+       if hash_map:get_key(from['user']) then
+               return true
+       end
+       return false
+end
+ */
 LUA_FUNCTION_DEF (config, add_hash_map);
+/***
+ * @method rspamd_config:add_kv_map(mapline[, description])
+ * Creates new dynamic map of key/values associations.
+ * @param {string} mapline URL for a map
+ * @param {string} description optional map description
+ * @return {hash} hash table object
+ * @example
+local kv_map = rspamd_config:add_kv_map ('file:///path/to/file', 'my kv map')
+...
+local function foo(task)
+       local from = task:get_from()
+       if from then
+               local value = kv_map:get_key(from['user'])
+               if value then
+                       return true,value
+               end
+       end
+       return false
+end
+ */
 LUA_FUNCTION_DEF (config, add_kv_map);
+/***
+ * @method rspamd_config:add_map(mapline[, description], callback)
+ * Creates new dynamic map with free-form callback
+ * @param {string} mapline URL for a map
+ * @param {string} description optional map description
+ * @param {function} callback function to be called on map load and/or update
+ * @return {bool} `true` if map has been added
+ * @example
+
+local str = ''
+local function process_map(in)
+       str = in
+end
+
+rspamd_config:add_map('http://example.com/map', "settings map", process_map)
+ */
 LUA_FUNCTION_DEF (config, add_map);
+/***
+ * @method rspamd_config:get_classifier(name)
+ * Returns classifier config.
+ * @param {string} name name of classifier (e.g. `bayes`)
+ * @return {classifier} classifier object or `nil`
+ */
 LUA_FUNCTION_DEF (config, get_classifier);
+/***
+ * @method rspamd_config:register_symbol(name, weight, callback)
+ * Register callback function to be called for a specified symbol with initial weight.
+ * @param {string} name symbol's name
+ * @param {number} weight initial weight of symbol (can be less than zero to specify non-spam symbols)
+ * @param {function} callback callback function to be called for a specified symbol
+ */
 LUA_FUNCTION_DEF (config, register_symbol);
+/***
+ * @method rspamd_config:register_symbols(weight, callback, symbol[, symbol, ...])
+ * Register callback function to be called for a set of symbols with initial weight.
+ * @param {number} weight initial weight of symbol (can be less than zero to specify non-spam symbols)
+ * @param {function} callback callback function to be called for a specified symbol
+ * @param {list of strings} symbol list of symbols registered by this function
+ */
 LUA_FUNCTION_DEF (config, register_symbols);
+/***
+ * @method rspamd_config:register_virtual_symbol(name, weight,)
+ * Register virtual symbol that is not associated with any callback.
+ * @param {string} virtual name symbol's name
+ * @param {number} weight initial weight of symbol (can be less than zero to specify non-spam symbols)
+ */
 LUA_FUNCTION_DEF (config, register_virtual_symbol);
+/***
+ * @method rspamd_config:register_callback_symbol(name, weight, callback)
+ * Register callback function to be called for a specified symbol with initial weight. Symbol itself is
+ * not registered in the metric and is not intended to be visible by a user.
+ * @param {string} name symbol's name (just for unique id purposes)
+ * @param {number} weight initial weight of symbol (can be less than zero to specify non-spam symbols)
+ * @param {function} callback callback function to be called for a specified symbol
+ */
 LUA_FUNCTION_DEF (config, register_callback_symbol);
 LUA_FUNCTION_DEF (config, register_callback_symbol_priority);
+/***
+ * @method rspamd_config:register_pre_filter(callback)
+ * Register function to be called prior to symbols processing.
+ * @param {function} callback callback function
+ * @example
+local function check_function(task)
+       -- It is possible to manipulate the task object here: set settings, set pre-action and so on
+       ...
+end
+
+rspamd_config:register_pre_filter(check_function)
+ */
 LUA_FUNCTION_DEF (config, register_pre_filter);
+/***
+ * @method rspamd_config:register_pre_filter(callback)
+ * Register function to be called after symbols are processed.
+ * @param {function} callback callback function
+ */
 LUA_FUNCTION_DEF (config, register_post_filter);
+/* XXX: obsoleted */
 LUA_FUNCTION_DEF (config, register_module_option);
+/* XXX: not needed now */
 LUA_FUNCTION_DEF (config, get_api_version);
+/***
+ * @method rspamd_config:get_key(name)
+ * Returns configuration section with the specified `name`.
+ * @param {string} name name of config section
+ * @return {variant} specific value of section
+ * @example
+
+local set_section = rspamd_config:get_key("settings")
+if type(set_section) == "string" then
+  -- Just a map of ucl
+  if rspamd_config:add_map(set_section, "settings map", process_settings_map) then
+    rspamd_config:register_pre_filter(check_settings)
+  end
+elseif type(set_section) == "table" then
+  if process_settings_table(set_section) then
+    rspamd_config:register_pre_filter(check_settings)
+  end
+end
+ */
 LUA_FUNCTION_DEF (config, get_key);
+/***
+ * @method rspamd_config:__newindex(name, callback)
+ * This metamethod is called if new indicies are added to the `rspamd_config` object.
+ * Technically, it is the equialent of @see rspamd_config:register_symbol where `weight` is 1.0.
+ * @param {string} name index name
+ * @param {function} callback callback to be called
+ * @example
+rspamd_config.R_EMPTY_IMAGE = function (task)
+       parts = task:get_text_parts()
+       if parts then
+               for _,part in ipairs(parts) do
+                       if part:is_empty() then
+                               images = task:get_images()
+                               if images then
+                                       -- Symbol `R_EMPTY_IMAGE` is inserted
+                                       return true
+                               end
+                               return false
+                       end
+               end
+       end
+       return false
+end
+ */
 LUA_FUNCTION_DEF (config, newindex);
 
 static const struct luaL_reg configlib_m[] = {