Spore.Middleware
Interface
A middleware must use the namespace Spore.Middleware
and follow this caveat:
local m = {}
function m:call (req)
... something useful
end
return m
Spore.Middleware.Auth.AWS
This middleware implements the authentication for Amazon Web Services, see the ref doc.
This middleware requires luaossl.
This middleware should be loaded as the last middleware, because it directly sends the request.
local client = require 'Spore'.new_from_spec('amazons3.json', {
base_url = 'http://s3-eu-west-1.amazonaws.com', -- the default is http://s3.amazonaws.com
})
client:enable('Parameter.Default', {
bucket = 'mybucket',
})
client:enable('Auth.AWS', {
aws_access_key = '0PN5J17HBGZHT7JJ3X82',
aws_secret_key = 'uV3F3YluFJax1cknvbcGwgjvx4QpvB+leU8dUj2o',
})
Spore.Middleware.Auth.Basic
This middleware adds a header authorization
in the request.
client:enable('Auth.Basic', {
username = 'schacon/token',
password = '6ef8395fecf207165f1a82178ae1b984',
})
Spore.Middleware.Auth.Bearer
This middleware adds a header authorization
in the request.
client:enable('Auth.Bearer', {
bearer_token = 'vF9dft4qmT',
})
Spore.Middleware.Auth.DataPublica
This middleware implements the authentication for DataPublica.
This middleware requires luaossl.
This middleware should be loaded as the last middleware, because it directly sends the request.
local client = Spore.new_from_spec 'https://raw.github.com/SPORE/api-description/master/services/datapublica.json'
client:enable 'Format.JSON'
client:enable('Auth.DataPublica', {
key = '356a192c7813b04c54574d18c28d46e6395428ab',
password = '30d87add92e7b27ce4',
})
Spore.Middleware.Auth.Digest
This middleware adds a header authorization
in the request
The nonce
retrieved in the response to the first request is stored
and used by all following requests.
This middleware requires luaossl.
client:enable('Auth.Digest', {
username = 'Mufasa',
password = 'Circle Of Life',
})
Spore.Middleware.Auth.OAuth
This middleware adds a header authorization
in the request.
This middleware requires luaossl.
This middleware should be loaded as the last middleware, because it directly sends the request.
client:enable('Auth.OAuth', {
realm = 'Example', -- optional
oauth_consumer_key = 'key',
oauth_consumer_secret = 'secret',
oauth_token = 'accesskey',
oauth_token_secret = 'accesssecret',
oauth_signature_method = 'HMAC-SHA1',
})
Spore.Middleware.Format.JSON
This middleware encodes the parameter payload
and decodes the body of the response.
This middleware adds the header accept
and the header content-type
when payload,
with the value application/json
.
client:enable 'Format.JSON'
Spore.Middleware.Format.XML
This middleware encodes the parameter payload
and decodes the body of the response.
This middleware adds the header accept
and the header content-type
when payload,
with the value text/xml
.
This middleware requires LuaExpat.
client:enable 'Format.XML'
```lua
```lua
client:enable('Format.XML', {
indent = ' ',
key_attr = {
tagname = attrname,
...
},
},
The function to_xml( table [, options] )
is also exported
by this module.
local to_xml = require 'Spore.Middleware.Format.XML'.to_xml
print(to_xml(payload, {
indent = ' ',
key_attr = {
tagname = attrname,
...
},
}))
Spore.Middleware.Format.YAML
This middleware encodes the parameter payload
and decodes the body of the response.
This middleware adds the header accept
and the header content-type when payload
, with the value text/x-yaml
.
This middleware requires LYAML.
client:enable 'Format.YAML'
Spore.Middleware.Parameter.Default
This middleware set some parameters with default value.
client:enable('Parameter.Default', {
state = 'open',
...
})
Spore.Middleware.Parameter.Force
This middleware forces some parameters.
client:enable('Parameter.Force', {
format = 'json',
...
})
Spore.Middleware.Proxy.Basic
This middleware handles HTTP proxy.
client:enable('Proxy.Basic', {
proxy = 'http://proxy.myorg:8080',
username = 'john', -- optional
password = 's3kr3t', -- optional
})
client:enable 'Proxy.Basic' -- uses HTTP_PROXY=http://john:s3kr3t@proxy.myorg:8080
Spore.Middleware.Cache
This middleware supplies a local cache (implemented with a weak table).
client:enable 'Cache'
Note: This middleware uses only URL as unique key.
Spore.Middleware.DoNotTrack
This middleware adds a header x-do-not-track
with the value 1
in the request.
client:enable 'DoNotTrack'
Spore.Middleware.Logging
This middleware registers a logger in env.sporex.logger
for use by others middlewares.
This middleware requires LuaLogging.
require 'logging.file'
client:enable('Logging', {
logger = logging.file 'test%s.log'
})
Spore.Middleware.Mock
This middleware allows to register a set of couple (condition, response).
rules = {
function (req) return req.method == 'HEAD' end,
function (req) return { status = 404 } end,
'pattern_in_url', -- shortcut for: function (req) return req.url:match 'pattern_in_url' end
function (req) return { status = 401 } end,
}
client:enable('Mock', rules)
Spore.Middleware.Redirection
This middleware handles the header location
in the response.
client:enable 'Redirection'
Spore.Middleware.Runtime
This middleware adds a header x-spore-runtime
(unit is seconds)
in the response.
client:enable 'Runtime'
...
print(response.headers['x-spore-runtime']
Spore.Middleware.UserAgent
This middleware overloads the header useragent
in the request.
client:enable('UserAgent', {
useragent = 'Mozilla/5.0'
})