ceph/examples/rgw-cache/nginx-lua-file.lua
Mark Kogan 6251d2b6c1 rgw: add PUT and POST req support to data cache
facilitates the full usage of the Nginx cache endpoint
with s3 tools that support AWSv4
like s3cmd,aws-cli, benchmarking tools like hsbench
and also hadoop/s3a.

Co-authored-by: Or Friedmann <ofriedma@redhat.com>
Signed-off-by: Mark Kogan <mkogan@redhat.com>
2020-07-21 15:23:57 +03:00

27 lines
1.1 KiB
Lua

local check = ngx.req.get_headers()["AUTHORIZATION"]
local uri = ngx.var.request_uri
local ngx_re = require "ngx.re"
local hdrs = ngx.req.get_headers()
--Take all signedheaders names, this for creating the X-Amz-Cache which is necessary to override range header to be able to readahead an object
local res, err = ngx_re.split(check,"SignedHeaders=")
local res2, err2 = ngx_re.split(res[2],",")
local res3, err3 = ngx_re.split(res2[1],";")
local t = {}
local concathdrs = string.char(0x00)
for i = 1, #res3, 1 do
if hdrs[res3[i]] ~= nil then
--0xB1 is the separator between header name and value
t[i] = res3[i] .. string.char(0xB1) .. hdrs[res3[i]]
--0xB2 is the separator between headers
concathdrs = concathdrs .. string.char(0xB2) .. t[i]
end
end
-- check if the authorization header is not empty
if check ~= nil then
local xamzcache = concathdrs:sub(2)
xamzcache = xamzcache .. string.char(0xB2) .. "Authorization" .. string.char(0xB1) .. check
if xamzcache:find("aws4_request") ~= nil and uri ~= "/" and uri:find("?") == nil and hdrs["if-match"] == nil then
ngx.var.authvar = xamzcache
end
end