mirror of
https://github.com/ceph/ceph
synced 2024-12-25 04:43:17 +00:00
6251d2b6c1
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>
27 lines
1.1 KiB
Lua
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
|