diff options
author | Jeija <norrepli@gmail.com> | 2016-02-18 11:38:47 +0100 |
---|---|---|
committer | est31 <MTest31@outlook.com> | 2016-02-22 15:39:41 +0100 |
commit | 31e0667a4a53a238d0321194b57b083bd74c0a5b (patch) | |
tree | 24c049c95a08b82f45dcde77419f50ee3a00639f /builtin | |
parent | a3892f5a6632550bf0c14c18e6902f6ae06bb567 (diff) | |
download | minetest-31e0667a4a53a238d0321194b57b083bd74c0a5b.tar.gz minetest-31e0667a4a53a238d0321194b57b083bd74c0a5b.tar.bz2 minetest-31e0667a4a53a238d0321194b57b083bd74c0a5b.zip |
Add Lua interface to HTTPFetchRequest
This allows mods to perform both asynchronous and synchronous HTTP
requests. Mods are only granted access to HTTP APIs if either mod
security is disabled or if they are whitelisted in any of the
the secure.http_mods and secure.trusted_mods settings.
Adds httpfetch_caller_alloc_secure to generate random, non-predictable
caller IDs so that lua mods cannot spy on each others HTTP queries.
Diffstat (limited to 'builtin')
-rw-r--r-- | builtin/game/misc.lua | 19 | ||||
-rw-r--r-- | builtin/settingtypes.txt | 4 |
2 files changed, 23 insertions, 0 deletions
diff --git a/builtin/game/misc.lua b/builtin/game/misc.lua index bacadf18f..d0e67bd88 100644 --- a/builtin/game/misc.lua +++ b/builtin/game/misc.lua @@ -178,3 +178,22 @@ function core.raillike_group(name) end return id end + +-- HTTP callback interface +function core.http_add_fetch(httpenv) + httpenv.fetch = function(req, callback) + local handle = httpenv.fetch_async(req) + + local function update_http_status() + local res = httpenv.fetch_async_get(handle) + if res.completed then + callback(res) + else + core.after(0, update_http_status) + end + end + core.after(0, update_http_status) + end + + return httpenv +end diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt index c21a0325f..9e1997cc6 100644 --- a/builtin/settingtypes.txt +++ b/builtin/settingtypes.txt @@ -1100,6 +1100,10 @@ secure.enable_security (Enable mod security) bool false # functions even when mod security is on (via request_insecure_environment()). secure.trusted_mods (Trusted mods) string +# Comma-seperated list of mods that are allowed to access HTTP APIs, which +# allow them to upload and download data to/from the internet. +secure.http_mods (HTTP Mods) string + [Client and Server] # Name of the player. |