47 lines
991 B
Lua
47 lines
991 B
Lua
local _M = { version = 0.2 }
|
|
|
|
local function get_client_ip(stream)
|
|
local ip = stream:downstreamLocalAddress()
|
|
if ip then
|
|
return ip
|
|
end
|
|
|
|
ip = stream:downstreamDirectRemoteAddress()
|
|
if ip then
|
|
return ip
|
|
end
|
|
end
|
|
|
|
function _M.set_vars_meta(handle)
|
|
local stream = handle:streamInfo()
|
|
local meta = stream:dynamicMetadata()
|
|
|
|
local var = {}
|
|
var._cache = meta:get("envoy.filters.http.lua") or {}
|
|
var.remote_addr = get_client_ip(stream)
|
|
|
|
setmetatable(var, {
|
|
__index = function(self, key)
|
|
local cached = self._cache[key]
|
|
if cached ~= nil then
|
|
return cached
|
|
end
|
|
|
|
return nil
|
|
end,
|
|
|
|
__newindex = function(self, key, val)
|
|
meta:set("envoy.filters.http.lua", key, val)
|
|
self._cache[key] = val
|
|
end,
|
|
|
|
__pairs = function (self)
|
|
return next, self._cache, nil
|
|
end,
|
|
})
|
|
|
|
return var
|
|
end
|
|
|
|
return _M
|