Working and debianized
This commit is contained in:
commit
1d43131855
5
Makefile
Normal file
5
Makefile
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
build:
|
||||||
|
luac5.1 -o swift swift.lua
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f swift
|
17
README.md
Normal file
17
README.md
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
# nginx-lua-swift
|
||||||
|
|
||||||
|
## Sample nginx configuration
|
||||||
|
|
||||||
|
```
|
||||||
|
location ~ /ceph(.*)$ {
|
||||||
|
set $path $1;
|
||||||
|
|
||||||
|
content_by_lua_file "/etc/nginx/lua/swift";
|
||||||
|
|
||||||
|
error_page 404 @404;
|
||||||
|
}
|
||||||
|
|
||||||
|
location @404 {
|
||||||
|
echo 'Do what you want';
|
||||||
|
}
|
||||||
|
```
|
5
debian/changelog
vendored
Normal file
5
debian/changelog
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
nginx-lua-swift (0.1-1) jessie; urgency=low
|
||||||
|
|
||||||
|
* Initial release
|
||||||
|
|
||||||
|
-- Denis Zheleztsov <difrex.punk@gmail.com> Wed, 02 Mar 2016 11:09:52 +0300
|
1
debian/compat
vendored
Normal file
1
debian/compat
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
9
|
12
debian/control
vendored
Normal file
12
debian/control
vendored
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
Source: nginx-lua-swift
|
||||||
|
Section: web
|
||||||
|
Priority: optional
|
||||||
|
Maintainer: Denis Zheleztsov <difrex.punk@gmail.com>
|
||||||
|
Build-Depends: debhelper (>= 9)
|
||||||
|
Standards-Version: 3.9.5
|
||||||
|
Vcs-Git: https://github.com/Difrex/nginx-lua-swift.git
|
||||||
|
|
||||||
|
Package: nginx-lua-swift
|
||||||
|
Architecture: amd64
|
||||||
|
Depends: nginx-extras, lua-cjson
|
||||||
|
Description: Nginx lua module to get objects from Swift storage
|
34
debian/copyright
vendored
Normal file
34
debian/copyright
vendored
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||||
|
Upstream-Name: nginx-lua-swift
|
||||||
|
Source: https://github.com/Difrex/nginx-lua-swift.git
|
||||||
|
|
||||||
|
Files: *
|
||||||
|
Copyright: 2016 Denis Zheleztsov <difrex.punk@gmail.com>
|
||||||
|
License: BSD 3-clause
|
||||||
|
Copyright (c) 2016, Denis Zheleztsov <difrex.punk@gmail.com>
|
||||||
|
All rights reserved.
|
||||||
|
.
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
.
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
.
|
||||||
|
* Neither the name of nginx-lua-swift nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived from
|
||||||
|
this software without specific prior written permission.
|
||||||
|
.
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
|
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
2
debian/docs
vendored
Normal file
2
debian/docs
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
README.md
|
||||||
|
nginx.sample
|
2
debian/nginx-lua-swift.install
vendored
Normal file
2
debian/nginx-lua-swift.install
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
swift etc/nginx/lua
|
||||||
|
swift.json etc/nginx/etc
|
38
debian/rules
vendored
Executable file
38
debian/rules
vendored
Executable file
@ -0,0 +1,38 @@
|
|||||||
|
#!/usr/bin/make -f
|
||||||
|
# See debhelper(7) (uncomment to enable)
|
||||||
|
# output every command that modifies files on the build system.
|
||||||
|
#DH_VERBOSE = 1
|
||||||
|
|
||||||
|
# see EXAMPLES in dpkg-buildflags(1) and read /usr/share/dpkg/*
|
||||||
|
DPKG_EXPORT_BUILDFLAGS = 1
|
||||||
|
include /usr/share/dpkg/default.mk
|
||||||
|
|
||||||
|
# see FEATURE AREAS in dpkg-buildflags(1)
|
||||||
|
#export DEB_BUILD_MAINT_OPTIONS = hardening=+all
|
||||||
|
|
||||||
|
# see ENVIRONMENT in dpkg-buildflags(1)
|
||||||
|
# package maintainers to append CFLAGS
|
||||||
|
#export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic
|
||||||
|
# package maintainers to append LDFLAGS
|
||||||
|
#export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed
|
||||||
|
|
||||||
|
|
||||||
|
override_dh_auto_clean:
|
||||||
|
make clean
|
||||||
|
|
||||||
|
override_dh_auto_build:
|
||||||
|
make build
|
||||||
|
|
||||||
|
# main packaging script based on dh7 syntax
|
||||||
|
%:
|
||||||
|
dh $@
|
||||||
|
|
||||||
|
# debmake generated override targets
|
||||||
|
# This is example for Cmake (See http://bugs.debian.org/641051 )
|
||||||
|
#override_dh_auto_configure:
|
||||||
|
# dh_auto_configure -- \
|
||||||
|
# -DCMAKE_LIBRARY_PATH=$(DEB_HOST_MULTIARCH)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
16
nginx.sample
Normal file
16
nginx.sample
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
server {
|
||||||
|
listen 9999;
|
||||||
|
server_name _;
|
||||||
|
|
||||||
|
location ~ /ceph(.*)$ {
|
||||||
|
set $path $1;
|
||||||
|
|
||||||
|
content_by_lua_file "/etc/nginx/lua/swift.lua";
|
||||||
|
|
||||||
|
error_page 404 @404;
|
||||||
|
}
|
||||||
|
|
||||||
|
location @404 {
|
||||||
|
echo 'This is OK';
|
||||||
|
}
|
||||||
|
}
|
7
swift.json
Normal file
7
swift.json
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"user": "user:swift",
|
||||||
|
"secret_key": "you_secret_key",
|
||||||
|
"auth_uri": "http://radosgw/auth/1.0",
|
||||||
|
"rados_uri": "http://radosgw/swift/v1/",
|
||||||
|
"bucket": "public"
|
||||||
|
}
|
67
swift.lua
Normal file
67
swift.lua
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
local cjson = require "cjson"
|
||||||
|
|
||||||
|
-- Load configuration
|
||||||
|
function readConf(file)
|
||||||
|
local f, err = io.open(file, "rb")
|
||||||
|
local content = f:read("*all")
|
||||||
|
f:close()
|
||||||
|
return content
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Print nested tables
|
||||||
|
function content_from_table(tbl)
|
||||||
|
for i, v in pairs(tbl) do
|
||||||
|
if type(v) == "table" then
|
||||||
|
content_from_table(v)
|
||||||
|
else
|
||||||
|
ngx.print(v)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local json = readConf('/etc/nginx/etc/swift.json')
|
||||||
|
local conf = cjson.decode(json)
|
||||||
|
|
||||||
|
-- Make authentication request to Ceph
|
||||||
|
headers_t = {}
|
||||||
|
headers_t["X-Auth-User"] = conf.user
|
||||||
|
headers_t["X-Auth-Key"] = conf.secret_key
|
||||||
|
|
||||||
|
local http = require("socket.http")
|
||||||
|
local r, c, h = http.request{
|
||||||
|
url = conf.auth_uri,
|
||||||
|
headers = headers_t,
|
||||||
|
method = "GET"
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Return 403 if not authorized
|
||||||
|
if c ~= 200 then
|
||||||
|
ngx.exit(ngx.HTTP_FORBIDDEN)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- OK, we get auth token now
|
||||||
|
local auth_token = ''
|
||||||
|
auth_token = h["x-auth-token"]
|
||||||
|
|
||||||
|
content_headers= {}
|
||||||
|
content_headers["X-Auth-Token"] = auth_token
|
||||||
|
|
||||||
|
local ltn12 = require("ltn12")
|
||||||
|
local io = require("io")
|
||||||
|
|
||||||
|
t = {}
|
||||||
|
|
||||||
|
local resp, code, http_st = http.request{
|
||||||
|
method = "GET",
|
||||||
|
headers = content_headers,
|
||||||
|
url = conf.rados_uri .. conf.bucket .. ngx.var.path,
|
||||||
|
sink = ltn12.sink.table(t)
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Return 404 if object not found in Ceph
|
||||||
|
if code ~= 200 then
|
||||||
|
ngx.exit(ngx.HTTP_NOT_FOUND)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Print object
|
||||||
|
content_from_table(t)
|
Loading…
Reference in New Issue
Block a user