summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/lua_api.txt4
-rw-r--r--doc/menu_lua_api.txt4
-rw-r--r--src/script/lua_api/l_util.cpp35
-rw-r--r--src/script/lua_api/l_util.h6
4 files changed, 49 insertions, 0 deletions
diff --git a/doc/lua_api.txt b/doc/lua_api.txt
index 593e0c438..01763fd73 100644
--- a/doc/lua_api.txt
+++ b/doc/lua_api.txt
@@ -2438,6 +2438,10 @@ These functions return the leftover itemstack.
* See documentation on `minetest.compress()` for supported compression methods.
* currently supported.
* `...` indicates method-specific arguments. Currently, no methods use this.
+* `minetest.encode_base64(string)`: returns string encoded in base64
+ * Encodes a string in base64.
+* `minetest.decode_base64(string)`: returns string
+ * Decodes a string encoded in base64.
* `minetest.is_protected(pos, name)`: returns boolean
* Returns true, if player `name` shouldn't be abled to dig at `pos` or do other
actions, defineable by mods, due to some mod-defined ownership-like concept.
diff --git a/doc/menu_lua_api.txt b/doc/menu_lua_api.txt
index ac8713a32..479880266 100644
--- a/doc/menu_lua_api.txt
+++ b/doc/menu_lua_api.txt
@@ -210,6 +210,10 @@ string:trim()
^ eg. string.trim("\n \t\tfoo bar\t ") == "foo bar"
core.is_yes(arg) (possible in async calls)
^ returns whether arg can be interpreted as yes
+minetest.encode_base64(string) (possible in async calls)
+^ Encodes a string in base64.
+minetest.decode_base64(string) (possible in async calls)
+^ Decodes a string encoded in base64.
Version compat:
core.get_min_supp_proto()
diff --git a/src/script/lua_api/l_util.cpp b/src/script/lua_api/l_util.cpp
index c3e6c8964..e90b7fbcf 100644
--- a/src/script/lua_api/l_util.cpp
+++ b/src/script/lua_api/l_util.cpp
@@ -32,6 +32,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "filesys.h"
#include "settings.h"
#include "util/auth.h"
+#include "util/base64.h"
#include <algorithm>
// log([level,] text)
@@ -320,6 +321,34 @@ int ModApiUtil::l_decompress(lua_State *L)
return 1;
}
+// encode_base64(string)
+int ModApiUtil::l_encode_base64(lua_State *L)
+{
+ NO_MAP_LOCK_REQUIRED;
+
+ size_t size;
+ const char *data = luaL_checklstring(L, 1, &size);
+
+ std::string out = base64_encode((const unsigned char *)(data), size);
+
+ lua_pushlstring(L, out.data(), out.size());
+ return 1;
+}
+
+// decode_base64(string)
+int ModApiUtil::l_decode_base64(lua_State *L)
+{
+ NO_MAP_LOCK_REQUIRED;
+
+ size_t size;
+ const char *data = luaL_checklstring(L, 1, &size);
+
+ std::string out = base64_decode(std::string(data, size));
+
+ lua_pushlstring(L, out.data(), out.size());
+ return 1;
+}
+
// mkdir(path)
int ModApiUtil::l_mkdir(lua_State *L)
{
@@ -433,6 +462,9 @@ void ModApiUtil::Initialize(lua_State *L, int top)
API_FCT(get_dir_list);
API_FCT(request_insecure_environment);
+
+ API_FCT(encode_base64);
+ API_FCT(decode_base64);
}
void ModApiUtil::InitializeAsync(AsyncEngine& engine)
@@ -459,5 +491,8 @@ void ModApiUtil::InitializeAsync(AsyncEngine& engine)
ASYNC_API_FCT(mkdir);
ASYNC_API_FCT(get_dir_list);
+
+ ASYNC_API_FCT(encode_base64);
+ ASYNC_API_FCT(decode_base64);
}
diff --git a/src/script/lua_api/l_util.h b/src/script/lua_api/l_util.h
index 6fac7e7eb..779dbe281 100644
--- a/src/script/lua_api/l_util.h
+++ b/src/script/lua_api/l_util.h
@@ -95,6 +95,12 @@ private:
// request_insecure_environment()
static int l_request_insecure_environment(lua_State *L);
+ // encode_base64(string)
+ static int l_encode_base64(lua_State *L);
+
+ // decode_base64(string)
+ static int l_decode_base64(lua_State *L);
+
public:
static void Initialize(lua_State *L, int top);