]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Lua_util: Add jinja2 related functions
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 26 Mar 2019 17:32:34 +0000 (17:32 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 26 Mar 2019 17:32:34 +0000 (17:32 +0000)
.luacheckrc
lualib/lua_util.lua

index 7d5c6745e2b2f1a2f7029fa034f9d231aee11cf5..77421fb591ec749e3aad888da90a4cb4fd731eac 100644 (file)
@@ -22,6 +22,7 @@ globals = {
   'rspamd_gen_metatokens',
   'rspamd_parse_redis_server',
   'rspamd_paths',
+  'rspamd_env',
   'rspamd_plugins',
   'rspamd_redis_make_request',
   'rspamd_str_split',
index 8d7f2bd69392273513561a184c0ccc73e746dc77..0ae18a22e80096375f588fdc579f49f542209e56 100644 (file)
@@ -113,6 +113,55 @@ exports.template = function(tmpl, keys)
   return lpeg.match(template_grammar, tmpl)
 end
 
+local function enrich_template_with_globals(env)
+  local newenv = exports.shallowcopy(env)
+  newenv.paths = rspamd_paths
+  newenv.env = rspamd_env
+
+  return newenv
+end
+--[[[
+-- @function lua_util.jinja_template(text, env[, skip_global_env])
+-- Replaces values in a text template according to jinja2 syntax
+-- @param {string} text text containing variables
+-- @param {table} replacements key/value pairs for replacements
+-- @param {boolean} skip_global_env don't export Rspamd superglobals
+-- @return {string} string containing replaced values
+-- @example
+-- lua_util.jinja_template("HELLO {{FOO}} {{BAR}}!", {['FOO'] = 'LUA', ['BAR'] = 'WORLD'})
+-- "HELLO LUA WORLD!"
+--]]
+exports.jinja_template = function(text, env, skip_global_env)
+  local lupa = require "lupa"
+
+  if not skip_global_env then
+    env = enrich_template_with_globals(env)
+  end
+
+  return lupa.expand(text, env)
+end
+
+--[[[
+-- @function lua_util.jinja_file(filename, env[, skip_global_env])
+-- Replaces values in a text template according to jinja2 syntax
+-- @param {string} filename name of file to expand
+-- @param {table} replacements key/value pairs for replacements
+-- @param {boolean} skip_global_env don't export Rspamd superglobals
+-- @return {string} string containing replaced values
+-- @example
+-- lua_util.jinja_template("HELLO {{FOO}} {{BAR}}!", {['FOO'] = 'LUA', ['BAR'] = 'WORLD'})
+-- "HELLO LUA WORLD!"
+--]]
+exports.jinja_template_file = function(filename, env, skip_global_env)
+  local lupa = require "lupa"
+
+  if not skip_global_env then
+    env = enrich_template_with_globals(env)
+  end
+
+  return lupa.expand_file(filename, env)
+end
+
 exports.remove_email_aliases = function(email_addr)
   local function check_gmail_user(addr)
     -- Remove all points