68 lines
1.6 KiB
Lua
68 lines
1.6 KiB
Lua
-- this is the Lua representation of Configuration struct in internal/ingress/types.go
|
|
local configuration_data = ngx.shared.configuration_data
|
|
|
|
local _M = {
|
|
nameservers = {}
|
|
}
|
|
|
|
function _M.get_backends_data()
|
|
return configuration_data:get("backends")
|
|
end
|
|
|
|
local function fetch_request_body()
|
|
ngx.req.read_body()
|
|
local body = ngx.req.get_body_data()
|
|
|
|
if not body then
|
|
-- request body might've been written to tmp file if body > client_body_buffer_size
|
|
local file_name = ngx.req.get_body_file()
|
|
local file = io.open(file_name, "rb")
|
|
|
|
if not file then
|
|
return nil
|
|
end
|
|
|
|
body = file:read("*all")
|
|
file:close()
|
|
end
|
|
|
|
return body
|
|
end
|
|
|
|
function _M.call()
|
|
if ngx.var.request_method ~= "POST" and ngx.var.request_method ~= "GET" then
|
|
ngx.status = ngx.HTTP_BAD_REQUEST
|
|
ngx.print("Only POST and GET requests are allowed!")
|
|
return
|
|
end
|
|
|
|
if ngx.var.request_uri ~= "/configuration/backends" then
|
|
ngx.status = ngx.HTTP_NOT_FOUND
|
|
ngx.print("Not found!")
|
|
return
|
|
end
|
|
|
|
if ngx.var.request_method == "GET" then
|
|
ngx.status = ngx.HTTP_OK
|
|
ngx.print(_M.get_backends_data())
|
|
return
|
|
end
|
|
|
|
local backends = fetch_request_body()
|
|
if not backends then
|
|
ngx.log(ngx.ERR, "dynamic-configuration: unable to read valid request body")
|
|
ngx.status = ngx.HTTP_BAD_REQUEST
|
|
return
|
|
end
|
|
|
|
local success, err = configuration_data:set("backends", backends)
|
|
if not success then
|
|
ngx.log(ngx.ERR, "dynamic-configuration: error updating configuration: " .. tostring(err))
|
|
ngx.status = ngx.HTTP_BAD_REQUEST
|
|
return
|
|
end
|
|
|
|
ngx.status = ngx.HTTP_CREATED
|
|
end
|
|
|
|
return _M
|