From 9849dfadb597e7def4e415ec9aa144071cdd5d1c Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Thu, 23 Jul 2015 14:12:14 +0100 Subject: [PATCH] Start LUA API for HTML parts. --- src/lua/CMakeLists.txt | 3 ++- src/lua/lua_common.c | 1 + src/lua/lua_common.h | 1 + src/lua/lua_html.c | 61 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 src/lua/lua_html.c diff --git a/src/lua/CMakeLists.txt b/src/lua/CMakeLists.txt index d1407c7a4..ad526d534 100644 --- a/src/lua/CMakeLists.txt +++ b/src/lua/CMakeLists.txt @@ -22,6 +22,7 @@ SET(LUASRC ${CMAKE_CURRENT_SOURCE_DIR}/lua_common.c ${CMAKE_CURRENT_SOURCE_DIR}/lua_mimepart.c ${CMAKE_CURRENT_SOURCE_DIR}/lua_url.c ${CMAKE_CURRENT_SOURCE_DIR}/lua_util.c - ${CMAKE_CURRENT_SOURCE_DIR}/lua_tcp.c) + ${CMAKE_CURRENT_SOURCE_DIR}/lua_tcp.c + ${CMAKE_CURRENT_SOURCE_DIR}/lua_html.c) SET(RSPAMD_LUA ${LUASRC} PARENT_SCOPE) \ No newline at end of file diff --git a/src/lua/lua_common.c b/src/lua/lua_common.c index c2c54dbe1..59a78d873 100644 --- a/src/lua/lua_common.c +++ b/src/lua/lua_common.c @@ -237,6 +237,7 @@ rspamd_lua_init (struct rspamd_config *cfg) luaopen_text (L); luaopen_util (L); luaopen_tcp (L); + luaopen_html (L); rspamd_lua_add_preload (L, "ucl", luaopen_ucl); diff --git a/src/lua/lua_common.h b/src/lua/lua_common.h index 60bb6e446..152321373 100644 --- a/src/lua/lua_common.h +++ b/src/lua/lua_common.h @@ -214,6 +214,7 @@ void luaopen_logger (lua_State * L); void luaopen_text (lua_State *L); void luaopen_util (lua_State * L); void luaopen_tcp (lua_State * L); +void luaopen_html (lua_State * L); gint rspamd_lua_call_filter (const gchar *function, struct rspamd_task *task); gint rspamd_lua_call_chain_filter (const gchar *function, diff --git a/src/lua/lua_html.c b/src/lua/lua_html.c new file mode 100644 index 000000000..94bd7b982 --- /dev/null +++ b/src/lua/lua_html.c @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2015, Vsevolod Stakhov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY AUTHOR ''AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +#include "lua_common.h" +#include "message.h" +#include "html.h" +#include "images.h" + +/*** + * @module rspamd_html + * This module provides different methods to access HTML tags. To get HTML context + * from an HTML part you could use method `part:get_html()` + * @example +rspamd_config.R_HTML_IMAGE = function (task) + parts = task:get_text_parts() + if parts then + for _,part in ipairs(parts) do + if part:is_html() then + local html = part:get_html() + -- Do something with html + end + end + end + return false +end + */ + +static const struct luaL_reg htmllib_m[] = { + {"__tostring", rspamd_lua_class_tostring}, + {NULL, NULL} +}; + + +void +luaopen_html (lua_State * L) +{ + rspamd_lua_new_class (L, "rspamd{html}", htmllib_m); + lua_pop (L, 1); +} -- 2.39.5