Skip to content

Commit

Permalink
feat: add support for local routes in upstream url (#3)
Browse files Browse the repository at this point in the history
Co-authored-by: Dhruv Sarawagi <[email protected]>
  • Loading branch information
dhruvd11 and Dhruv Sarawagi authored Aug 12, 2021
1 parent d661940 commit fb2fd43
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 3 deletions.
22 changes: 20 additions & 2 deletions kong/plugins/advanced-router/handler.lua
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@ local inspect = require("inspect")
local cjson_safe = require "cjson.safe"
local url = require "socket.url"
local date = require "date"
local pl_tablex = require "pl.tablex"

local get_io_data = require("kong.plugins.advanced-router.io").get_io_data
local extract = require("kong.plugins.advanced-router.utils").extract
local replaceStringEnvVariables = require("kong.plugins.advanced-router.utils").replaceStringEnvVariables
local build_url = require("kong.plugins.advanced-router.utils").build_url

local AdvancedRouterHandler = {}

Expand All @@ -14,6 +16,17 @@ AdvancedRouterHandler.VERSION = "1.0.0"

local boolean_functions = {}

local kong_proxy_port

function get_poxy_port()
local http_listener = pl_tablex.filter(kong.configuration.proxy_listeners, function(x)
if not x.ssl then
return true
end
end)
return http_listener[1]['port']
end

function get_current_timestamp_utc()
return date.diff(date(true), date(1970, 1, 1)):spanseconds()
end
Expand All @@ -30,7 +43,8 @@ function generate_boolean_function(proposition)
if proposition['condition'] == 'default' then
return assert(loadstring("return " .. "\"" .. proposition["upstream_url"] .. "\""))
end
return assert(loadstring("if " .. proposition["condition"] .. "then return " .. "\"" .. proposition["upstream_url"] .. "\"" .. " end"))
local upstream_url = build_url(proposition["upstream_url"], kong_proxy_port)
return assert(loadstring("if " .. proposition["condition"] .. "then return " .. "\"" .. upstream_url .. "\"" .. " end"))
end

function get_upstream_url(conf)
Expand Down Expand Up @@ -75,7 +89,7 @@ function set_upstream(upstream_url)
end

function AdvancedRouterHandler:access(conf)
local io_data, err = get_io_data(conf)
local io_data, err = get_io_data(pl_tablex.merge(conf, { kong_proxy_port = kong_proxy_port }, true))
if err then
kong.log.err("Error in getting io data" .. inspect(err))
return kong.response.exit(500, { error = "Error in getting io data" .. inspect(err) })
Expand All @@ -90,6 +104,10 @@ function AdvancedRouterHandler:access(conf)
set_upstream(upstream_url)
end

function AdvancedRouterHandler:init_worker()
kong_proxy_port = get_poxy_port()
end

return AdvancedRouterHandler


3 changes: 2 additions & 1 deletion kong/plugins/advanced-router/io.lua
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ local generate_signature_hash = require("kong.plugins.advanced-router.utils").ge
local extract = require "kong.plugins.advanced-router.utils".extract
local belongs = require "kong.plugins.advanced-router.utils".belongs
local replaceStringEnvVariables = require "kong.plugins.advanced-router.utils".replaceStringEnvVariables
local build_url = require("kong.plugins.advanced-router.utils").build_url

local _M = {}

Expand Down Expand Up @@ -122,7 +123,7 @@ end
function create_io_request(conf)
local io_request = extract_io_data_from_request(conf)
kong.log.debug("conf" .. inspect(conf))
io_request["io_url"] = replaceStringEnvVariables(conf.io_url)
io_request["io_url"] = build_url(replaceStringEnvVariables(conf.io_url), conf.kong_proxy_port)
io_request["io_http_method"] = conf.io_http_method
return io_request
end
Expand Down
10 changes: 10 additions & 0 deletions kong/plugins/advanced-router/utils.lua
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ local pl_utils = require "pl.utils"
local sha256 = require "resty.sha256"
local encode_base64 = ngx.encode_base64
local inspect = require "inspect"
local url = require "socket.url"

local _M = {}

Expand Down Expand Up @@ -55,4 +56,13 @@ function _M.belongs(val, tbl)
return false
end

function _M.build_url(upstream_url, kong_proxy_port)
local parsed_url = url.parse(upstream_url);
if not parsed_url["host"] then
parsed_url["host"] = "localhost"
parsed_url["port"] = kong_proxy_port
end
return url.build(parsed_url)
end

return _M

0 comments on commit fb2fd43

Please sign in to comment.