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 luacrypto.

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 luacrypto.

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 luacrypto.

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 luacrypto.

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'
})