]> source.dussan.org Git - rspamd.git/commitdiff
[Feature] Lua_config: Extend get symbols method
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 24 Jun 2019 16:12:00 +0000 (17:12 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 24 Jun 2019 16:12:00 +0000 (17:12 +0100)
src/lua/lua_config.c

index 8948dd3aeea47a853c45830e29db8b8b63fe1fbf..15505530a621dc617c486b3e0885dfec2d92d91b 100644 (file)
@@ -622,11 +622,18 @@ LUA_FUNCTION_DEF (config, get_symbols_cksum);
 LUA_FUNCTION_DEF (config, get_symbols_counters);
 
 /***
- * @method rspamd_config:get_symbols_scores()
- * Returns table of all scores defined in config
+ * @method rspamd_config:get_symbols()
+ * Returns table of all scores defined in config. From version 2.0 returns table:
+ * - name
+ * - score
+ * - flags (e.g. `ignore` or `oneparam`)
+ * - nshots (== maxhits)
+ * - group - main group
+ * - groups - array of all groups
+ * @available 2.0+
  * @return {table|tables} all symbols indexed by name
  */
-LUA_FUNCTION_DEF (config, get_symbols_scores);
+LUA_FUNCTION_DEF (config, get_symbols);
 
 /***
  * @method rspamd_config:get_symbol_callback(name)
@@ -855,7 +862,8 @@ static const struct luaL_reg configlib_m[] = {
        LUA_INTERFACE_DEF (config, get_symbols_count),
        LUA_INTERFACE_DEF (config, get_symbols_cksum),
        LUA_INTERFACE_DEF (config, get_symbols_counters),
-       LUA_INTERFACE_DEF (config, get_symbols_scores),
+       {"get_symbols_scores", lua_config_get_symbols},
+       LUA_INTERFACE_DEF (config, get_symbols),
        LUA_INTERFACE_DEF (config, get_symbol_callback),
        LUA_INTERFACE_DEF (config, set_symbol_callback),
        LUA_INTERFACE_DEF (config, get_symbol_stat),
@@ -3244,10 +3252,12 @@ lua_metric_symbol_inserter (gpointer k, gpointer v, gpointer ud)
        lua_State *L = (lua_State *) ud;
        const gchar *sym = k;
        struct rspamd_symbol *s = (struct rspamd_symbol *) v;
+       struct rspamd_symbols_group *gr;
+       gint i;
 
-       lua_pushstring (L, sym);
+       lua_pushstring (L, sym); /* Symbol name */
 
-       lua_createtable (L, 0, 3); /* TODO: add more if needed */
+       lua_createtable (L, 0, 6);
        lua_pushstring (L, "score");
        lua_pushnumber (L, s->score);
        lua_settable (L, -3);
@@ -3255,11 +3265,52 @@ lua_metric_symbol_inserter (gpointer k, gpointer v, gpointer ud)
        lua_pushstring (L, s->description);
        lua_settable (L, -3);
 
+       lua_pushstring (L, "flags");
+       lua_createtable (L, 0, 3);
+
+       if (s->flags & RSPAMD_SYMBOL_FLAG_IGNORE) {
+               lua_pushstring (L, "ignore");
+               lua_pushboolean (L, true);
+               lua_settable (L, -3);
+       }
+       if (s->flags & RSPAMD_SYMBOL_FLAG_ONEPARAM) {
+               lua_pushstring (L, "oneparam");
+               lua_pushboolean (L, true);
+               lua_settable (L, -3);
+       }
+       if (s->flags & RSPAMD_SYMBOL_FLAG_UNGROUPPED) {
+               lua_pushstring (L, "ungroupped");
+               lua_pushboolean (L, true);
+               lua_settable (L, -3);
+       }
+
+       lua_settable (L, -3); /* Flags -> flags_table */
+
+       lua_pushstring (L, "nshots");
+       lua_pushinteger (L, s->nshots);
        lua_settable (L, -3);
+
+       if (s->gr) {
+               lua_pushstring (L, "group");
+               lua_pushstring (L, s->gr->name);
+               lua_settable (L, -3);
+       }
+
+       lua_pushstring (L, "groups");
+       lua_createtable (L, s->groups->len, 0);
+
+       PTR_ARRAY_FOREACH (s->groups, i, gr) {
+               lua_pushstring (L, gr->name);
+               lua_rawseti (L, -2, i + 1); /* Groups[i + 1] = group_name */
+       }
+
+       lua_settable (L, -3); /* Groups -> groups_table */
+
+       lua_settable (L, -3); /* Symname -> table */
 }
 
 static gint
-lua_config_get_symbols_scores (lua_State *L)
+lua_config_get_symbols (lua_State *L)
 {
        LUA_TRACE_POINT;
        struct rspamd_config *cfg = lua_check_config (L, 1);