diff options
Diffstat (limited to 'modules/luci-base/src/template_lualib.c')
-rw-r--r-- | modules/luci-base/src/template_lualib.c | 49 |
1 files changed, 48 insertions, 1 deletions
diff --git a/modules/luci-base/src/template_lualib.c b/modules/luci-base/src/template_lualib.c index d5c8dd6b4c..45e23966e9 100644 --- a/modules/luci-base/src/template_lualib.c +++ b/modules/luci-base/src/template_lualib.c @@ -1,7 +1,7 @@ /* * LuCI Template - Lua binding * - * Copyright (C) 2009 Jo-Philipp Wich <jow@openwrt.org> + * Copyright (C) 2009-2018 Jo-Philipp Wich <jo@mein.io> * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -110,6 +110,51 @@ int template_L_striptags(lua_State *L) return 0; } +int template_L_urlencode(lua_State *L) +{ + size_t len = 0; + const char *str = luaL_checkstring(L, 1); + char *res = urlencode(str, &len); + + if (res != NULL) + { + lua_pushlstring(L, res, len); + free(res); + + return 1; + } + else if (len == 0) + { + lua_pushvalue(L, 1); + return 1; + } + + return 0; +} + +int template_L_urldecode(lua_State *L) +{ + size_t len = 0; + const char *str = luaL_checkstring(L, 1); + int keep_plus = lua_toboolean(L, 2); + char *res = urldecode(str, &len, keep_plus == 1); + + if (res != NULL) + { + lua_pushlstring(L, res, len); + free(res); + + return 1; + } + else if (len == 0) + { + lua_pushvalue(L, 1); + return 1; + } + + return 0; +} + static int template_L_load_catalog(lua_State *L) { const char *lang = luaL_optstring(L, 1, "en"); const char *dir = luaL_optstring(L, 2, NULL); @@ -165,6 +210,8 @@ static const luaL_reg R[] = { { "utf8", template_L_utf8 }, { "pcdata", template_L_pcdata }, { "striptags", template_L_striptags }, + { "urlencode", template_L_urlencode }, + { "urldecode", template_L_urldecode }, { "load_catalog", template_L_load_catalog }, { "close_catalog", template_L_close_catalog }, { "change_catalog", template_L_change_catalog }, |